mpalipay.js 2.81 KB
export default {
	data() {
		return {
			isshow: false,
			viewWidth: 0,
			buttonWidth: 0,
			disabledView: false,
			x: 0,
			transition: false
		}
	},
	watch: {
		show(newVal) {
			if (this.autoClose) return
			if (newVal) {
				this.open()
			} else {
				this.close()
			}
		},
	},
	created() {
		if (this.swipeaction.children !== undefined) {
			this.swipeaction.children.push(this)
		}
	},
	beforeDestroy() {
		this.swipeaction.children.forEach((item, index) => {
			if (item === this) {
				this.swipeaction.children.splice(index, 1)
			}
		})
	},
	mounted() {
		this.isopen = false
		this.transition = true
		setTimeout(() => {
			this.getQuerySelect()
		}, 50)

	},
	methods: {
		onClick(index, item) {
			this.$emit('click', {
				content: item,
				index
			})
		},
		touchstart(e) {
			let {
				pageX,
				pageY
			} = e.changedTouches[0]
			this.transition = false
			this.startX = pageX
			if (this.autoClose) {
				this.swipeaction.closeOther(this)
			}
		},
		touchmove(e) {
			let {
				pageX,
			} = e.changedTouches[0]
			this.slide = this.getSlide(pageX)
			if (this.slide === 0) {
				this.disabledView = false
			}

		},
		touchend(e) {
			this.stop = false
			this.transition = true
			if (this.isopen) {
				if (this.moveX === -this.buttonWidth) {
					this.close()
					return
				}
				this.move()
			} else {
				if (this.moveX === 0) {
					this.close()
					return
				}
				this.move()
			}
		},
		open() {
			this.x = this.moveX
			this.$nextTick(() => {
				this.x = -this.buttonWidth
				this.moveX = this.x
				
				if(!this.isopen){
					this.isopen = true
					this.$emit('change', true)
				}
			})
		},
		close() {
			this.x = this.moveX
			this.$nextTick(() => {
				this.x = 0
				this.moveX = this.x
				if(this.isopen){
					this.isopen = false
					this.$emit('change', false)
				}
			})
		},
		move() {
			if (this.slide === 0) {
				this.open()
			} else {
				this.close()
			}
		},
		onChange(e) {
			let x = e.detail.x
			this.moveX = x
			if (x >= this.buttonWidth) {
				this.disabledView = true
				this.$nextTick(() => {
					this.x = this.buttonWidth
				})
			}
		},
		getSlide(x) {
			if (x >= this.startX) {
				this.startX = x
				return 1
			} else {
				this.startX = x
				return 0
			}

		},
		getQuerySelect() {
			const query = uni.createSelectorQuery().in(this);
			query.selectAll('.viewWidth-hook').boundingClientRect(data => {

				this.viewWidth = data[0].width
				this.buttonWidth = data[1].width
				this.transition = false
				this.$nextTick(() => {
					this.transition = true
				})

				if (!this.buttonWidth) {
					this.disabledView = true
				}

				if (this.autoClose) return
				if (this.show) {
					this.open()
				}
			}).exec();

		}
	}
}