废话不多说,直接上代码:
<view class=‘video-box‘> <view class="box" bindtouchstart="touchstart" bindtouchmove="touchmove" bindtouchend="touchend" > <view class="item item0 club" animation="{{animation1}}" style=‘z-index:{{zindex[0]}};opacity:{{opacities[0]}};‘> <image style=‘width:{{imgWidth}}‘ src=‘{{movies[0].url}}‘></image> <view class=‘sty_1‘> <view class=‘sty_2‘>{{movies[0].title}}</view> <view class=‘sty_3‘>{{movies[0].str_1}}</view> <view class=‘sty_3‘>{{movies[0].str_2}}</view> </view> </view> <view class=" item item1 club" animation="{{animation2}}" style=‘z-index:{{zindex[1]}};opacity:{{opacities[1]}};‘> <image style=‘width:{{imgWidth}}‘ src=‘{{movies[1].url}}‘></image> <view class=‘sty_1‘> <view class=‘sty_2‘>{{movies[1].title}}</view> <view class=‘sty_3‘>{{movies[1].str_1}}</view> <view class=‘sty_3‘>{{movies[1].str_2}}</view> </view> </view> <view class="item item2 club" animation="{{animation3}}" style=‘z-index:{{zindex[2]}};opacity:{{opacities[2]}};‘> <image style=‘width:{{imgWidth}}‘ src=‘{{movies[2].url}}‘></image> <view class=‘sty_1‘> <view class=‘sty_2‘>{{movies[2].title}}</view> <view class=‘sty_3‘>{{movies[2].str_1}}</view> <view class=‘sty_3‘>{{movies[2].str_2}}</view> </view> </view> <view class="item item3 club" animation="{{animation4}}" style=‘z-index:{{zindex[3]}};opacity:{{opacities[3]}};‘> <image style=‘width:{{imgWidth}}‘ src=‘{{movies[3].url}}‘></image> <view class=‘sty_1‘> <view class=‘sty_2‘>{{movies[3].title}}</view> <view class=‘sty_3‘>{{movies[3].str_1}}</view> <view class=‘sty_3‘>{{movies[3].str_2}}</view> </view> </view> <view class=‘btn_l‘> <view class=‘btnz‘ bindtap="goPre"> <image src=‘../../images/zuoluanbo@3x.png‘></image> </view> </view> <view class=‘btn_r‘> <view class=‘btny‘ bindtap="goNext"> <image src=‘../../images/youluobo@3x.png‘></image> </view> </view> </view>
movies:[ { url:‘http:***.png‘, title: ‘title1‘, str_1: ‘string1‘, str_2: ‘‘ }, { url:‘http:***.png‘, title: ‘title2‘, str_1: ‘string1‘, str_2: ‘string2‘ }, { url:‘http:***.png‘, title: ‘title3‘, str_1: ‘string1‘, str_2: ‘string2‘ }, { url:‘http:***.png‘, title: ‘title4‘, str_1: ‘string1‘, str_2: ‘string2‘ } ], animation1:‘‘, animation2:‘‘, animation3:‘‘, animation4:‘‘, animations: [], touchDot: ‘‘, done: false, time: 0, container: [], //记录当前5个位置为哪5个item,理解为5个容器 curPos: 2, //记录当前显示位置是第几个容器(从0开始) zindex: [0, 10, 100, 10], //与container中的对应 curIndex: 1,//从显示位置的item在clubs中的index postions: [0, 1, 2, 3],//container中4个容器所在位置 opacities: [0, 0.8, 1, 0.8], //function: onLoad: function (options) { //test---------- this.setPos(2,1) //初始化到正确的位置 var animation1 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) var animation2 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) var animation3 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) var animation4 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) this.animation1 = animation1; this.animation2 = animation2; this.animation3 = animation3; this.animation4 = animation4; this.animation1.translateX(‘0%‘).opacity(0).scale(0).step(); this.animation2.translateX(‘-125%‘).opacity(0.4).scale(0.8).step(); this.animation3.translateX(‘-200%‘).opacity(1).scale(1).step(); this.animation4.translateX(‘-275%‘).opacity(0.4).scale(0.8).step(); this.setData({ animation1: animation1.export(), animation2: animation2.export(), animation3: animation3.export(), animation4: animation4.export(), }) }, setPos: function (pos, index) { // POS CONTAINER AREA;INDEX movies INDEX let container = []; let p2 = pos; let p1 = this.findPrePos(p2); let p0 = this.findPrePos(p1); let p3 = this.findNextPos(p2); let i2 = index; let i1 = this.findPreIndex(i2); let i0 = this.findPreIndex(i1); let i3 = this.findNextIndex(i2); container[p0] = this.data.movies[i0]; container[p1] = this.data.movies[i1]; container[p2] = this.data.movies[i2]; container[p3] = this.data.movies[i3]; this.setData({ container: container }) }, /** * container中的位置 */ findNextPos: function (pos) { if (pos != 3) { return pos + 1; } return 0; }, findPrePos: function (pos) { if (pos != 0) { return pos - 1; } return 3; }, findNextIndex(index) { if (index != this.data.movies.length - 1) { return index + 1; } return 0; }, findPreIndex(index) { if (index != 0) { return index - 1; } return this.data.movies.length - 1; }, findNewDistance(newPos, index) { let newDistances = []; switch (newPos) { case 0: newDistances = [0 - 100 * index + ‘%‘, 0, 0]; break; case 1: newDistances = [-25 - 100 * index + ‘%‘, 0.4, 0.8]; break; case 2: newDistances = [0 - 100 * index + ‘%‘, 1, 1]; break; case 3: newDistances = [25 - 100 * index + ‘%‘, 0.4, 0.8]; break; } return newDistances; }, setNewZindex(newPos) { let zindexes = []; zindexes[newPos] = 100; let nextPos = this.findNextPos(newPos); zindexes[nextPos] = 10; let nnextPos = this.findNextPos(nextPos); zindexes[nnextPos] = 0; let prePos = this.findPrePos(newPos); zindexes[prePos] = 10; let pprePos = this.findPrePos(prePos); zindexes[pprePos] = 0; this.setData({ zindex: zindexes }) }, goPre:function(){ let container = this.data.container; let oldPos = this.data.curPos; let newPos = oldPos == 0 ? 3 : oldPos - 1; let newIndex = this.findPreIndex(this.data.curIndex); //先滑动,再赋值 var animation1 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) var animation2 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) var animation3 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) var animation4 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) this.animation1 = animation1; this.animation2 = animation2; this.animation3 = animation3; this.animation4 = animation4; let distances = []; let newPostions = []; let newOpacities = []; //用新位置找位移量 for (let i = 0; i < container.length; i++) { let newPos = this.findNextPos(this.data.postions[i]); let distance = this.findNewDistance(newPos, i); distances.push(distance); newPostions.push(newPos); newOpacities.push(distance[1]); } this.animation1.translateX(distances[0][0]).opacity(distances[0][1]).scale(distances[0][2]).step(); this.animation2.translateX(distances[1][0]).opacity(distances[1][1]).scale(distances[1][2]).step(); this.animation3.translateX(distances[2][0]).opacity(distances[2][1]).scale(distances[2][2]).step(); this.animation4.translateX(distances[3][0]).opacity(distances[3][1]).scale(distances[3][2]).step(); this.setData({ opacities: newOpacities, postions: newPostions, animation1: animation1.export(), animation2: animation2.export(), animation3: animation3.export(), animation4: animation4.export(), }) //赋值 this.setPos(newPos, newIndex) this.setNewZindex(newPos) this.setData({ curPos: newPos, curIndex: newIndex, }) }, goNext:function(){ let container = this.data.container; let oldPos = this.data.curPos; let newPos = oldPos==3?0:oldPos+1; let newIndex = this.findNextIndex(this.data.curIndex); var animation1 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) var animation2 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) var animation3 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) var animation4 = wx.createAnimation({ duration: 500, timingFunction: "ease", delay: 0 }) this.animation1 = animation1; this.animation2 = animation2; this.animation3 = animation3; this.animation4 = animation4; let distances = []; let newPostions = []; let newOpacities = []; //用新位置找位移量 for (let i = 0; i < container.length; i++) { let newPos = this.findPrePos(this.data.postions[i]); let distance = this.findNewDistance(newPos, i); distances.push(distance); newPostions.push(newPos); newOpacities.push(distance[1]); } this.animation1.translateX(distances[0][0]).opacity(distances[0][1]).scale(distances[0][2]).step(); this.animation2.translateX(distances[1][0]).opacity(distances[1][1]).scale(distances[1][2]).step(); this.animation3.translateX(distances[2][0]).opacity(distances[2][1]).scale(distances[2][2]).step(); this.animation4.translateX(distances[3][0]).opacity(distances[3][1]).scale(distances[3][2]).step(); this.setData({ opacities: newOpacities, postions: newPostions, animation1: animation1.export(), animation2: animation2.export(), animation3: animation3.export(), animation4: animation4.export(), }) //赋值 this.setPos(newPos, newIndex) this.setNewZindex(newPos) this.setData({ curPos: newPos, curIndex: newIndex, }) }, //触摸开始事件 touchstart: function (e) { this.data.touchDot = e.touches[0].pageX; var that = this; this.data.interval = setInterval(function () { that.data.time += 1; }, 100); }, //触摸移动事件 touchmove: function (e) { let touchMove = e.touches[0].pageX; let touchDot = this.data.touchDot; let time = this.data.time; //向左滑动 if (touchMove - touchDot <= -40 && time < 10 && !this.data.done) { this.data.done = true; this.goNext(); } //向右滑动 if (touchMove - touchDot >= 40 && time < 10 && !this.data.done) { this.data.done = true; this.goPre(); } }, //触摸结束事件 touchend: function (e) { clearInterval(this.data.interval); this.data.time = 0; this.data.done = false; },