You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							173 lines
						
					
					
						
							5.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							173 lines
						
					
					
						
							5.9 KiB
						
					
					
				| /* eslint-disable */ | |
| var touchstart = function(event, ownerInstance) { | |
|     var ins = event.instance | |
|     var st = ins.getState() | |
|     if (st.disable) return // disable的逻辑 | |
|     // console.log('touchstart st', JSON.stringify(st)) | |
|     if (!st.size) return | |
|     // console.log('touchstart', JSON.stringify(event)) | |
|     st.isMoving = true | |
|     st.startX = event.touches[0].pageX | |
| } | |
| var touchmove = function(event, ownerInstance) { | |
|     var ins = event.instance | |
|     var st = ins.getState() | |
|     if (!st.size || !st.isMoving) return | |
|     // console.log('touchmove', JSON.stringify(event)) | |
|     var pagex = event.touches[0].pageX - st.startX | |
|     var movex = pagex > 0 ? Math.min(st.max, pagex) : Math.max(-st.max, pagex) | |
|     // 往回滑动的情况 | |
|     if (st.out) { | |
|         // 已经是划出来了,还要往左滑动,忽略 | |
|         if (movex < 0) return | |
|         ins.setStyle({ | |
|             'transform': 'translateX(' + (st.transformx + movex) + 'px)', | |
|             'transition': '' | |
|         }) | |
|         var btns = ownerInstance.selectAllComponents('.btn') | |
|         var transformTotal = 0 | |
|         var len = btns.length | |
|         var i = len - 1; | |
|         for (;i >= 0; i--) { | |
|             var transform = st.size.buttons[i].width / st.max * movex | |
|             var transformx = st.size.buttons[i].max - Math.min(st.size.buttons[i].max, transform + transformTotal) | |
|             btns[i].setStyle({ | |
|                 'transform': 'translateX(' + (-transformx) + 'px)', | |
|                 'transition': '' | |
|             }) | |
|             transformTotal += transform | |
|         } | |
|         return | |
|     } | |
|     if (movex > 0) movex = 0 | |
|     ins.setStyle({ | |
|         'transform': 'translateX(' + movex + 'px)', | |
|         'transition': '' | |
|     }) | |
|     st.transformx = movex | |
|     var btns = ownerInstance.selectAllComponents('.btn') | |
|     var transformTotal = 0 | |
|     var len = btns.length | |
|     var i = len - 1; | |
|     for (;i >= 0; i--) { | |
|         var transform = st.size.buttons[i].width / st.max * movex | |
|         var transformx = Math.max(-st.size.buttons[i].max, transform + transformTotal) | |
|         btns[i].setStyle({ | |
|             'transform': 'translateX(' + transformx + 'px)', | |
|             'transition': '' | |
|         }) | |
|         st.size.buttons[i].transformx = transformx | |
|         transformTotal += transform | |
|     } | |
| } | |
| var touchend = function(event, ownerInstance) { | |
|     var ins = event.instance | |
|     var st = ins.getState() | |
|     if (!st.size || !st.isMoving) return | |
|     st.isMoving = false | |
|     // console.log('touchend', JSON.stringify(event)) | |
|     var btns = ownerInstance.selectAllComponents('.btn') | |
|     var len = btns.length | |
|     var i = len - 1 | |
|     // console.log('len size', len) | |
|     if (Math.abs(event.changedTouches[0].pageX - st.startX) < st.throttle || event.changedTouches[0].pageX - st.startX > 0) { // 方向也要控制 | |
|         st.out = false | |
|         ins.setStyle({ | |
|             'transform': 'translate3d(0px, 0, 0)', | |
|             'transition': 'transform 0.4s' | |
|         }) | |
|         for (;i >= 0; i--) { | |
|             btns[i].setStyle({ | |
|                 'transform': 'translate3d(0px, 0, 0)', | |
|                 'transition': 'transform 0.4s' | |
|             }) | |
|         } | |
|         ownerInstance.callMethod('hide') | |
|         return | |
|     } | |
|     var movex = st.max | |
|     st.out = true | |
|     ins.setStyle({ | |
|         'transform': 'translate3d(' + (-movex) + 'px, 0, 0)', | |
|         'transition': 'transform 0.4s' | |
|     }) | |
|     st.transformx = -movex | |
|     var transformTotal = 0 | |
|     for (;i >= 0; i--) { | |
|         var transform = st.size.buttons[i].width / st.max * movex | |
|         var transformx = (-(transform + transformTotal)) | |
|         btns[i].setStyle({ | |
|             'transform': 'translate3d(' + transformx + 'px, 0, 0)', | |
|             'transition': 'transform 0.4s' | |
|         }) | |
|         st.size.buttons[i].transformx = transformx | |
|         transformTotal += transform | |
|     } | |
|     ownerInstance.callMethod('show') | |
| } | |
| var hideButton = function(event, ownerInstance) { | |
|     var ins = ownerInstance.selectComponent('.left') | |
|     var st = ins.getState() | |
|     if (!st.size) return | |
|     // console.log('hideButton', JSON.stringify(event)) | |
|     var btns = ownerInstance.selectAllComponents('.btn') | |
|     var len = btns.length | |
|     var i = len - 1 | |
|     // console.log('len size', len) | |
|     ins.setStyle({ | |
|         'transform': 'translate3d(0px, 0, 0)', | |
|         'transition': 'transform 0.4s' | |
|     }) | |
|     st.transformx = 0 | |
|     for (;i >= 0; i--) { | |
|         btns[i].setStyle({ | |
|             'transform': 'translate3d(0px, 0, 0)', | |
|             'transition': 'transform 0.5s' | |
|         }) | |
|         st.size.buttons[i].transformx = 0 | |
|     } | |
|     ownerInstance.callMethod('buttonTapByWxs', {index: event.currentTarget.dataset.index, data: event.currentTarget.dataset.data}) | |
|     return false | |
| } | |
| var sizeReady = function(newVal, oldVal, ownerInstance, ins) { | |
|     var st = ins.getState() | |
|     // st.disable = newVal && newVal.disable | |
|     if (newVal && newVal.button && newVal.buttons) { | |
|         st.size = newVal | |
|         st.transformx = 0 | |
|         // var min = newVal.button.width | |
|         var max = 0 | |
|         var len = newVal.buttons.length | |
|         var i = newVal.buttons.length - 1; | |
|         var total = 0 | |
|         for (; i >= 0; i--) { | |
|             max += newVal.buttons[i].width | |
|             // if (min > newVal.buttons[i]) { | |
|             //     min = newVal.buttons[i].width | |
|             // } | |
|             total += newVal.buttons[i].width | |
|             newVal.buttons[i].max = total | |
|             newVal.buttons[i].transformx = 0 | |
|         } | |
|         st.throttle = 40 // 固定值 | |
|         st.max = max | |
|         ownerInstance.selectComponent('.right').setStyle({ | |
|             'line-height': newVal.button.height + 'px', | |
|             left: (newVal.button.width) + 'px', | |
|             width: max + 'px' | |
|         }) | |
|         // console.log('st size', JSON.stringify(newVal)) | |
|     } | |
| } | |
| var disableChange = function(newVal, oldVal, ownerInstance, ins) { | |
|     var st = ins.getState() | |
|     st.disable = newVal | |
| } | |
| module.exports = { | |
|     touchstart: touchstart, | |
|     touchmove: touchmove, | |
|     touchend: touchend, | |
|     hideButton: hideButton, | |
|     sizeReady: sizeReady, | |
|     disableChange: disableChange | |
| } |