var vectorUtil = require("../../utils/vector_util");
/* eslint-disable no-unused-vars */
/**
* @abstract
* @class qrenderer.graphic.drag.Draggable
*
*
*
* 提供拖拽功能,所有需要拖拽功能的元素都可以混入此类的实现。此实现依赖事件机制,混入此实现的类需要预先混入 eventful 接口。
* @author 大漠穷秋 <damoqiongqiu@126.com>
* @docauthor 大漠穷秋 <damoqiongqiu@126.com>
*/
var Draggable = function Draggable() {
/**
* @property {Boolean} draggable
* Whether it can be dragged.
*/
this.draggable = false;
/**
* @property {Boolean} dragging
* Whether is it dragging.
*/
this.dragging = false;
};
Draggable.prototype = {
constructor: Draggable,
/**
* @method beforeMove
*
*
*
* 钩子函数,在元素发生移动之前执行。
* 如果 beforeMove 返回 false ,元素不会发生移动,API 调用者可以利用此钩子实现复杂的控制。
*/
beforeMove: function beforeMove(dx, dy, event, el) {
return true;
},
/**
* @method move
*
* Move element
*
* 移动元素
*
* @param {Number} dx dx on the global space.
* @param {Number} dy dy on the global space.
* @param {Event} event event object.
*/
move: function move(dx, dy, event) {
this.trigger("beforeMove", this);
switch (this.draggable) {
case 'horizontal':
dy = 0;
break;
case 'vertical':
dx = 0;
break;
}
this.trigger("moving", this); //TODO:trigger moving event when animating the position property.
vectorUtil.add(this.position, this.position, [dx, dy]);
this.dirty();
this.trigger("afterMove", this);
this.afterMove();
},
/**
* @method afterMove
* 钩子函数,在元素发生移动之后执行。
*/
afterMove: function afterMove(dx, dy, event, el) {}
};
var _default = Draggable;
module.exports = _default;