zoukankan      html  css  js  c++  java
  • 微信小程序之swiper组件高度自适应

    微信小程序之swiper组件高度自适应

    要求:顶部广告栏

       改变swiper组件的固定高度,使之随内部每张图片的高度做自适应

    原理: 

       图片加载完之后,获取图片的原始宽高,根据宽高比,计算出适应后的宽高,如果是适应屏幕宽度的话,就用到 wx.getSystemInfo() 方法设备的信息,并保存到一个数组中,(因为加载的原因不能用push,只能根据索引),切换时监听当前显示的图片,根据其索引找到对应的高度,并赋值给组件即可。

      

    wxml:

    <view class='swiper'>
        <swiper indicator-dots="{{indicatorDots}}" vertical="{{vertical}}" autoplay="{{autoplay}}" duration="{{duration}}" interval='{{interval}}' bindchange="bindchange"  circular="{{circular}}" style="height:{{imgheights[current]}}rpx;">
        <block wx:for='{{imgList}}' wx:key="{{index}}">
          <swiper-item>
            <image src="{{item}}" data-id='{{index}}' class="slide-image" mode="widthFix" bindload="imageLoad"/>
          </swiper-item>
          </block>
        </swiper>
      </view>

    wxss:

    .swiper image {
       100%;
      height: auto;
    }

    js:

    data: {
        //图片地址
        imgList: ['/images/wyh-img_bg.png', '/images/wyh-img8.png', '/images/wyh-img_shop1.png', '/images/wyh-img_bg1.png'],
        //是否采用衔接滑动  
        circular: true,
        //是否显示画板指示点  
        indicatorDots: false,
        //选中点的颜色  
        indicatorcolor: "#000",
        //是否竖直  
        vertical: false,
        //是否自动切换  
        autoplay: true,
        //自动切换的间隔
        interval: 2500,
        //滑动动画时长毫秒  
        duration: 100,
        //所有图片的高度  
        imgheights: [],
        //图片宽度 
        img 750,
        //默认  
        current: 0
      },
    imageLoad: function (e) {//获取图片真实宽度  
        var imgwidth = e.detail.width,
          imgheight = e.detail.height,
          //宽高比  
          ratio = imgwidth / imgheight;
          console.log(imgwidth, imgheight)
        //计算的高度值  
        var viewHeight = 750 / ratio;
        var imgheight = viewHeight;
        var imgheights = this.data.imgheights;
        //把每一张图片的对应的高度记录到数组里  
        imgheights[e.target.dataset.id] = imgheight;
        this.setData({
          imgheights: imgheights
        })
      },
      bindchange: function (e) {
        // console.log(e.detail.current)
        this.setData({ current: e.detail.current })
      },

    效果图:

  • 相关阅读:
    24. Swap Nodes in Pairs
    2. Add Two Numbers
    【设计模式】结构型模式
    【设计模式】创建型模式
    【设计模式】初识
    【自考总结】走过的弯路,都是你成长的旅途
    【VMware vSphere】再谈VMware vSphere
    评估网站性能的专业术语
    C/S与B/S之辩
    【VMware vSphere】Veeam备份
  • 原文地址:https://www.cnblogs.com/wangyihong/p/8610956.html
Copyright © 2011-2022 走看看