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 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
学习ExtJS accordion布局
Oct 08 Javascript
jquery autocomplete自动完成插件的的使用方法
Aug 07 Javascript
探究JavaScript函数式编程的乐趣
Dec 14 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
Feb 23 Javascript
JS实现动态给标签控件添加事件的方法示例
May 13 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
Dec 20 Javascript
Javascript中弹窗confirm与prompt的区别
Oct 26 Javascript
微信小程序从注册账号到上架(图文详解)
Jul 17 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
vue 解决data中定义图片相对路径页面不显示的问题
Aug 13 Javascript
js代码编写无缝轮播图
Sep 13 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
十天学会php之第一天
2006/10/09 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
Python里隐藏的“禅”
2014/06/16 Python
Ubuntu下安装PyV8
2016/03/13 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
Django中间件实现拦截器的方法
2018/06/01 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
校三好学生主要事迹
2014/01/11 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android