赞
踩
在微信小程序中,需要实现展示5个,横向层叠的轮播图效果,轮播图由中间到2侧的依次缩小.如下图
使用原生小程序进行开发,没有使用Skyline模式,所以layout-type配置项也无效。所以基于swiper组件进行调整。
主要思路就是设置不同的样式,根据当前激活的项,来动态切换样式。
需要注意的是,下文激活的项指的是中间最大的一项,而不是swiper激活的最左侧的一项
由于有层叠效果,所以要给不同的swiper-item元素添加上不同的zindex层级。而swiper-item元素自带绝对定位。
根据层叠数量决定需要加几个层级。当有5个时,只要给激活的中间项加上最高的层级,左右2侧加上低一层级。
不同层级的swiper-item中的item对应有不同的样式,根据所在的不同层级,需要给对应的item添加上具体的效果样式。
此效果需要给不同的item添加缩放和左右偏移样式
在轮播图的切换中,需要给各个swiper-item动态切换样式。
我实现的方式是在swiper的bindchange方法中改变激活项的序号,编写wxs方法,将当前激活序号和此项序号传入方法进行判断,返回不同的类,wxml动态渲染不同的类。
同时轮播图一般需要循环无限滚动,所以也需要加上轮播图项的个数。
<swiper class="swiperedu" display-multiple-items="5" circular="{{true}}" bindchange="swiperChange" autoplay="{{true}}">
<swiper-item wx:for="{{list}}" wx:key="{{item}}" class="{{transform.classindex(index,nowIdx,listlen)}}">
<view class='{{transform.classtype(index,nowIdx,listlen)}}'></view>
</swiper-item>
</swiper>
classindex方法动态的判断swiper-item的层级,classtype方法动态判断item的样式。
// 判断样式 var classtype = function(index,curindex,length){ var indexnum = parseInt(index),curindexnum = parseInt(curindex); var cha = Math.abs(indexnum-curindexnum); //激活项是list最后一项 if(curindex ==length-1){ // 首尾衔接,第一项在最后一项右边 if(index==0){ return '激活项右边样式类'; } } //激活项是list最后一项 else if(curindex==0){ // 首尾衔接,最后一项在第一项在左边 if(index==length-1){ return '激活项右左边样式类'; } } //激活项 if(cha==0){ return '激活项样式' } //激活项右侧 else if(indexnum-curindexnum==1){ return '激活项右边样式类'; } //激活项左侧 else if(indexnum-curindexnum==-1){ return '激活项左边样式类'; } else { return '普通样式' } }
// 判断层级 var classindex = function(index,curindex,length){ var indexnum = parseInt(index),curindexnum = parseInt(curindex); var cha = Math.abs(indexnum-curindexnum); //激活swipet-item是list最后一项 if(curindex ==length-1){ // 首尾衔接,第一swiper-item在最后一个右边 if(index==0){ return 'zindex2'; } } //激活swiper-item是list最后一项 else if(curindex==0){ // 首尾衔接,最后swiper-item在第一个左边 if(index==length-1){ return 'zindex2'; } } //激活项,层级最高 if(cha==0){ return 'zindex3' } //左右两侧,层级第2 else if(cha==1){ return 'zindex2'; } //普通不加层级 else { return '' } }
轮播图循环变化时,要计算%的序号
swiperChange(e) {
this.setData({
nowIdx: (e.detail.current + 2) % this.data.list.length,
})
},
e.detail.current是轮播图的currentIndex,指的是swiper最左侧的swiper,由于效果中激活项是坐起第3项,所以激活的index需要+2;
这个效果的变化是由swiper自动切换,触发bindchange方法推动的。没有显式的声明swiper的current。
对于提供给用户切换箭头方法的层叠轮播图,需要声明swiper的current属性,用户的切换和current切换的事件会相互冲突,那个效果有时间再写吧
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。