nuxt中简单使用swiper

摘要:
穿过洞后,我计划在Nuxt中使用vue真棒雨刷。我原本计划直接使用cdn将wiper脚本和css文件导入页头,然后像在vue单页项目中那样使用它们。然而,一旦页面在本地刷新,雨刮器将失去功能,不会滑动,并且没有定制的导航点,(我找不到真正的原因)我不得不继续使用互联网上提到最多的vue真棒雨刮器。1.首先,安装npminstallvue aw

经过踩坑,打算在nuxt中使用vue-awesome-swiper,本来打算直接用cdn在页面的head中引入swiper脚本及css文件,然后像在vue单页项目使用一样,但是,本地运行一刷新页面,swiper就失去了作用,不会滑动,自定义的导航点也没有,(自己又找不到真正的原因)只好用网上提到最多的vue-awesome-swiper来继续尝试使用。

1、首先,安装

npm install vue-awesome-swiper --save

有个报错:

nuxt中简单使用swiper第1张

 大致意识是 需要swiper5.2.0版本作为依赖

那就再装个swiper

npm install swiper --save

2、在plugins下新建vue-swiper.js文件

import Vue from 'vue'
import VueAwesomeSwiper from 'vue-awesome-swiper'
 
Vue.use(VueAwesomeSwiper)

3.在nuxt.config.js中配置:

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

在components中创建一个swiperCpt.vue组件

<template>
    <div v-swiper:mySwiper="swiperOption" class="swiperWrap">
        <div class="swiper-wrapper">
            <div class="swiper-slide" v-for="banner in banners">
                <img :src="banner.src">
            </div>
        </div>
        <div class="swiper-pagination swiper-pagination-bullets"></div>
  </div>
</template>

<script>
export default {
    data(){
        return{
            banners:[
                {src:"http://kexiepingtaieposter.hoohui.cn/paper_file/15908353622331590835195(1).png",link:""},
                {src:"http://kexiepingtaieposter.hoohui.cn/paper_file/15908353884901590835256(1).jpg",link:""},
            ],
            swiperOption: {
                loop: true,
                slidesPerView: 'auto',
                centeredSlides: true,
                spaceBetween: 30,
                pagination: {
                    el: '.swiper-pagination',
                    dynamicBullets: true
                },
                on: {
                    slideChange() {
                        console.log('onSlideChangeEnd', this);
                    },
                    tap() {
                        console.log('onTap', this);
                    }
                }
            }
        }
    },
    mounted(){
    }
}
</script>
<style lang="scss" scoped>
.swiperWrap{
    border:1px solid red;
    .swiper-slide{
        border:1px solid green;
        img{
            width:100%;
            height:100%;
        }
    }
}
</style>

在页面中使用:

import swiperCpt from '~/components/swiperCpt.vue';
components: {
    swiperCpt
 },
<swiperCpt></swiperCpt>

再封装个组件,banner由外部传入

swiperCpt.vue

<template>
<div>
    <div v-if="initStatus" v-swiper:mySwiper="swiperOption" :class="cusClass+' swiperWrap swiperBox '+ swpName" >
        <div class="swiper-wrapper">
            <div   v-for="banner in list">
                <a v-if="banner.link" :href="http://t.zoukankan.com/banner.link" target="_blank">
                    <img :src="http://t.zoukankan.com/banner.src">
                </a>
                <img v-else :src="http://t.zoukankan.com/banner.src">
            </div>
        </div>
        <div class="swiper-pagination swiper-pagination-bullets"></div>
    </div>
</div>
</template>

<script>
export default {
    props:{
        list:{
            //banner数组
            type:Array,
            default:function(){
                return []
            }
        },
        cusClass:{
            //自定义类名
            type:String,
            default:''
        },
        loop:{
            //是否循环
            type:Boolean,
            default:true
        },
        delay:{
            //间隔时间
            type:Number,
            default:3000
        },
        spaceBetween:{
            //两个恶轮播的间隔
            type:Number,
            default:0
        },
        slidesPerView:{
            //一页显示几个
            type:Number,
            default:1
        },
        paginationType:{
            //导航点类型
            // 'bullets'  圆点(默认)
            // 'fraction'  分式 
            // 'progressbar'  进度条
            // 'custom' 自定义
            type:String,
            default:''
        }
    },
    data(){
        return{
            initStatus:false,//初始化状态
            swpName:this.roundString(),//swiper的类名
            swiperOption: {},//swiper参数
        }
    },
    mounted(){
        let self = this;
        
        this.$nextTick(()=>{
            this.swiperOption={
                loop: self.loop,
                centeredSlides: true,
                slidesPerView: self.slidesPerView,//一页显示几个
                spaceBetween: self.spaceBetween,//间隔
                autoplay:{//自动轮播
                    delay: self.delay,
                    disableOnInteraction: false,//操作swiper后 自动轮播不会停止
                },
                pagination: {
                    el: '.swiper-pagination',
                    dynamicBullets: true,
                    clickable: true,
                    type:self.paginationType?self.paginationType:'bullets'
                },
                on: {
                    slideChange() {
                        console.log('onSlideChangeEnd', this);
                    },
                    tap() {
                        console.log('onTap', this);
                    }
                }
            }
            this.initStatus = true;//渲染swiper
        })
    },
    methods:{
        roundString() {
            //生成随机字符串
            let str = "";
            let chars = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
            chars.forEach(() => {
                str += chars[Math.ceil(Math.random()*25)]
            });
            return str;
        }
    }
}
</script>
<style lang="scss" scoped>
.swiperWrap{
    .swiper-slide{
        img{
            100%;
            height:100%;
        }
    }
}


</style>

在页面中使用:

banners:[
          {src:"http://kexiepingtaieposter.hoohui.cn/paper_file/15908353622331590835195(1).png",link:"http://www.baidu.com"},
          {src:"http://kexiepingtaieposter.hoohui.cn/paper_file/15908353884901590835256(1).jpg",link:""},
      ],
import swiperCpt from '~/components/swiperCpt.vue';
components: { swiperCpt},
<swiperCpt :list="banners"></swiperCpt>

免责声明:文章转载自《nuxt中简单使用swiper》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇离群值检测sql 排序时某些数据指定在前面然后再order by下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

swiper 点击切换,拖动切换后继续自动轮播

HTML结构 <div className="swiper-container main_meeting"> <div className="swiper-wrapper"> <div className="swiper-slide">Slide 1</div> <div class...

手机端--swiper一屏展示下个轮播的一半的效果

手机屏展示这样的效果,用swiper去实现, <template> <view class="container"> <view class="mas-promo-swiper-scroll-wrapper" :style="{ transform:'translateX(' +swipe...

关于swiper的使用 安卓没有反应

本次写项目,用到了swiper的插件! 但是领我万万没想到的是,在ios系统下,走的风生水起! 一到安卓手机,竟然GG了! 百思不得其解!怎么都划不动! 没错!就是来回切换换不动! 最后,终于找到了解决办法! 收下要注意版本问题,不容的swiper.min.css和swiper.min,js都是不一样的!小心啊要! 我这里用的是swiper.animate...

React Swiper轮播图(二)

目录 React Swiper轮播图(一) React Swiper轮播图(二) 需求 实现React可切换轮播图 效果预览 使用库 swiper官网 https://swiperjs.com/react npm i swiper@6.5.0 --save 实现方法 /** 导航 */ import React, { useState }...

swiper轮播问题之二:默认显示3张图片,中间显示全部两边显示部分

其二:项目遇到比较有点要求的轮播图,默认显示3张图片,中间显示全部,两边显示部分。如图:                                             网上找了也没有找到合适的,最后经过自己摸索写了出来,贴出代码分享给大家。         CSS .swiper-container { margin-top: 20px...

vue3.0用vue-awesome-swiper

使用新版vue-awesome-swiper出现了一些bug vue-awesome-swiper组件pagination小圆点不显示问题 不会自动播放 swiper没有css 参考如下配置 基本使用方法 1.安装 cnpm install vue-awesome-swiper --save 2.引用 /*全局引入*/ import VueAwes...