swiper的使用

swiper使用

<!-- 下载 版本5稳定bug少-->

 npm i --save swiper@5

<!-- 在使用地vue文件下引入包 -->

import Swiper from 'swiper'

<!-- 在main.js引入swiper样式 -->

import 'swiper/css/swiper.css'

 <!-- 页面结构 -->

 <!-- new swiper实例 -->


 

swiper 不生效在new Swiper 实例之前,页面中结构必须有 现在把new swiper实例放在mounted这里不行

原因: 异步阻塞 dispatch中涉及异步语句,导致v-for遍历的时候结构还没有完全生成 因此不行

解决方案

1.updated 响应式数据一边消耗性能

2.添加一个定时器 有bug ,给测试一个机会

3.最优解 watch+nextTick

watch监听他属性值的变化,执行handler方法是只能保证里面有数据没法保证v-for执行完

官网 Vue.nextTick( [callback, context] )在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

代码

 <template>

    <!--列表-->

        <div class="list-container">

            <div class="sortList clearfix">

                <div class="center">

                    <!--banner轮播-->

                    <div class="swiper-container" id="mySwiper">

                        <div class="swiper-wrapper">

                            <div class="swiper-slide" v-for="(carousel, index) in getbannerList" :key="carousel.id">

                                <img :src="carousel.imgUrl" />

                            </div>

                       

                        </div>

                        <!-- 如果需要分页器 -->

                        <div class="swiper-pagination"></div>

                        <!-- 如果需要导航按钮 -->

                        <div class="swiper-button-prev"></div>

                        <div class="swiper-button-next"></div>

                    </div>

                </div>

                <div class="right">

                    <div class="news">

                        <h4>

                            <em class="fl">尚品汇快报</em>

                            <span class="fr tip">更多 ></span>

                        </h4>

                        <div class="clearix"></div>

                        <ul class="news-list unstyled">

                            <li>

                                <span class="bold">[特惠]</span>备战开学季 全民半价购数码

                            </li>

                            <li>

                                <span class="bold">[公告]</span>备战开学季 全民半价购数码

                            </li>

                            <li>

                                <span class="bold">[特惠]</span>备战开学季 全民半价购数码

                            </li>

                            <li>

                                <span class="bold">[公告]</span>备战开学季 全民半价购数码

                            </li>

                            <li>

                                <span class="bold">[特惠]</span>备战开学季 全民半价购数码

                            </li>

                        </ul>

                    </div>

                    <ul class="lifeservices">

                        <li class=" life-item ">

                            <i class="list-item"></i>

                            <span class="service-intro">话费</span>

                        </li>

                        <li class=" life-item ">

                            <i class="list-item"></i>

                            <span class="service-intro">机票</span>

                        </li>

                        <li class=" life-item ">

                            <i class="list-item"></i>

                            <span class="service-intro">电影票</span>

                        </li>

                        <li class=" life-item ">

                            <i class="list-item"></i>

                            <span class="service-intro">游戏</span>

                        </li>

                        <li class=" life-item">

                            <i class="list-item"></i>

                            <span class="service-intro">彩票</span>

                        </li>

                        <li class=" life-item">

                            <i class="list-item"></i>

                            <span class="service-intro">加油站</span>

                        </li>

                        <li class=" life-item">

                            <i class="list-item"></i>

                            <span class="service-intro">酒店</span>

                        </li>

                        <li class=" life-item">

                            <i class="list-item"></i>

                            <span class="service-intro">火车票</span>

                        </li>

                        <li class=" life-item ">

                            <i class="list-item"></i>

                            <span class="service-intro">众筹</span>

                        </li>

                        <li class=" life-item">

                            <i class="list-item"></i>

                            <span class="service-intro">理财</span>

                        </li>

                        <li class=" life-item">

                            <i class="list-item"></i>

                            <span class="service-intro">礼品卡</span>

                        </li>

                        <li class=" life-item">

                            <i class="list-item"></i>

                            <span class="service-intro">白条</span>

                        </li>

                    </ul>

                    <div class="ads">

                        <img src="./images/ad1.png" />

                    </div>

                </div>

            </div>

        </div>

 </template>

 <script>

 import {mapState} from 'vuex'

 import Swiper from 'swiper'

 export default {

    mounted(){

        this.$store.dispatch('getBannerList')

    },

    computed:{

        ...mapState({

            getbannerList:state=>state.home.getbannerList

        })

    },

    watch:{

      getbannerList:{

        handler(newValue,oldValue){

         this.$nextTick(()=>{

           console.log(23,mySwiper)

           var mySwiper = new Swiper ('.swiper-container', {

           autoplay:true,

           loop: true,

           pagination: {

             el: '.swiper-pagination',

             clickable :true,

           },

           navigation: {

             nextEl: '.swiper-button-next',

             prevEl: '.swiper-button-prev',

           },

          })

         })

        }

      }

    },

 }

 </script>

 <style lang="less" scoped>

  .list-container {

        width: 1200px;

        margin: 0 auto;

        .sortList {

            height: 464px;

            padding-left: 210px;

            .center {

                box-sizing: border-box;

                width: 740px;

                height: 100%;

                padding: 5px;

                float: left;

            }

            .right {

                float: left;

                width: 250px;

                .news {

                    border: 1px solid #e4e4e4;

                    margin-top: 5px;

                    h4 {

                        border-bottom: 1px solid #e4e4e4;

                        padding: 5px 10px;

                        margin: 5px 5px 0;

                        line-height: 22px;

                        overflow: hidden;

                        font-size: 14px;

                        .fl {

                            float: left;

                        }

                        .fr {

                            float: right;

                            font-size: 12px;

                            font-weight: 400;

                        }

                    }

                    .news-list {

                        padding: 5px 15px;

                        line-height: 26px;

                        .bold {

                            font-weight: 700;

                        }

                    }

                }

                .lifeservices {

                    border-right: 1px solid #e4e4e4;

                    overflow: hidden;

                    display: flex;

                    flex-wrap: wrap;

                    .life-item {

                        border-left: 1px solid #e4e4e4;

                        border-bottom: 1px solid #e4e4e4;

                        margin-right: -1px;

                        height: 64px;

                        text-align: center;

                        position: relative;

                        cursor: pointer;

                        width: 25%;

                        .list-item {

                            background-image: url(./images/icons.png);

                            width: 61px;

                            height: 40px;

                            display: block;

                        }

                        .service-intro {

                            line-height: 22px;

                            width: 60px;

                            display: block;

                        }

                        &:nth-child(1) {

                            .list-item {

                                background-position: 0px -5px;

                            }

                        }

                        &:nth-child(2) {

                            .list-item {

                                background-position: -62px -5px;

                            }

                        }

                        &:nth-child(3) {

                            .list-item {

                                background-position: -126px -5px;

                            }

                        }

                        &:nth-child(4) {

                            .list-item {

                                background-position: -190px -5px;

                            }

                        }

                        &:nth-child(5) {

                            .list-item {

                                background-position: 0px -76px;

                            }

                        }

                        &:nth-child(6) {

                            .list-item {

                                background-position: -62px -76px;

                            }

                        }

                        &:nth-child(7) {

                            .list-item {

                                background-position: -126px -76px;

                            }

                        }

                        &:nth-child(8) {

                            .list-item {

                                background-position: -190px -76px;

                            }

                        }

                        &:nth-child(9) {

                            .list-item {

                                background-position: 0px -146px;

                            }

                        }

                        &:nth-child(10) {

                            .list-item {

                                background-position: -62px -146px;

                            }

                        }

                        &:nth-child(11) {

                            .list-item {

                                background-position: -126px -146px;

                            }

                        }

                        &:nth-child(12) {

                            .list-item {

                                background-position: -190px -146px;

                            }

                        }

                    }

                }

                .ads {

                    margin-top: 5px;

                    img {

                        opacity: 0.8;

                        transition: all 400ms;

                        &:hover {

                            opacity: 1;

                        }

                    }

                }

            }

        }

    }

 </style>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值