nuxt.js项目使用swiper轮播插件具体步骤

一. 版本环境

项目是通过npx create-nuxt-app@2.9.2 projectName创建的

"nuxt": "^2.0.0",
"swiper": "^4.5.1",
"vue-awesome-swiper": "^4.1.1"
二. 代码部分

2.1 安装插件

npm install swiper@4.5.1 --save
npm install vue-awesome-swiper@4.1.1 --save

2.2 plugins文件夹创建swiper.js文件,内容如下

import Vue from 'vue'
import css from 'swiper/dist/css/swiper.css'
import VueAwesomeSwiper from 'vue-awesome-swiper'
export default () => {
  Vue.use(VueAwesomeSwiper, {css})
}

CSS样式文件的导入需要特别说一下,官网提示导入如下:
在这里插入图片描述
所以当前版本下(“swiper”: “^4.5.1”)我该这样导入import css from ‘swiper/css/swiper.css’,但是报错了,如下:

在这里插入图片描述
正确写法如下:

import css from 'swiper/dist/css/swiper.css'

2.3 在nuxt.config.js中配置插件

plugins: [
  { src: "~/plugins/swiper.js", ssr: false },
],

2.4 在components文件夹里面创建swiper.vue组件

<template>
  <div class="swiper-page">
    <div v-swiper:mySwiper="swiperOption" class="swiper-container">
      <div class="swiper-wrapper">
        <div class="swiper-slide" v-for="(item, idx) in swiperData" :key="idx">
          <img :src="item.imgUrl" />
        </div>
      </div>
      <div class="swiper-pagination swiper-pagination-style"></div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      swiperData: [
        { imgUrl: require('../../static/images/index/banner@2x.png') },
        { imgUrl: require('../../static/images/index/bg@2x.png') },
        { imgUrl: require('../../static/images/index/bg1.png') },
      ],
      swiperOption: {
        pagination: {
          el: '.swiper-pagination',
          bulletClass: 'my-bullet-swiper', // 自定义设置默认类名
          bulletActiveClass: 'my-bullet-active-swiper', // 自定义滑块活跃类名
          clickable: true, // 点击当前滑块切换到对应的轮播图片
        },
        autoplay: {
          delay: 2000,
        },
        paginationClickable: true,
        speed: 800,
        loop: true,
        observer: true,
        observeParents: true,
        autoplayDisableOnInteraction: false,
      },
    }
  },
}
</script>

<style lang="scss" scoped>
.swiper-page {
  position: relative;
  .swiper-slide {
    width: 760px;
    height: 440px;
    // box-shadow: 0 0 30px 3px rgba(77, 97, 140, 0.4);
    img {
      width: 760px;
      height: 440px;
    }
  }
  .swiper-pagination-style {
    position: absolute;
    left: 60px;
    bottom: 39px;
    width: 300px;
    @include flexlayout(row, flex-start, center);
    .my-bullet-swiper {
      display: inline-block;
      width: 46px;
      height: 6px;
      background: #9b9bb6;
      margin-right: 14px;
    }
    .my-bullet-active-swiper {
      background: #ffd18e;
    }
  }
}
</style>

2.5 在某个页面引入使用swiper组件

<template>
  <div class="content-swiper">
     <swiper-page></swiper-page>
  </div>
</template>

<script>
import swiperPage from '~/components/swiper.vue'

export default {
  name: "contentSwiper",
  components: {
    swiperPage,
  },
}
</script>

注意:此时会遇到一个问题,你会发现自定义滑块的样式不起作用

// 这个部分没效果
<div class="swiper-pagination swiper-pagination-style"></div>

在这里插入图片描述

原因: swiper分页是在mouted周期里操作DOM创建的,vue是不会帮你在创建的分页上加上scoped自定义属性的

方法:1. style标签去掉scoped。 2.在下面再写一个style标签且不带scoped属性

修改后成功使用,如下图:

在这里插入图片描述

注意:使用时一定要注意安装插件的版本,如果使用不起,很有可能是版本不匹配。

(完)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值