| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | // #ifdef APP-NVUEconst dom = weex.requireModule('dom');// #endifexport default {	data() {		return {			uniShow: false,			left: 0		}	},	computed: {		moveLeft() {			return `translateX(${this.left}px)`		}	},	watch: {		show(newVal) {			if (!this.position || JSON.stringify(this.position) === '{}') return;			if (this.autoClose) return			if (newVal) {				this.$emit('change', true)				this.open()			} else {				this.$emit('change', false)				this.close()			}		}	},	mounted() {		this.position = {}		if (this.swipeaction.children !== undefined) {			this.swipeaction.children.push(this)		}		setTimeout(() => {			this.getSelectorQuery()		}, 100)	},	beforeDestoy() {		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			})			this.close()		},		touchstart(e) {			const {				pageX			} = e.touches[0]			if (this.disabled) return			const left = this.position.content.left			if (this.autoClose) {				this.swipeaction.closeOther(this)			}			this.width = pageX - left			if (this.isopen) return			if (this.uniShow) {				this.uniShow = false				this.isopen = true				this.openleft = this.left + this.position.button.width			}		},		touchmove(e, index) {			if (this.disabled) return			const {				pageX			} = e.touches[0]			this.setPosition(pageX)		},		touchend() {			if (this.disabled) return			if (this.isopen) {				this.move(this.openleft, 0)				return			}			this.move(this.left, -40)		},		setPosition(x, y) {			if (!this.position.button.width) {				return			}			// this.left = x - this.width			this.setValue(x - this.width)		},		setValue(value) {			// 设置最大最小值			this.left = Math.max(-this.position.button.width, Math.min(parseInt(value), 0))			this.position.content.left = this.left			if (this.isopen) {				this.openleft = this.left + this.position.button.width			}		},		move(left, value) {			if (left >= value) {				this.$emit('change', false)				this.close()			} else {				this.$emit('change', true)				this.open()			}		},		open() {			this.uniShow = true			this.left = -this.position.button.width			this.setValue(-this.position.button.width)		},		close() {			this.uniShow = true			this.setValue(0)			setTimeout(() => {				this.uniShow = false				this.isopen = false			}, 300)		},		getSelectorQuery() {			// #ifndef APP-NVUE			const views = uni.createSelectorQuery()				.in(this)			views				.selectAll('.selector-query-hock')				.boundingClientRect(data => {					this.position.content = data[1]					this.position.button = data[0]					if (this.autoClose) return					if (this.show) {						this.open()					} else {						this.close()					}				})				.exec()			// #endif			// #ifdef APP-NVUE			dom.getComponentRect(this.$refs['selector-content-hock'], (data) => {				if (this.position.content) return				this.position.content = data.size			})			dom.getComponentRect(this.$refs['selector-button-hock'], (data) => {				if (this.position.button) return				this.position.button = data.size				if (this.autoClose) return				if (this.show) {					this.open()				} else {					this.close()				}			})			// #endif		}	}}
 |