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 index()方法 获取相应元素索引值
Oct 12 Javascript
JavaScript中valueOf函数与toString方法深入理解
Dec 02 Javascript
网页中返回顶部代码(多种方法)另附注释说明
Apr 24 Javascript
javascript基于DOM实现省市级联下拉框的方法
May 14 Javascript
JavaScript类型系统之基本数据类型与包装类型
Jan 06 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
Jul 14 Javascript
jQuery常见的选择器及用法介绍
Dec 20 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
Mar 08 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
Aug 17 Javascript
jQuery滑动效果实现方法分析
Sep 05 jQuery
vue实现多条件和模糊搜索功能
May 28 Javascript
js实现查询商品案例
Jul 22 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+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
列表内容的选择
2006/06/30 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
Python实现KNN邻近算法
2021/01/28 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
.NET是怎么支持多种语言的
2015/02/24 面试题
名词解释型面试题(主要是网络)
2013/12/27 面试题
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
创伤外科专业推荐信范文
2013/11/19 职场文书
保险内勤岗位职责
2014/04/05 职场文书
路政管理求职信
2014/06/18 职场文书
二手房购房协议书范本
2014/10/05 职场文书
python基础之模块的导入
2021/10/24 Python
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers