// #ifdef APP-NVUE const dom = weex.requireModule('dom'); // #endif export 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 } } }