| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * æ¤ä¸ºwxs模åï¼åªæ¯æAPP-VUEï¼å¾®ä¿¡åQQå°ç¨åºä»¥åH5å¹³å° |
| | | * wxså
é¨ä¸æ¯æes6è¯æ³ï¼åéåªè½ä½¿ç¨varå®ä¹ï¼æ æ³ä½¿ç¨è§£æï¼ç®å¤´å½æ°çç¹æ§ |
| | | */ |
| | | |
| | | // å¼å§è§¦æ¸ |
| | | function touchstart(event, ownerInstance) { |
| | | // 触åäºä»¶çç»ä»¶çComponentDescriptorå®ä¾ |
| | | var instance = event.instance |
| | | // wxså
çå±é¨åéå¿«ç
§ï¼æ¤å¿«ç
§æ¯å±äºæ´ä¸ªç»ä»¶çï¼å¨touchstartåtouchmoveäºä»¶ä¸é½è½è·åå°ç¸åçç»æ |
| | | var state = instance.getState() |
| | | if (state.disable) return |
| | | var touches = event.touches |
| | | // 妿è¿è¡çæ¯å¤æè§¦æ§ï¼ä¸å
许è¿è¡æä½ |
| | | if (touches && touches.length > 1) return |
| | | // æ è¯å½å为æ»å¨ä¸ç¶æ |
| | | state.moving = true |
| | | // è®°å½è§¦æ¸å¼å§ç¹çåæ å¼ |
| | | state.startX = touches[0].pageX |
| | | state.startY = touches[0].pageY |
| | | } |
| | | |
| | | // è§¦æ¸æ»å¨ |
| | | function touchmove(event, ownerInstance) { |
| | | // 触åäºä»¶çç»ä»¶çComponentDescriptorå®ä¾ |
| | | var instance = event.instance |
| | | // wxså
çå±é¨åéå¿«ç
§ |
| | | var state = instance.getState() |
| | | if (state.disabled || !state.moving) return |
| | | |
| | | var touches = event.touches |
| | | var pageX = touches[0].pageX |
| | | var pageY = touches[0].pageY |
| | | var moveX = pageX - state.startX |
| | | var moveY = pageY - state.startY |
| | | var buttonsWidth = state.buttonsWidth |
| | | |
| | | // ç§»å¨çXè½´è·ç¦»å¤§äºYè½´è·ç¦»ï¼ä¹å³ç»ç¹ä¸èµ·ç¹ä½ç½®è¿çº¿ï¼ä¸X轴夹è§å°äº45度æ¶ï¼ç¦æ¢é¡µé¢æ»å¨ |
| | | if (Math.abs(moveX) > Math.abs(moveY) || Math.abs(moveX) > state.threshold) { |
| | | event.preventDefault() |
| | | event.stopPropagation() |
| | | } |
| | | // å¦æç§»å¨çXè½´è·ç¦»å°äºYè½´è·ç¦»ï¼ä¹å³ç»ç¹ä½ç½®ä¸èµ·ç¹ä½ç½®è¿çº¿ï¼ä¸Y轴夹è§å°äº45度æ¶ï¼è®¤ä¸ºæ¯é¡µé¢ä¸ä¸æ»å¨ï¼è䏿¯å·¦å³æ»å¨åå
æ ¼ |
| | | if (Math.abs(moveX) < Math.abs(moveY)) return |
| | | |
| | | // éå¶å³æ»çè·ç¦»ï¼ä¸å
许å
容é¨åå¾å³åç§»ï¼å³æ»ä¼å¯¼è´Xè½´åç§»å¼å¤§äº0ï¼ä»¥æ¤å夿 |
| | | // æ¤å¤ä¸è½ç´æ¥returnï¼å 为æ»å¨è¿ç¨ä¸ä¼ç¼ºå¤±æäºå
³é®ç¹åæ ï¼ä¼å¯¼è´éä¹±ï¼æå¥½çåæ³å°±æ¯ |
| | | // å¨è¶
åºåï¼è®¾ç½®ä¸º0 |
| | | if (state.status === 'open') { |
| | | // å¨å¼å¯ç¶æä¸ï¼åå·¦æ»å¨ï¼éå¿½ç¥ |
| | | if (moveX < 0) moveX = 0 |
| | | // æ³è¦æ¶èµ·èåï¼æå¤§è½ç§»å¨çè·ç¦»ä¸ºæé®çæ»å®½åº¦ |
| | | if (moveX > buttonsWidth) moveX = buttonsWidth |
| | | // 妿æ¯å·²ç»æå¼äºçç¶æï¼åå·¦æ»å¨æ¶ï¼ç§»å¨æ¶èµ·èå |
| | | moveSwipeAction(-buttonsWidth + moveX, instance, ownerInstance) |
| | | } else { |
| | | // å
³éç¶æä¸ï¼å³æ»å¨éå¿½ç¥ |
| | | if (moveX > 0) moveX = 0 |
| | | // æ»å¨çè·ç¦»ä¸å
许è¶
è¿æææé®çæ»å®½åº¦ï¼æ¤æ¶åªè½æ¯å·¦æ»ï¼æç»è®¾ç½®æé®çæ»å®½åº¦ï¼åæ¶ä¸ºè´æ° |
| | | if (Math.abs(moveX) > buttonsWidth) moveX = -buttonsWidth |
| | | // åªè¦æ¯å¨æ»è¿ç¨ä¸ï¼å°±ä¸æç§»å¨èåçå
容é¨åï¼ä»è使éèçèåæ¾ç¤ºåºæ¥ |
| | | moveSwipeAction(moveX, instance, ownerInstance) |
| | | } |
| | | } |
| | | |
| | | // 触æ¸ç»æ |
| | | function touchend(event, ownerInstance) { |
| | | // 触åäºä»¶çç»ä»¶çComponentDescriptorå®ä¾ |
| | | var instance = event.instance |
| | | // wxså
çå±é¨åéå¿«ç
§ |
| | | var state = instance.getState() |
| | | if (!state.moving || state.disabled) return |
| | | var touches = event.changedTouches ? event.changedTouches[0] : {} |
| | | var pageX = touches.pageX |
| | | var pageY = touches.pageY |
| | | var moveX = pageX - state.startX |
| | | if (state.status === 'open') { |
| | | // å¨å±å¼çç¶æä¸ï¼ç»§ç»å·¦æ»ï¼æ éæä½ |
| | | if (moveX < 0) return |
| | | // å¨å¼å¯ç¶æä¸ï¼ç¹å»ä¸ä¸å
容åºåï¼moveX为0ï¼ä¹å³æ²¡æè¿è¡ç§»å¨ï¼è¿æ¶æ§è¡æ¶èµ·èåé»è¾ |
| | | if (moveX === 0) { |
| | | return closeSwipeAction(instance, ownerInstance) |
| | | } |
| | | // å¨å¼å¯ç¶æä¸ï¼æ»å¨è·ç¦»å°äºéå¼ï¼åé»è®¤ä¸ºä¸å
³éï¼åæ¶æ¢å¤åæ¥çæå¼ç¶æ |
| | | if (Math.abs(moveX) < state.threshold) { |
| | | openSwipeAction(instance, ownerInstance) |
| | | } else { |
| | | // 妿æ»å¨è·ç¦»å¤§äºéå¼ï¼åæ§è¡æ¶èµ·é»è¾ |
| | | closeSwipeAction(instance, ownerInstance) |
| | | } |
| | | } else { |
| | | // å¨å
³éçç¶æä¸ï¼å³æ»ï¼æ éæä½ |
| | | if (moveX > 0) return |
| | | // çç±åä¸ |
| | | if (Math.abs(moveX) < state.threshold) { |
| | | closeSwipeAction(instance, ownerInstance) |
| | | } else { |
| | | openSwipeAction(instance, ownerInstance) |
| | | } |
| | | } |
| | | } |
| | | |
| | | // è·åè¿æ¸¡æ¶é´ |
| | | function getDuration(value) { |
| | | if (value.toString().indexOf('s') >= 0) return value |
| | | return value > 30 ? value + 'ms' : value + 's' |
| | | } |
| | | |
| | | // æ»å¨ç»ææ¶å¤ææ»å¨çæ¹å |
| | | function getMoveDirection(instance, ownerInstance) { |
| | | var state = instance.getState() |
| | | } |
| | | |
| | | // ç§»å¨æ»å¨éæ©å¨å
容åºåï¼åæ¶æ¾ç¤ºåºå
¶éèçèå |
| | | function moveSwipeAction(moveX, instance, ownerInstance) { |
| | | var state = instance.getState() |
| | | // è·åæææé®çå®ä¾ï¼éè¦éè¿å®å»è®¾ç½®æé®çä½ç§» |
| | | var buttons = ownerInstance.selectAllComponents('.u-swipe-action-item__right__button') |
| | | var len = buttons.length |
| | | var previewButtonsMoveX = 0 |
| | | |
| | | // 设置èåå
容é¨åçåç§» |
| | | instance.requestAnimationFrame(function() { |
| | | instance.setStyle({ |
| | | // 设置translateXçå¼ |
| | | 'transition': 'none', |
| | | transform: 'translateX(' + moveX + 'px)', |
| | | '-webkit-transform': 'translateX(' + moveX + 'px)' |
| | | }) |
| | | // æå æé®å¨ç» |
| | | for (var i = len - 1; i >= 0; i--) { |
| | | // éè¿æ¯ä¾ï¼å¾åºå
ç´ èªèº«è¯¥ç§»å¨çè·ç¦» |
| | | var translateX = state.buttons[i].width / state.buttonsWidth * moveX |
| | | // æç»ç§»å¨çè·ç¦»ï¼æ¯éè¿èªèº«æ¯ä¾ç®åºçè·ç¦»ï¼åå ä¸å¨å®ä¹åæææé®ç§»å¨çè·ç¦»ä¹å |
| | | var realTranslateX = translateX + previewButtonsMoveX |
| | | buttons[i].setStyle({ |
| | | // å¨ç§»å¨æé´ï¼ä¸è½ä½¿ç¨è¿æ¸¡ææï¼å¦åä¼é æå¡é¡¿ï¼æ¬è´¨åå æ¯æ¯æ¬¡ç§»å¨ä¸ç¹ï¼å°±è¦è±ä¸å®æ¶é´å»è¿æ¸¡è¿ä¸ªè¿ç¨ |
| | | 'transition': 'none', |
| | | 'transform': 'translateX(' + realTranslateX + 'px)', |
| | | '-webkit-transform': 'translateX(' + realTranslateX + 'px)' |
| | | }) |
| | | // è®°å½æ¬æé®ä¹åçæææé®çç§»å¨è·ç¦»ä¹å |
| | | previewButtonsMoveX += translateX |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // 䏿¬¡æ§å±å¼æ»å¨èå |
| | | function openSwipeAction(instance, ownerInstance) { |
| | | var state = instance.getState() |
| | | // è·åæææé®çå®ä¾ï¼éè¦éè¿å®å»è®¾ç½®æé®çä½ç§» |
| | | var buttons = ownerInstance.selectAllComponents('.u-swipe-action-item__right__button') |
| | | var len = buttons.length |
| | | // å¤çdurationåä½é®é¢ |
| | | const duration = getDuration(state.duration) |
| | | // å±å¼è¿ç¨ä¸ï¼æ¯å左移å¨ï¼æä»¥Xçåç§»åºè¯¥ä¸ºè´å¼ |
| | | var buttonsWidth = -state.buttonsWidth |
| | | var previewButtonsMoveX = 0 |
| | | instance.requestAnimationFrame(function() { |
| | | // 设置èå主ä½å
容 |
| | | instance.setStyle({ |
| | | 'transition': 'transform ' + duration, |
| | | 'transform': 'translateX(' + buttonsWidth + 'px)', |
| | | '-webkit-transform': 'translateX(' + buttonsWidth + 'px)', |
| | | }) |
| | | // 设置å个éèçæé®ä¸ºå±å¼çç¶æ |
| | | for (var i = len - 1; i >= 0; i--) { |
| | | // éè¿æ¯ä¾ï¼å¾åºå
ç´ èªèº«è¯¥ç§»å¨çè·ç¦» |
| | | var translateX = state.buttons[i].width / state.buttonsWidth * buttonsWidth |
| | | // æç»ç§»å¨çè·ç¦»ï¼æ¯éè¿èªèº«æ¯ä¾ç®åºçè·ç¦»ï¼åå ä¸å¨å®ä¹åæææé®ç§»å¨çè·ç¦»ä¹å |
| | | var realTranslateX = translateX + previewButtonsMoveX |
| | | buttons[i].setStyle({ |
| | | // å¨ç§»å¨æé´ï¼éè¦å ä¸å¨ç»ææ |
| | | 'transition': 'transform ' + duration, |
| | | 'transform': 'translateX(' + realTranslateX + 'px)', |
| | | '-webkit-transform': 'translateX(' + realTranslateX + 'px)' |
| | | }) |
| | | // è®°å½æ¬æé®ä¹åçæææé®çç§»å¨è·ç¦»ä¹å |
| | | previewButtonsMoveX += translateX |
| | | } |
| | | }) |
| | | setStatus('open', instance) |
| | | } |
| | | |
| | | // æ è®°èåçå½åç¶æï¼open-å·²ç»æå¼ï¼close-å·²ç»å
³é |
| | | function setStatus(status, instance) { |
| | | var state = instance.getState() |
| | | state.status = status |
| | | } |
| | | |
| | | // 䏿¬¡æ§æ¶èµ·æ»å¨èå |
| | | function closeSwipeAction(instance, ownerInstance) { |
| | | var state = instance.getState() |
| | | // è·åæææé®çå®ä¾ï¼éè¦éè¿å®å»è®¾ç½®æé®çä½ç§» |
| | | var buttons = ownerInstance.selectAllComponents('.u-swipe-action-item__right__button') |
| | | var len = buttons.length |
| | | // å¤çdurationåä½é®é¢ |
| | | const duration = getDuration(state.duration) |
| | | instance.requestAnimationFrame(function() { |
| | | // 设置èå主ä½å
容 |
| | | instance.setStyle({ |
| | | 'transition': 'transform ' + duration, |
| | | 'transform': 'translateX(0px)', |
| | | '-webkit-transform': 'translateX(0px)' |
| | | }) |
| | | // 设置å个éèçæé®ä¸ºæ¶èµ·çç¶æ |
| | | for (var i = len - 1; i >= 0; i--) { |
| | | buttons[i].setStyle({ |
| | | 'transition': 'transform ' + duration, |
| | | 'transform': 'translateX(0px)', |
| | | '-webkit-transform': 'translateX(0px)' |
| | | }) |
| | | } |
| | | }) |
| | | setStatus('close', instance) |
| | | } |
| | | |
| | | // showçç¶æåçåå |
| | | function showChange(newValue, oldValue, ownerInstance, instance) { |
| | | var state = instance.getState() |
| | | if (state.disabled) return |
| | | // æå¼æå
³éåå
æ ¼ |
| | | if (newValue) { |
| | | openSwipeAction(instance, ownerInstance) |
| | | } else { |
| | | closeSwipeAction(instance, ownerInstance) |
| | | } |
| | | } |
| | | |
| | | // èå尺寸åçåå |
| | | function sizeChange(newValue, oldValue, ownerInstance, instance) { |
| | | // wxså
çå±é¨åéå¿«ç
§ |
| | | var state = instance.getState() |
| | | state.disabled = newValue.disabled |
| | | state.duration = newValue.duration |
| | | state.show = newValue.show |
| | | state.threshold = newValue.threshold |
| | | state.buttons = newValue.buttons |
| | | |
| | | var len = state.buttons.length |
| | | if (len) { |
| | | var buttonsWidth = 0 |
| | | var buttons = newValue.buttons |
| | | for (var i = 0; i < len; i++) { |
| | | buttonsWidth += buttons[i].width |
| | | } |
| | | } |
| | | state.buttonsWidth = buttonsWidth |
| | | } |
| | | |
| | | module.exports = { |
| | | touchstart: touchstart, |
| | | touchmove: touchmove, |
| | | touchend: touchend, |
| | | sizeChange: sizeChange |
| | | } |