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 相关文章推荐
jquery 全局AJAX事件使用代码
Nov 05 Javascript
jquery获取table中的某行全部td的内容方法
Mar 08 Javascript
js 浏览本地文件夹系统示例代码
Oct 24 Javascript
Node.js中调用mysql存储过程示例
Dec 20 Javascript
JavaScript静态类型检查工具FLOW简介
Jan 06 Javascript
JQuery实现带排序功能的权限选择实例
May 18 Javascript
JS随机调用指定函数的方法
Jul 01 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
Jul 01 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
Jan 04 Javascript
jq checkbox 的全选并ajax传参的实例
Apr 01 Javascript
JS实现身份证输入框的输入效果
Aug 21 Javascript
angular4强制刷新视图的方法
Oct 09 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中strtotime函数使用方法分享
2012/01/10 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
javascript 实用的文字链提示框效果
2010/06/30 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
vue项目中axios使用详解
2018/02/07 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
用Python写的图片蜘蛛人代码
2012/08/27 Python
python利用hook技术破解https的实例代码
2013/03/25 Python
简单使用Python自动生成文章
2014/12/25 Python
Python中获取对象信息的方法
2015/04/27 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
python小白切忌乱用表达式
2020/05/29 Python
python实现网页录音效果
2020/10/26 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
家庭教育先进个人事迹材料
2014/01/24 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
开工典礼致辞
2015/07/29 职场文书
vue实现移动端div拖动效果
2022/03/03 Vue.js