vue2中实现swipper轮播,可视区域展示三个图片,点击图片可以跳转,数据来自于父组件,解决文字渲染问题

158 阅读1分钟

首先安装swipper插件,本次使用的是swipper5的版本

npm install swiper@5

导入到指定的vue当中,本次案列是在一个页面当中使用,所以在单个vue当中导入的

import Swiper from 'swiper' import swiper/css/swiper.css

在页面当中的使用

<template>
  <div class="swiper" id="mySwiper">
      <div class="swiper-wrapper" >
         <div class="swiper-slide" v-for="(item,index) in datalist" :key=item.id>
           <img :src="item.src" alt="" :data-type="item.id"/>
         </div>
      </div>
      <div class="swiper-pagination"></div>
      <div class="swiper-button-prev"></div>
      <div class="swiper-button-next"></div>
  </div>
</template>

<script>
// import Vue 不是必须的,需要手动指定 Vue 的版本时,可以解开注释
// import Vue from 'vue';
import Swiper from 'swiper'
import 'swiper/css/swiper.css'
export default {
  props:{
    datalist:{
      type:Array,
      default:()=>{}
    }
  }
  data() {
    return {
      count: 0,
    };
  },
  methods: {
    
  },
  updated(){
    let vm=this
    var mySwiper=new Swiper('.swiper',{
      //点击图片跳转
      on:{
        click:function(e){
          let id=e.target.dataset.type
          vm.$emit('routego',id)//传出事件
        }
      },
      allowTouchMove:false,//是否支持鼠标拖动图片
      loop:true,//无限循环
      pagination:{
        el:'.swiper-pagination',
        clickable:true,
      },
      navigation:{
        nextEl:'.swiper-button-next',
        prevEl:'.swiper-button-prev',
        hiddenClass:'my-button-hidden'//自定义切换按钮隐藏的类名
      },
      autoplay:{
        delay:3000,
      },
      slidesPreView:3,//可视区域图片展示的数量
      observe:true,//监控数据变化,重置swiper
      observeParents:true,//监控父组件数据变化,重置swiper
      grid:{
        fill:'column',//网格布局,
        rows:1//一行展示
      },
      //鼠标移入,移除轮播暂定,切换按钮展示与隐藏
      mySwiper.el.onmouseover=()=>{
        mySwiper.autoplay.stop()
        mySwiper.navigation.$nextEl.css('display','block')
        mySwiper.navigation.$prevEl.css('display','block')
      },
      mySwiper.el.onmouseout=()=>{
        mySwiper.autoplay.start()
        mySwiper.navigation.$nextEl.css('display','none')
        mySwiper.navigation.$prevEl.css('display','none')
      }
    })
  }
};
</script>

<style>

</style>