| export default { | 
|     data() { | 
|         return { | 
|             x: 0, | 
|             transition: false, | 
|             width: 0, | 
|             viewWidth: 0, | 
|             swipeShow: 0 | 
|         } | 
|     }, | 
|     watch: { | 
|         show(newVal) { | 
|             if (this.autoClose) return | 
|             if (newVal && newVal !== 'none') { | 
|                 this.transition = true | 
|                 this.open(newVal) | 
|             } else { | 
|                 this.close() | 
|             } | 
|         } | 
|     }, | 
|     created() { | 
|         this.swipeaction = this.getSwipeAction() | 
|         if (this.swipeaction && Array.isArray(this.swipeaction.children)) { | 
|             this.swipeaction.children.push(this) | 
|         } | 
|     }, | 
|     mounted() { | 
|         this.isopen = false | 
|         setTimeout(() => { | 
|             this.getQuerySelect() | 
|         }, 50) | 
|     }, | 
|     methods: { | 
|         appTouchStart(e) { | 
|             const { | 
|                 clientX | 
|             } = e.changedTouches[0] | 
|             this.clientX = clientX | 
|             this.timestamp = new Date().getTime() | 
|         }, | 
|         appTouchEnd(e, index, item, position) { | 
|             const { | 
|                 clientX | 
|             } = e.changedTouches[0] | 
|             // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 | 
|             let diff = Math.abs(this.clientX - clientX) | 
|             let time = (new Date().getTime()) - this.timestamp | 
|             if (diff < 40 && time < 300) { | 
|                 this.$emit('click', { | 
|                     content: item, | 
|                     index, | 
|                     position | 
|                 }) | 
|             } | 
|         }, | 
|         /** | 
|          * 移动触发 | 
|          * @param {Object} e | 
|          */ | 
|         onChange(e) { | 
|             this.moveX = e.detail.x | 
|             this.isclose = false | 
|         }, | 
|         touchstart(e) { | 
|             this.transition = false | 
|             this.isclose = true | 
|             if (this.autoClose && this.swipeaction) { | 
|                 this.swipeaction.closeOther(this) | 
|             } | 
|         }, | 
|         touchmove(e) {}, | 
|         touchend(e) { | 
|             // 0的位置什么都不执行 | 
|             if (this.isclose && this.isopen === 'none') return | 
|             if (this.isclose && this.isopen !== 'none') { | 
|                 this.transition = true | 
|                 this.close() | 
|             } else { | 
|                 this.move(this.moveX + this.leftWidth) | 
|             } | 
|         }, | 
|   | 
|         /** | 
|          * 移动 | 
|          * @param {Object} moveX | 
|          */ | 
|         move(moveX) { | 
|             // 打开关闭的处理逻辑不太一样 | 
|             this.transition = true | 
|             // 未打开状态 | 
|             if (!this.isopen || this.isopen === 'none') { | 
|                 if (moveX > this.threshold) { | 
|                     this.open('left') | 
|                 } else if (moveX < -this.threshold) { | 
|                     this.open('right') | 
|                 } else { | 
|                     this.close() | 
|                 } | 
|             } else { | 
|                 if (moveX < 0 && moveX < this.rightWidth) { | 
|                     const rightX = this.rightWidth + moveX | 
|                     if (rightX < this.threshold) { | 
|                         this.open('right') | 
|                     } else { | 
|                         this.close() | 
|                     } | 
|                 } else if (moveX > 0 && moveX < this.leftWidth) { | 
|                     const leftX = this.leftWidth - moveX | 
|                     if (leftX < this.threshold) { | 
|                         this.open('left') | 
|                     } else { | 
|                         this.close() | 
|                     } | 
|                 } | 
|   | 
|             } | 
|   | 
|         }, | 
|   | 
|         /** | 
|          * 打开 | 
|          */ | 
|         open(type) { | 
|             this.x = this.moveX | 
|             this.animation(type) | 
|         }, | 
|   | 
|         /** | 
|          * 关闭 | 
|          */ | 
|         close() { | 
|             this.x = this.moveX | 
|             // TODO 解决 x 值不更新的问题,所以会多触发一次 nextTick ,待优化 | 
|             this.$nextTick(() => { | 
|                 this.x = -this.leftWidth | 
|                 if (this.isopen !== 'none') { | 
|                     this.$emit('change', 'none') | 
|                 } | 
|                 this.isopen = 'none' | 
|             }) | 
|         }, | 
|   | 
|         /** | 
|          * 执行结束动画 | 
|          * @param {Object} type | 
|          */ | 
|         animation(type) { | 
|             this.$nextTick(() => { | 
|                 if (type === 'left') { | 
|                     this.x = 0 | 
|                 } else { | 
|                     this.x = -this.rightWidth - this.leftWidth | 
|                 } | 
|   | 
|                 if (this.isopen !== type) { | 
|                     this.$emit('change', type) | 
|                 } | 
|                 this.isopen = type | 
|             }) | 
|   | 
|         }, | 
|         getSlide(x) {}, | 
|         getQuerySelect() { | 
|             const query = uni.createSelectorQuery().in(this); | 
|             query.selectAll('.movable-view--hock').boundingClientRect(data => { | 
|                 this.leftWidth = data[1].width | 
|                 this.rightWidth = data[2].width | 
|                 this.width = data[0].width | 
|                 this.viewWidth = this.width + this.rightWidth + this.leftWidth | 
|                 if (this.leftWidth === 0) { | 
|                     // TODO 疑似bug ,初始化的时候如果x 是0,会导致移动位置错误,所以让元素超出一点 | 
|                     this.x = -0.1 | 
|                 } else { | 
|                     this.x = -this.leftWidth | 
|                 } | 
|                 this.moveX = this.x | 
|                 this.$nextTick(() => { | 
|                     this.swipeShow = 1 | 
|                 }) | 
|   | 
|                 if (!this.buttonWidth) { | 
|                     this.disabledView = true | 
|                 } | 
|   | 
|                 if (this.autoClose) return | 
|                 if (this.show !== 'none') { | 
|                     this.transition = true | 
|                     this.open(this.shows) | 
|                 } | 
|             }).exec(); | 
|   | 
|         } | 
|     } | 
| } |