mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	多模块重构 12:修改项目名字,按照新的规则
This commit is contained in:
		
							
								
								
									
										245
									
								
								yudao-ui-app-v1/components/uni-swipe-action-item/bindingx.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										245
									
								
								yudao-ui-app-v1/components/uni-swipe-action-item/bindingx.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,245 @@ | ||||
| const BindingX = uni.requireNativePlugin('bindingx'); | ||||
| const dom = uni.requireNativePlugin('dom'); | ||||
| const animation = uni.requireNativePlugin('animation'); | ||||
|  | ||||
| export default { | ||||
| 	data() { | ||||
| 		return { | ||||
| 			right: 0, | ||||
| 			button: [], | ||||
| 			preventGesture: false | ||||
| 		} | ||||
| 	}, | ||||
|  | ||||
| 	watch: { | ||||
| 		show(newVal) { | ||||
| 			if (!this.position || JSON.stringify(this.position) === '{}') return; | ||||
| 			if (this.autoClose) return | ||||
| 			if (this.isInAnimation) return | ||||
| 			if (newVal) { | ||||
| 				this.open() | ||||
| 			} else { | ||||
| 				this.close() | ||||
| 			} | ||||
| 		}, | ||||
| 	}, | ||||
| 	created() { | ||||
| 		if (this.swipeaction.children !== undefined) { | ||||
| 			this.swipeaction.children.push(this) | ||||
| 		} | ||||
| 	}, | ||||
| 	mounted() { | ||||
| 		this.boxSelector = this.getEl(this.$refs['selector-box-hock']); | ||||
| 		this.selector = this.getEl(this.$refs['selector-content-hock']); | ||||
| 		this.buttonSelector = this.getEl(this.$refs['selector-button-hock']); | ||||
| 		this.position = {} | ||||
| 		this.x = 0 | ||||
| 		setTimeout(() => { | ||||
| 			this.getSelectorQuery() | ||||
| 		}, 200) | ||||
| 	}, | ||||
| 	beforeDestroy() { | ||||
| 		if (this.timing) { | ||||
| 			BindingX.unbind({ | ||||
| 				token: this.timing.token, | ||||
| 				eventType: 'timing' | ||||
| 			}) | ||||
| 		} | ||||
| 		if (this.eventpan) { | ||||
| 			BindingX.unbind({ | ||||
| 				token: this.eventpan.token, | ||||
| 				eventType: 'pan' | ||||
| 			}) | ||||
| 		}  | ||||
| 		this.swipeaction.children.forEach((item, index) => { | ||||
| 			if (item === this) { | ||||
| 				this.swipeaction.children.splice(index, 1) | ||||
| 			} | ||||
| 		}) | ||||
| 	}, | ||||
| 	methods: { | ||||
| 		onClick(index, item) { | ||||
| 			this.$emit('click', { | ||||
| 				content: item, | ||||
| 				index | ||||
| 			}) | ||||
| 		}, | ||||
| 		touchstart(e) { | ||||
| 			if (this.isInAnimation) return | ||||
| 			if (this.stop) return | ||||
| 			this.stop = true | ||||
| 			if (this.autoClose) { | ||||
| 				this.swipeaction.closeOther(this) | ||||
| 			} | ||||
| 			let endWidth = this.right | ||||
| 			let boxStep = `(x+${this.x})` | ||||
| 			let pageX = `${boxStep}> ${-endWidth} && ${boxStep} < 0?${boxStep}:(x+${this.x} < 0? ${-endWidth}:0)` | ||||
|  | ||||
| 			let props = [{ | ||||
| 				element: this.selector, | ||||
| 				property: 'transform.translateX', | ||||
| 				expression: pageX | ||||
| 			}] | ||||
|  | ||||
| 			let left = 0 | ||||
| 			for (let i = 0; i < this.options.length; i++) { | ||||
| 				let buttonSelectors = this.getEl(this.$refs['button-hock'][i]); | ||||
| 				if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return | ||||
| 				let moveMix = endWidth - left | ||||
| 				left += this.button[i].width | ||||
| 				let step = `(${this.x}+x)/${endWidth}` | ||||
| 				let moveX = `(${step}) * ${moveMix}` | ||||
| 				let pageButtonX = `${moveX}&& (x+${this.x} > ${-endWidth})?${moveX}:${-moveMix}` | ||||
| 				props.push({ | ||||
| 					element: buttonSelectors, | ||||
| 					property: 'transform.translateX', | ||||
| 					expression: pageButtonX | ||||
| 				}) | ||||
| 			} | ||||
|  | ||||
| 			this.eventpan = this._bind(this.boxSelector, props, 'pan', (e) => { | ||||
| 				if (e.state === 'end') { | ||||
| 					this.x = e.deltaX + this.x; | ||||
| 					if (this.x < -endWidth) { | ||||
| 						this.x = -endWidth | ||||
| 					} | ||||
| 					if (this.x > 0) { | ||||
| 						this.x = 0 | ||||
| 					} | ||||
| 					this.stop = false | ||||
| 					this.bindTiming(); | ||||
| 				} | ||||
| 			}) | ||||
| 		}, | ||||
| 		touchend(e) { | ||||
| 			this.$nextTick(() => { | ||||
| 				if (this.isopen && !this.isDrag && !this.isInAnimation) { | ||||
| 					this.close() | ||||
| 				} | ||||
| 			}) | ||||
| 		}, | ||||
| 		bindTiming() { | ||||
| 			if (this.isopen) { | ||||
| 				this.move(this.x, -this.right) | ||||
| 			} else { | ||||
| 				this.move(this.x, -40) | ||||
| 			} | ||||
| 		}, | ||||
| 		move(left, value) { | ||||
| 			if (left >= value) { | ||||
| 				this.close() | ||||
| 			} else { | ||||
| 				this.open() | ||||
| 			} | ||||
| 		}, | ||||
| 		/** | ||||
| 		 * 开启swipe | ||||
| 		 */ | ||||
| 		open() { | ||||
| 			this.animation(true) | ||||
| 		}, | ||||
| 		/** | ||||
| 		 * 关闭swipe | ||||
| 		 */ | ||||
| 		close() { | ||||
| 			this.animation(false) | ||||
| 		}, | ||||
| 		/** | ||||
| 		 * 开启关闭动画 | ||||
| 		 * @param {Object} type | ||||
| 		 */ | ||||
| 		animation(type) { | ||||
| 			this.isDrag = true | ||||
| 			let endWidth = this.right | ||||
| 			let time = 200 | ||||
| 			this.isInAnimation = true; | ||||
|  | ||||
| 			let exit = `t>${time}`; | ||||
| 			let translate_x_expression = `easeOutExpo(t,${this.x},${type?(-endWidth-this.x):(-this.x)},${time})` | ||||
| 			let props = [{ | ||||
| 				element: this.selector, | ||||
| 				property: 'transform.translateX', | ||||
| 				expression: translate_x_expression | ||||
| 			}] | ||||
|  | ||||
| 			let left = 0 | ||||
| 			for (let i = 0; i < this.options.length; i++) { | ||||
| 				let buttonSelectors = this.getEl(this.$refs['button-hock'][i]); | ||||
| 				if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return | ||||
| 				let moveMix = endWidth - left | ||||
| 				left += this.button[i].width | ||||
| 				let step = `${this.x}/${endWidth}` | ||||
| 				let moveX = `(${step}) * ${moveMix}` | ||||
| 				let pageButtonX = `easeOutExpo(t,${moveX},${type ? -moveMix + '-' + moveX: 0 + '-' + moveX},${time})` | ||||
| 				props.push({ | ||||
| 					element: buttonSelectors, | ||||
| 					property: 'transform.translateX', | ||||
| 					expression: pageButtonX | ||||
| 				}) | ||||
| 			} | ||||
|  | ||||
| 			this.timing = BindingX.bind({ | ||||
| 				eventType: 'timing', | ||||
| 				exitExpression: exit, | ||||
| 				props: props | ||||
| 			}, (e) => { | ||||
| 				if (e.state === 'end' || e.state === 'exit') { | ||||
| 					this.x = type ? -endWidth : 0 | ||||
| 					this.isInAnimation = false; | ||||
|  | ||||
| 					this.isopen = this.isopen || false | ||||
| 					if (this.isopen !== type) { | ||||
| 						this.$emit('change', type) | ||||
| 					} | ||||
| 					this.isopen = type | ||||
| 					this.isDrag = false | ||||
| 				} | ||||
| 			}); | ||||
| 		}, | ||||
| 		/** | ||||
| 		 * 绑定  BindingX | ||||
| 		 * @param {Object} anchor | ||||
| 		 * @param {Object} props | ||||
| 		 * @param {Object} fn | ||||
| 		 */ | ||||
| 		_bind(anchor, props, eventType, fn) { | ||||
| 			return BindingX.bind({ | ||||
| 				anchor, | ||||
| 				eventType, | ||||
| 				props | ||||
| 			}, (e) => { | ||||
| 				typeof(fn) === 'function' && fn(e) | ||||
| 			}); | ||||
| 		}, | ||||
| 		/** | ||||
| 		 * 获取ref | ||||
| 		 * @param {Object} el | ||||
| 		 */ | ||||
| 		getEl(el) { | ||||
| 			return el.ref | ||||
| 		}, | ||||
| 		/** | ||||
| 		 * 获取节点信息 | ||||
| 		 */ | ||||
| 		getSelectorQuery() { | ||||
| 			dom.getComponentRect(this.$refs['selector-content-hock'], (data) => { | ||||
| 				if (this.position.content) return | ||||
| 				this.position.content = data.size | ||||
| 			}) | ||||
| 			for (let i = 0; i < this.options.length; i++) { | ||||
| 				dom.getComponentRect(this.$refs['button-hock'][i], (data) => { | ||||
| 					if (!this.button) { | ||||
| 						this.button = [] | ||||
| 					} | ||||
| 					if (this.options.length === this.button.length) return | ||||
| 					this.button.push(data.size) | ||||
| 					this.right += data.size.width | ||||
| 					if (this.autoClose) return | ||||
| 					if (this.show) { | ||||
| 						this.open() | ||||
| 					} | ||||
| 				}) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV