vue项目中导入swiper插件的方法


Posted in Javascript onJanuary 30, 2018

版本选择

swiper是个常用的插件,现在已经迭代到了第四代:swiper4。

常用的版本是swiper3和swiper4,我选择的是swiper3。

安装

安装swiper3的最新版本3.4.2:

npm i swiper@3.4.2 -S

这里一个小知识,查看node包的所有版本号的方法:

npm view 包名 versions

组件编写

swiper官方的使用方法分为4个流程:

  1. 加载插件
  2. HTML内容
  3. 给Swiper定义一个大小
  4. 初始化Swiper

我也按照这个流程编写组件:

加载插件

import Swiper from 'swiper';
import 'swiper/dist/css/swiper.min.css';

HTML内容

<template>
  <div class="swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide">Slide 1</div>
      <div class="swiper-slide">Slide 2</div>
      <div class="swiper-slide">Slide 3</div>
    </div>
    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div>
    <!-- 如果需要导航按钮 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
    <!-- 如果需要滚动条 -->
    <div class="swiper-scrollbar"></div>
  </div>
</template>

给Swiper定义一个大小

.swiper-container {
  width: 600px;
  height: 300px;
}

初始化Swiper

因为dom渲染完成才能初始化Swiper,所以必须将初始化放入vue的生命周期钩子函数mounted中:

mounted(): {
  /* eslint-disable no-new */
  new Swiper('.swiper-container', {})
}

以上代码中的/* eslint-disable no-new */是启用的eslint代码检测的项目可以使用,如果没有使用eslint可用使用一下代码:

mounted(): {
  var mySwiper = new Swiper('.swiper-container', {})
}

完成

将以上的代码合并起来:

<template>
  <div class="swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide">Slide 1</div>
      <div class="swiper-slide">Slide 2</div>
      <div class="swiper-slide">Slide 3</div>
    </div>
    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div>
    <!-- 如果需要导航按钮 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
    <!-- 如果需要滚动条 -->
    <div class="swiper-scrollbar"></div>
  </div>
</template>

<script>
import Swiper from 'swiper';
import 'swiper/dist/css/swiper.min.css';
export default {
  mounted(): {
    var mySwiper = new Swiper('.swiper-container', {})
  }
}
</script>

<style>
.swiper-container {
  width: 600px;
  height: 300px;
}
</style>

运行,你看可以实现轮播图的效果了。但是到此为止只实现了轮播的效果,还没有对数据的渲染。

对数据的渲染

在实际项目中swiper插件常用于实现banner图的效果(新浪手机版):

vue项目中导入swiper插件的方法

数据的获取

我用在vue项目中常用ajax插件axios来示例:

axios
 .get('/user?ID=12345')
 .then(function (response) {
  this.imgList = response;
 })
 .catch(function (error) {
  console.log(error);
 });

将获取数据的数据结构规定为:

[
  "https://www.baidu.com/img/baidu_jgylogo3.gif",
  "https://www.baidu.com/img/baidu_jgylogo3.gif",
  "https://www.baidu.com/img/baidu_jgylogo3.gif",
  "https://www.baidu.com/img/baidu_jgylogo3.gif",
  "https://www.baidu.com/img/baidu_jgylogo3.gif"
]

列表渲染

<template>
  <div class="swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide" v-for="item in imgList" :style="{backgroundImage: 'url(' + item + ')'}"></div>
    </div>
    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div>
    <!-- 如果需要导航按钮 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
    <!-- 如果需要滚动条 -->
    <div class="swiper-scrollbar"></div>
  </div>
</template>

<style>
.swiper-slide {
  width: 100%;
  height: 400px;
}
<style>

到此为止已经将数据渲染完成了,但是查看实际效果,似乎banner无法实现轮播图的效果啊。这里只是将图片渲染了出来,但是渲染出轮播图并没有被初始化。因为初始化已经在生命周期mounted时完成了。

初始化

所以在获取数据且DOM更新后,需要重新初始化swiper。

axios
 .get('/user?ID=12345')
 .then(function (response) {
  // 获取数据更新
  this.imgList = response;
  // DOM还没有更新
  this.$nextTick(() => {
    // DOM更新了
    // swiper重新初始化
    /* eslint-disable no-new */
    new Swiper('.swiper-container', {})
  })
 })
 .catch(function (error) {
  console.log(error);
 });

到此,轮播图的效果实现了。

总结

swiper是我们平时很常用的插件,但将swiper导入vue项目中遇到的问题不少。最主要的问题是要搞懂vue的生命周期,这样才能有效地使用各种js插件。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中获取事件对象的方法小结
Mar 13 Javascript
JS实现日期加减的方法
Nov 29 Javascript
Javscript删除数组中指定元素并返回新数组
Mar 06 Javascript
使用jQuery jqPlot插件绘制柱状图
Dec 18 Javascript
jquery获得当前html页面源码的方法
Jul 14 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
Mar 08 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
Jun 20 Javascript
web.js.字符串与正则表达式操作
May 13 Javascript
JS身份证信息验证正则表达式
Jun 12 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
Jan 23 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
Jun 10 Javascript
微信小程序实现手势图案锁屏功能
Jan 30 #Javascript
简单理解Vue中的nextTick方法
Jan 30 #Javascript
Vue组件中slot的用法
Jan 30 #Javascript
vue初尝试--项目结构(推荐)
Jan 30 #Javascript
JS实现的邮箱提示补全效果示例
Jan 30 #Javascript
JS实现的抛物线运动效果示例
Jan 30 #Javascript
express如何使用session与cookie的方法
Jan 30 #Javascript
You might like
5.PHP的其他功能
2006/10/09 PHP
c#中的实现php中的preg_replace
2009/12/21 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
用js编写留言板
2020/03/17 Javascript
pyside写ui界面入门示例
2014/01/22 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
Python中Threading用法详解
2017/12/27 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
高中军训广播稿
2014/01/14 职场文书
社区七一党员活动方案
2014/01/25 职场文书
小学教师办公室制度
2014/02/03 职场文书
学习教师法的心得体会
2014/09/03 职场文书
作风建设整改方案
2014/10/27 职场文书
董事长秘书工作总结
2015/08/14 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
在Django中使用MQTT的方法
2021/05/10 Python
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers