From d1448cb0ef10f358bb7bddb4e1ec268515e0b787 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期二, 15 七月 2025 11:46:57 +0800 Subject: [PATCH] 项目初始化 --- uni_modules/uview-ui/components/u-swipe-action-item/index.wxs | 225 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 225 insertions(+), 0 deletions(-) diff --git a/uni_modules/uview-ui/components/u-swipe-action-item/index.wxs b/uni_modules/uview-ui/components/u-swipe-action-item/index.wxs new file mode 100644 index 0000000..728275f --- /dev/null +++ b/uni_modules/uview-ui/components/u-swipe-action-item/index.wxs @@ -0,0 +1,225 @@ +/** + * 姝や负wxs妯″潡锛屽彧鏀寔APP-VUE锛屽井淇″拰QQ灏忕▼搴忎互鍙奌5骞冲彴 + * wxs鍐呴儴涓嶆敮鎸乪s6璇硶锛屽彉閲忓彧鑳戒娇鐢╲ar瀹氫箟锛屾棤娉曚娇鐢ㄨВ鏋勶紝绠ご鍑芥暟绛夌壒鎬� + */ + +// 寮�濮嬭Е鎽� +function touchstart(event, ownerInstance) { + // 瑙﹀彂浜嬩欢鐨勭粍浠剁殑ComponentDescriptor瀹炰緥 + var instance = event.instance + // wxs鍐呯殑灞�閮ㄥ彉閲忓揩鐓э紝姝ゅ揩鐓ф槸灞炰簬鏁翠釜缁勪欢鐨勶紝鍦╰ouchstart鍜宼ouchmove浜嬩欢涓兘鑳借幏鍙栧埌鐩稿悓鐨勭粨鏋� + var state = instance.getState() + if (state.disabled) return + var touches = event.touches + // 濡傛灉杩涜鐨勬槸澶氭寚瑙︽帶锛屼笉鍏佽杩涜鎿嶄綔 + if (touches && touches.length > 1) return + // 鏍囪瘑褰撳墠涓烘粦鍔ㄤ腑鐘舵�� + state.moving = true + // 璁板綍瑙︽懜寮�濮嬬偣鐨勫潗鏍囧�� + state.startX = touches[0].pageX + state.startY = touches[0].pageY + + ownerInstance.callMethod('closeOther') +} + +// 瑙︽懜婊戝姩 +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 + + // 绉诲姩鐨刋杞磋窛绂诲ぇ浜嶻杞磋窛绂伙紝涔熷嵆缁堢偣涓庤捣鐐逛綅缃繛绾匡紝涓嶺杞村す瑙掑皬浜�45搴︽椂锛岀姝㈤〉闈㈡粴鍔� + if (Math.abs(moveX) > Math.abs(moveY) || Math.abs(moveX) > state.threshold) { + event.preventDefault && event.preventDefault() + event.stopPropagation && event.stopPropagation() + } + // 濡傛灉绉诲姩鐨刋杞磋窛绂诲皬浜嶻杞磋窛绂伙紝涔熷嵆缁堢偣浣嶇疆涓庤捣鐐逛綅缃繛绾匡紝涓嶻杞村す瑙掑皬浜�45搴︽椂锛岃涓烘槸椤甸潰涓婁笅婊戝姩锛岃�屼笉鏄乏鍙虫粦鍔ㄥ崟鍏冩牸 + if (Math.abs(moveX) < Math.abs(moveY)) return + + // 闄愬埗鍙虫粦鐨勮窛绂伙紝涓嶅厑璁稿唴瀹归儴鍒嗗線鍙冲亸绉伙紝鍙虫粦浼氬鑷碭杞村亸绉诲�煎ぇ浜�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') + + // 璁剧疆鑿滃崟鍐呭閮ㄥ垎鐨勫亸绉� + instance.requestAnimationFrame(function() { + instance.setStyle({ + // 璁剧疆translateX鐨勫�� + 'transition': 'none', + transform: 'translateX(' + moveX + 'px)', + '-webkit-transform': 'translateX(' + moveX + 'px)' + }) + }) +} + +// 涓�娆℃�у睍寮�婊戝姩鑿滃崟 +function openSwipeAction(instance, ownerInstance) { + var state = instance.getState() + // 鑾峰彇鎵�鏈夋寜閽殑瀹炰緥锛岄渶瑕侀�氳繃瀹冨幓璁剧疆鎸夐挳鐨勪綅绉� + var buttons = ownerInstance.selectAllComponents('.u-swipe-action-item__right__button') + // 澶勭悊duration鍗曚綅闂 + var duration = getDuration(state.duration) + // 灞曞紑杩囩▼涓紝鏄悜宸︾Щ鍔紝鎵�浠鐨勫亸绉诲簲璇ヤ负璐熷�� + var buttonsWidth = -state.buttonsWidth + instance.requestAnimationFrame(function() { + // 璁剧疆鑿滃崟涓讳綋鍐呭 + instance.setStyle({ + 'transition': 'transform ' + duration, + 'transform': 'translateX(' + buttonsWidth + 'px)', + '-webkit-transform': 'translateX(' + buttonsWidth + 'px)', + }) + }) + setStatus('open', instance, ownerInstance) +} + +// 鏍囪鑿滃崟鐨勫綋鍓嶇姸鎬侊紝open-宸茬粡鎵撳紑锛宑lose-宸茬粡鍏抽棴 +function setStatus(status, instance, ownerInstance) { + var state = instance.getState() + state.status = status + ownerInstance.callMethod('setState', status) +} + +// 涓�娆℃�ф敹璧锋粦鍔ㄨ彍鍗� +function closeSwipeAction(instance, ownerInstance) { + var state = instance.getState() + // 鑾峰彇鎵�鏈夋寜閽殑瀹炰緥锛岄渶瑕侀�氳繃瀹冨幓璁剧疆鎸夐挳鐨勪綅绉� + var buttons = ownerInstance.selectAllComponents('.u-swipe-action-item__right__button') + var len = buttons.length + // 澶勭悊duration鍗曚綅闂 + var 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, ownerInstance) +} + +// status鐨勭姸鎬佸彂鐢熷彉鍖� +function statusChange(newValue, oldValue, ownerInstance, instance) { + var state = instance.getState() + if (state.disabled) return + // 鎵撳紑鎴栧叧闂崟鍏冩牸 + if (newValue === 'close' && state.status === 'open') { + closeSwipeAction(instance, ownerInstance) + } else if(newValue === 'open' && state.status === 'close') { + openSwipeAction(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 + + if (state.buttons) { + var len = state.buttons.length + 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, + statusChange: statusChange +} -- Gitblit v1.9.3