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-slider/mpwxs.wxs |  121 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 121 insertions(+), 0 deletions(-)

diff --git a/uni_modules/uview-ui/components/u-slider/mpwxs.wxs b/uni_modules/uview-ui/components/u-slider/mpwxs.wxs
new file mode 100644
index 0000000..847df4a
--- /dev/null
+++ b/uni_modules/uview-ui/components/u-slider/mpwxs.wxs
@@ -0,0 +1,121 @@
+/**
+ * 浣跨敤wxs鏂规瀹炵幇slider
+ * 鍏煎寰俊锛孮Q锛孒5锛孷ue鐗堢殑瀹夊崜鍜宨OS
+ */
+/**
+ * 寮�濮嬫粦鍔ㄦ搷浣�
+ * @param {Object} e
+ * @param {Object} ownerInstance
+ */
+function onTouchMove(e, ownerInstance) {
+	// wxs浜嬩欢瀵硅薄涓嬫湁涓�涓猧nstance灞炴�э紝琛ㄧず褰撳墠瑙﹀彂姝や簨浠剁殑缁勪欢鐨勫疄渚嬶紝閫氳繃璇ュ疄渚嬶紝鍙互鑾峰彇鐩稿叧鐨刣ataset锛岃缃牱寮忕瓑淇℃伅
+	// https://developers.weixin.qq.com/miniprogram/dev/framework/view/interactive-animation.html
+	var instance = e.instance;
+	// getState()涓轰竴涓璞★紝鎸傝浇鍦╥nstance涓婏紝绫讳技缁勪欢鐨刣ata涓�鏍凤紝鍙互瀛樻斁涓�浜涘彉閲忥紝渚涗互鍚庣殑瑙﹀彂浜嬩欢涓娇鐢�
+	var state = instance.getState()
+
+	// 婊戝潡缁勪欢鐨勬暣浣撳昂瀵镐俊鎭�
+	var mp = state.mp
+	if(mp.disabled) {
+		return
+	}
+	
+	var distanceX = getTouchX(e) - mp.left
+	// 鑾峰緱绉诲姩璺濈瀵规暣涓粦鍧楃殑鐧惧垎姣斿�硷紝姝や负甯︽湁澶氫綅灏忔暟鐨勫�硷紝step澶т簬1鏃讹紝涓嶈兘鐢ㄦ鏇存柊瑙嗗浘
+	var percent = (distanceX / mp.width) * 100
+
+	updateSliderPlacement(instance, ownerInstance, percent, 'moving')
+	
+	// 闃绘椤甸潰婊氬姩锛屽彲浠ヤ繚璇佸湪婊戝姩杩囩▼涓紝涓嶈椤甸潰鍙互涓婁笅婊氬姩锛岄�犳垚涓嶅ソ鐨勪綋楠�
+	e.stopPropagation && e.stopPropagation() 
+	e.preventDefault && e.preventDefault()
+}
+
+function onClick(e, ownerInstance) {
+	var instance = e.instance
+	var state = instance.getState()
+	var mp = state.mp
+	if(mp.disabled) {
+		return
+	}
+	
+	// 鐩存帴鐐瑰嚮婊戝潡鐨勬儏鍐碉紝璁$畻鏂瑰紡涓巓nTouchMove鏂规硶鐩稿悓
+	var value = ((e.detail.x - mp.left) / mp.width) * 100
+	updateSliderPlacement(instance, ownerInstance, value, 'click')
+}
+
+function sizeReady(newValue, oldValue, ownerInstance, instance) {
+	// 椤甸潰鍒濆鍖栨椂鍊欙紝涔熶細瑙﹀彂姝ゆ柟娉曪紝浼犻�掔殑鍊间负绌猴紝杩欓噷涓嶆墽琛屽線鍚庣殑閫昏緫
+	if(!newValue || newValue.disabled) {
+		return 
+	}
+	var state = instance.getState()
+	state.mp = newValue
+	updateSliderPlacement(instance, ownerInstance, newValue.value)
+}
+
+// 璁剧疆婊戠偣鐨勪綅缃�
+function updateSliderPlacement(instance, ownerInstance, value, event) {
+	var state = instance.getState()
+	var mp = state.mp
+	if(mp.disabled) {
+		return
+	}
+
+	var percent = 0
+	if (mp.step > 1) {
+		// 濡傛灉step姝ヨ繘澶т簬1锛岄渶瑕佽烦姝ワ紝鎵�浠ラ渶瑕佷娇鐢∕ath.round杩涜鍙栨暣
+		percent = Math.round(Math.max(mp.min, Math.min(value, mp.max)) / mp.step) * mp.step
+	} else {
+		// 褰搒tep=1鏃讹紝鏃犻渶璺虫锛屽厖鍒嗗埄鐢╳xs鎬ц兘锛屾粦鍧楀疄鏃惰窡闅忔墜鍔匡紝杈惧埌涓濇粦鐨勬晥鏋�
+		percent = Math.max(mp.min, Math.min(value, mp.max))
+	}
+	// 杩斿洖缁勪欢鐨勫疄渚�
+	var gapInstance = ownerInstance.selectComponent('.u-slider__gap')
+	// 鍦ㄧЩ鍔ㄦ湡闂达紝涓嶅厑璁竧ransition鍔ㄧ敾锛屽惁鍒欎細閫犳垚鍗¢】
+	gapInstance[event === 'click' ? 'addClass' : 'removeClass']('u-slider__gap--ani')
+	// 璋冪敤閫昏緫灞傜殑鏂规硶锛屼慨鏀箆-model缁戝畾鐨勫��
+	ownerInstance.callMethod('updateValue', Math.round(percent))
+	if(event) {
+		ownerInstance.callMethod('emitEvent', {
+			event: event,
+			value: Math.round(percent)
+		})
+	}
+	
+	// 璁剧疆绉诲姩鐨勫��
+	gapInstance.requestAnimationFrame(function() {
+		gapInstance.setStyle({
+			width: percent / 100 * mp.width + 'px',
+		})
+	})
+}
+
+// 寮�濮嬫粦鍔�
+function onTouchStart(e, ownerInstance) {
+	ownerInstance.callMethod('emitEvent', {
+		event: 'start', 
+		value: null
+	})
+}
+
+// 鍋滄婊戝姩
+function onTouchEnd(e, ownerInstance) {
+	ownerInstance.callMethod('emitEvent', {
+		event: 'end', 
+		value: null
+	})
+}
+
+// 鑾峰彇褰撳墠鎵嬪娍鐐圭殑X杞翠綅绉诲��
+function getTouchX(e) {
+	return e.touches[0].clientX
+}
+
+module.exports = {
+	onTouchStart: onTouchStart,
+	onTouchMove: onTouchMove,
+	onTouchEnd: onTouchEnd,
+	sizeReady: sizeReady,
+	onClick: onClick
+}

--
Gitblit v1.9.3