如果实在没人能解决,我只好使用canvas实现这个组件的上下滚动,以毒攻毒,不能操作dom真难受
持续调用Animation.translateY在真机上出现卡顿之前使用scroll-view实现组件内部的滚动,但是因为canvas导致不得不使用cover-view,但是cover-view中不支持scroll-view,所以只能手写组件内部上下滚动,主要是解决手指上下拖动其内容。 但是因为监听touchmove导致不断更新Animation.translateY,在真机上测试出现非常严重的卡顿,到了无法忍受的地步, 代码略丑,如有想法可以提出 [代码]flootTouchStart: [代码][代码]function[代码][代码](e){[代码][代码] [代码][代码]// console.log(e.touches[0].clientY)[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]floorTouchStart: e.touches[0][代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码] [代码][代码]flootTouchMove: [代码][代码]function[代码][代码](e) {[代码][代码] [代码][代码]// const flootTouchStartX = this.data.floorTouchStart.clinetX;[代码][代码] [代码][代码]const flootTouchStartY = [代码][代码]this[代码][代码].data.floorTouchStart.clientY;[代码][代码] [代码][代码]// console.log(flootTouchStartY);[代码] [代码] [代码][代码]// const flootMoveX = e.touches[0].clinetX;[代码][代码] [代码][代码]const floorMoveY = e.touches[0].clientY;[代码] [代码] [代码][代码]let curMove = floorMoveY - flootTouchStartY;[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]floorTouchStart: e.touches[0][代码][代码] [代码][代码]})[代码][代码] [代码] [代码] [代码][代码]if[代码] [代码]([代码][代码]this[代码][代码].data.floorList.length > 5 ) {[代码][代码] [代码] [代码] [代码][代码]if[代码] [代码]([代码][代码]this[代码][代码].data.floorMove > -([代码][代码]this[代码][代码].data.floorList.length - 5) * 32 && curMove < 0 ) { [代码][代码]// 向下滚[代码][代码] [代码] [代码] [代码][代码]// console.log(curMove);[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]floorMove: curMove + [代码][代码]this[代码][代码].data.floorMove[代码][代码] [代码][代码]})[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]if[代码] [代码]([代码][代码]this[代码][代码].data.floorMove < 0 && curMove > 0) { [代码][代码]// 向上滚[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]floorMove: curMove + [代码][代码]this[代码][代码].data.floorMove[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]console.log([代码][代码]'xx'[代码] [代码]+ curMove)[代码][代码] [代码][代码]this[代码][代码].floorAnimation.translateY([代码][代码]this[代码][代码].data.floorMove).step()[代码][代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]floorAnimationData: [代码][代码]this[代码][代码].floorAnimation.export()[代码][代码] [代码][代码]})[代码][代码] [代码] [代码] [代码][代码]},[代码][代码]// index.wxml[代码][代码]<[代码][代码]cover-view[代码] [代码]class[代码][代码]=[代码][代码]'chooseFloor'[代码] [代码]wx:if[代码][代码]=[代码][代码]"{{chooseFloorShow}}"[代码] [代码]catchtouchstart[代码][代码]=[代码][代码]'flootTouchStart'[代码] [代码]catchtouchmove[代码][代码]=[代码][代码]'flootTouchMove'[代码][代码]>[代码][代码] [代码][代码]<[代码][代码]cover-view[代码] [代码]animation[代码][代码]=[代码][代码]"{{floorAnimationData}}"[代码] [代码]class[代码][代码]=[代码][代码]'inner-container'[代码][代码]>[代码][代码] [代码][代码]<[代码][代码]cover-view[代码][代码] [代码][代码]wx:for[代码][代码]=[代码][代码]"{{floorList}}"[代码][代码] [代码][代码]wx:key[代码][代码]=[代码][代码]"{{index}}"[代码][代码] [代码][代码]data-num[代码][代码]=[代码][代码]"{{index}}"[代码][代码] [代码][代码]class[代码][代码]=[代码][代码]'floorItem {{curFloor == item?"curfloor": ""}}'[代码][代码] [代码][代码]bindtap[代码][代码]=[代码][代码]'confirmFloor'[代码][代码]>[代码][代码] [代码][代码]<[代码][代码]cover-view[代码][代码]>{{item}}</[代码][代码]cover-view[代码][代码]>[代码][代码] [代码][代码]</[代码][代码]cover-view[代码][代码]>[代码][代码] [代码][代码]</[代码][代码]cover-view[代码][代码]>[代码][代码] [代码][代码]</[代码][代码]cover-view[代码][代码]>[代码]
2018-08-29我换了一种思路,发下可以, 思路大致如下,改变数据,然后重新绘图,但是不知道资源消耗情况会怎么样
canvas实现动画我是用canvas写出来了静态的canvas图,现在想让这些canvas图动起来,类似于h5的canvas,虽然官方库里的api给了transform,但是在实际使用时,并没有产生任何效果 使用transfrom代码如下 [图片] 其并没有什么改善 有三个问题, 1、transform如何使用? 2、如何控制整个canvas恢出的图已同等比例放大、缩小、上下左右运动,并保持画布没有变动 3、如何控制canvas绘图中的其中一个图控制其运动动作
2018-08-28