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 相关文章推荐
javascript中兼容主流浏览器的动态生成iframe方法
May 05 Javascript
JavaScript列表框listbox全选和反选的实现方法
Mar 18 Javascript
AngularJS实现全选反选功能
Dec 08 Javascript
jQuery简单操作cookie的插件实例
Jan 13 Javascript
window.open不被拦截的简单实现代码(推荐)
Aug 04 Javascript
JS实现字符串转驼峰格式的方法
Dec 16 Javascript
ECMAScript6 新特性范例大全
Mar 24 Javascript
微信小程序网络请求wx.request详解及实例
May 18 Javascript
深入理解vue中的$set
Jun 01 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
Oct 02 Javascript
JQuery常见节点操作实例分析
May 15 jQuery
如何在vue中使用HTML 5 拖放API
Jan 14 Vue.js
微信小程序实现手势图案锁屏功能
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实现百度网盘图片直链的代码分享
2012/11/01 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
PHP递归实现层级树状展开
2016/04/01 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
微信跳一跳游戏python脚本
2020/04/01 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
python 怎样进行内存管理
2020/11/10 Python
介绍一下.net和Java的特点和区别
2012/09/26 面试题
应届生新闻编辑求职信
2013/11/19 职场文书
档案室主任岗位职责
2014/02/12 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
紧急迫降观后感
2015/06/15 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
python自动化八大定位元素讲解
2021/07/09 Python