vue+swiper实现组件化开发

  1. swiper的组件
<template>
    <div class="swiper-container">
        <div class="swiper-wrapper">
            <div class="swiper-slide" v-for="item in swiper"><img :src="item.room_src" alt=""></div>
            <!--<div class="swiper-slide" v-for="item in test"><img :src="item.room_src" alt=""></div>-->
        </div>
    </div>
</template>
<script>
  import Swiper from 'swiper'

  export default {
    name: 'swiper',
    data() {
      return {
        mySwiper: null,
//        test: [
//          "https://rpic.douyucdn.cn/acrpic/171024/288016_0921.jpg",
//          "https://rpic.douyucdn.cn/acrpic/171024/748396_0924.jpg",
//          "https://rpic.douyucdn.cn/acrpic/171024/453751_0922.jpg",
//          "https://rpic.douyucdn.cn/acrpic/171024/79663_0920.jpg"
//        ]
      }
    },
    props: ['swiper'],  //swiper的就是test这个数据传递来的
    methods: {
      _initSwiper() {
        this.mySwiper = new Swiper('.swiper-container', {
          autoplay: 5000,//可选选项,自动滑动
        })
      },
      _updateSwiper() {
        this.$nextTick(() => {
          this.mySwiper.update(true);  //swiper update的方法
        })
      },
      swiperUpdate() {
        if (this.mySwiper) { //节点存在
          this._updateSwiper(); //更新
        } else {
          this._initSwiper(); //创建
        }
      },
    },

    watch: {
      //通过props传来的数据 和 组件一加载节点就创建成功 二者不是同步,实时监听的swiper(传递的值)的变化
      swiper() {
        this.swiperUpdate();
      }
    },
    mounted() {
      this.swiperUpdate(); //页面一加载拉去数据创建节点
    }
  }
</script>
<style lang="scss" scoped>
    .swiper-container {
        width: 100%;
        height: 4rem;
        margin-top: 0.9rem;
        .swiper-wrapper {
            width: 100%;
            height: 100%;
            .swiper-slide {
                background-size: cover;
                width: 100%;
                height: 4rem;
                img {
                    width: 100%;
                    height: 100%;
                }
            }
        }
    }


</style>
  1. home.vue 调用的组件方法

//html

    <swiper :swiper="roomList.slice(6,10)" ></swiper>

//js

  import swiper from 'components/swiper/swiper'

 components: {
      swiper
    },

问题:如果单纯的调用_initSwiper的方法,会发现页面是不能滚动的,但是页面随便修改东西,然后保存的swiper又可以滚动的,这个个原因是初始swiper的节点没有创建成功,值页面有穿进去的,一层一层的可以打印swiper的值为空的,当修改东西值就能传递进去的,所以的这里的我们需要通过判断节点是否成功来update siwper的方法

Vue.js 结合 Swiper 是一种常见的组合,用于创建动态且响应式的轮播图组件。Swiper 是一款流行的前端轮播库,它提供了丰富的选项和易用的 API,而 Vue 可以帮助我们管理数据绑定、状态管理和组件复用。 以下是使用 VueSwiper 实现叠层轮播图的基本步骤: 1. **安装 Swiper**: 首先,你需要在项目中引入 Swiper 的库。可以使用 npm 或 yarn 进行安装: ```bash npm install swiper@latest swiper-auto-init --save # 或者 yarn add swiper@latest swiper-auto-init ``` 2. **导入 Swiper 组件**: 在你的 Vue 文件中,导入 Swiper 的 CSS 和 JavaScript,并使用 `v-bind` 将其属性绑定到组件上: ```html <link rel="stylesheet" href="path/to/swiper.min.css"> <script src="path/to/swiper-bundle.min.js"></script> ``` ```js import { Swiper, SwiperSlide } from 'swiper'; ``` 3. **创建模板和数据**: 创建一个包含 Swiper 组件的 Vue 模板,并定义数据数组,存放轮播图片及其内容: ```html <div id="mySwiper"> <swiper :options="swiperOptions"> <swiper-slide v-for="(item, index) in images" :key="index"> <img :src="item.image" alt="Slide {{ index + 1 }}"> <!-- 添加额外内容如标题等 --> <div class="slide-content">{{ item.title }}</div> </swiper-slide> </swiper> </div> ``` ```js data() { return { images: [ // 图片数组,例如 [{'image': 'img1.jpg', 'title': '图1'}, ...] ], swiperOptions: { // Swiper 的配置选项,如 autoplay、pagination 等 }, }; }, ``` 4. **初始化 Swiper**: 在 Vue 的 mounted 生命周期钩子函数里初始化 Swiper 组件,传入数据配置: ```js mounted() { this.$refs.mySwiper.swiper.init(); } ``` 5. **调整样式**:根据需要调整 Swiper 的样式和布局,比如添加 pagination 控制点、改变切换效果等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值