1. 程式人生 > 其它 >swiper實現大圖預覽功能

swiper實現大圖預覽功能

首先安裝swiper外掛:6.8.4版本

npm install swiper --save

<template>
  <div>
    <div class="img">
      <img v-for="(img,index) in srcList"
           :src="img"
           alt=""
           :key="index"
           @click="canView(index)">
    </div>
    <div class="swiper-container"
         @click="closeView"
         v-show="isView">
      <div class="swiper-wrapper">
        <div class="swiper-slide"
             v-for="(img,index) in srcList"
             :key="index">
          <img :src="img"
               alt="" />
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import Swiper from 'swiper';
import 'swiper/swiper-bundle.css'
export default {
  data () {
    return {
      Swiper: null,
      isView: false,
      index: 0,
      srcList:['img1.png','img2.png']
    };
  },
  methods: {
    initSwiper () {
      this.Swiper = new Swiper(".swiper-container", {
        direction: 'horizontal',
        loop: false,
        observer: true, //修改swiper自己或子元素時,自動初始化swiper 
        observeParents: true, //修改swiper的父元素時,自動初始化swiper
        initialSlide: this.index,
      });
    },
    canView (index) {
      this.index = index
      this.$nextTick(() => {
        this.initSwiper()
        this.isView = true
      })
    },
    closeView () {
      this.index = 0
      this.isView = false
    }

  },
  mounted () {
    let _this = this
    window.addEventListener("popstate", function (e) {
      // alert("監聽到返回按鈕事件啦");
      _this.isView = false
    }, false);
  },
};
</script>
<style lang="scss" scoped>
.img {
  display: grid;
  grid-template-columns: 5.27rem 5.27rem 5.27rem 5.27rem;
  align-items: start;
  justify-items: start;
  grid-auto-flow: row;
  img {
    border-radius: 0.65rem;
    width: 4.49rem;
    height: 4.49rem;
    margin-right: 0.78rem;
    margin-bottom: 0.78rem;
  }
}
.swiper-container {
  width: 100vw;
  height: 100vh;
  background: rgba(0, 0, 0, 0.5);
  position: fixed;
  top: 0;
  left: 0;
  z-index: 10000;
  img {
    width: 100%;
    height: auto;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }
}
</style>