Nuxt3遇见的坑(二):Nuxt3 引入swiper

Nuxt3遇见的坑(二):Nuxt3 引入swiper

网上查了很多方法都不好使,最后看文档摸索了一个
先安装swiper,我的版本是6.0.0-alpha.18

yarn add swiper

在组件中引用

<template>
  <div class="pageSwiper">
    <div class="swiper-container swiper">
      <transition :duration="duration">
        <div class="swiper-wrapper">
          <div
            class="swiper-slide"
            v-for="(item, index) in props.imgList"
            :key="index"
          >
            <div class="swiperImg">
              <img :src="item" alt="" />
            </div>
          </div>
        </div>
      </transition>
      <div class="swiper-button-prev"></div>
      <!--左箭头。如果放置在swiper-container外面,需要自定义样式。-->
      <div class="swiper-button-next"></div>
      <!--右箭头。如果放置在swiper-container外面,需要自定义样式。-->
    </div>
  </div>
</template>
<script setup lang="ts">
import Swiper, { Autoplay, Navigation } from 'swiper';

// swiper.less/sass/css 决定了基础的样式
import 'swiper/swiper.scss';
Swiper.use([Autoplay, Navigation]);

const props = defineProps<{
  imgList: string[];
}>();

const duration = ref(0);

onMounted(() => {
  const ss = new Swiper('.pageSwiper .swiper', {
    watchSlidesProgress: true,
    slidesPerView: 'auto',
    centeredSlides: true,
    loop: true,
    loopedSlides: 14,
    navigation: {
      nextEl: '.swiper-button-next',
      prevEl: '.swiper-button-prev',
    },
    autoplay: {
      delay: 3000,
      disableOnInteraction: false,
    },
    on: {
      progress: function (swiper, progress) {
        for (let i = 0; i < this.slides.length; i++) {
          let slide = this.slides.eq(i);
          let slideProgress = this.slides[i].progress;
          let modify = 1;
          if (Math.abs(slideProgress) > 1) {
            modify = (Math.abs(slideProgress) - 1) * 0.3 + 1;
          }
          let translate = slideProgress * modify * 260 + 'px';
          let scale = 1 - Math.abs(slideProgress) / 5;
          let zIndex = 999 - Math.abs(Math.round(10 * slideProgress));
          slide[0].style.transform =
            'translateX(' + translate + ') scale(' + scale + ')';
          slide[0].style.zIndex = zIndex;
          slide[0].style.opacity = 1;
          if (Math.abs(slideProgress) > 3) {
            slide[0].style.opacity = 0;
          }
        }
      },
      setTransition: function (swiper, transition) {
        for (let i = 0; i < this.slides.length; i++) {
          let slide = this.slides.eq(i);
          slide[0].style.transitionDuration = transition + 'ms';
        }
      },
    },
  });
});

swiper官网: https://swiperjs.com/vue

这样子引入swiper的时候,build的时候会出现问题

Swiper.use is not a function

// nuxt.config.ts
export default defineNuxtConfig({
build: {
transpile: [‘swiper’],
},
})


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值