drag_start(e) { const move = this.getEl(this.$refs.move); let oBindingX = BindingX.bind({ anchor: move, eventType: 'pan', props: [{ element: move, property: 'transform.translateX', expression: `x+${this.position.x}`, }, { element: move, property: 'transform.translateY', expression: `y+${this.position.y}`, } ] }, (e) => { if (e.state === 'end') { if (this.timer) { //移动时间特别短暂 视为点击事件 clearTimeout(this.timer); // 点击事件处理 } BindingX.unbind({ token: oBindingX.token, eventType: 'pan' }) //记录位置 this.position.x += e.deltaX; this.position.y += e.deltaY; // x轴边界 if (-this.position.x >= (this.windowWidth - 193)) { this.position.x = 193 - this.windowWidth; } if (this.position.x > 0) { this.position.x = 0; } // y 轴边界 if (this.position.y < 0) { this.position.y = 0; } if (this.position.y >= (this.windowHeight - 244)) { this.position.y = this.windowHeight - 244; } // 结束拖动 this.endAmaier(); } else { // 判断点击事件还是拖动事件 this.timer = setTimeout(() => { this.timer = null; }, 50) } }); } // 结束拖动 endAmaier(e) { const my = this.getEl(this.$refs.move); let result = BindingX.bind({ eventType: 'timing', exitExpression: 't>200', props: [{ element: my, property: 'transform.translateX', expression: "easeOutElastic(t," + this.position.x + "," + 0 + ",200)", }, { element: my, property: 'transform.translateY', expression: "easeOutElastic(t," + this.position.y + "," + 0 + ",200)", } ] }, (e) => { if (e.state === 'end' || e.state === 'exit') { BindingX.unbind({ token: result.token, eventType: 'timing' }) } }); }
评论