UNPKG

react-zeanium-ui-ui

Version:

Zeanium UI Framework for React.js

137 lines (109 loc) 3.63 kB
var Dragger = function (target, argv){ var _argv = argv || {}, _default = { source: target, vector: ['left', 'top'], //tl: top-left, br: bottom-right start: ['30', '30'], minX: 0, maxX: null, minY: 0, maxY: null, xHandler: null, yHandler: null, onDragStrat: function () { }, onDrag: function () { }, onDragEnd: function () { } }; for(var key in _default){ if(!_argv.hasOwnProperty(key)){ _argv[key] = _default[key]; } } var _source = _argv.source, _start = _argv.start, _vector = _argv.vector; _argv.DX = _vector[0]; _argv.DY = _vector[1]; _source.style.position = 'absolute'; target.style.cursor = 'move'; if(_start){ _source.style[_argv.DX] = (_start[0] || 0) + 'px'; _source.style[_argv.DY] = (_start[1] || 0) + 'px'; } this._argv = _argv; if(_argv.event){ this.__mousedown(_argv.event); } target.onmousedown = this.__mousedown.bind(this); } Dragger.prototype.__mousedown = function (event){ var _event = event || window.event, _argv = this._argv, _source = _argv.source; //event.stopPropagation(); //event.preventDefault(); var _x = parseFloat(_source.style[_argv.DX]) || 0, _y = parseFloat(_source.style[_argv.DY]) || 0, _px = _event.clientX || _event.x, _py = _event.clientY || _event.y; var _limit = _argv.onDragStrat && _argv.onDragStrat(_x, _y, _px, _py, _event); if(_limit){ for(var _key in _limit){ if(_limit[_key] !== undefined && _limit[_key] !== null){ _argv[_key] = _limit[_key]; } } } _argv.currX = _x; _argv.currY = _y; _argv.mouseX = _px; _argv.mouseY = _py; var _return = !!_argv.onDragStart && _argv.onDragStart(event, _argv); if(_return!==false){ document.onmousemove = this.__mousemove.bind(this); document.onmouseup = this.__mouseup.bind(this); } return false; } Dragger.prototype.__mousemove = function (event){ var _event = event || window.event, _px = _event.clientX || _event.x, _py = _event.clientY || _event.y, _argv = this._argv; //event.stopPropagation(); //event.preventDefault(); var _dx = _px - _argv.mouseX, _dy = _py - _argv.mouseY; _argv.DX.toLowerCase() == 'right' && (_dx *= -1); _argv.DY.toLowerCase() == 'bottom' && (_dy *= -1); var _currX = _argv.currX + _dx, _currY = _argv.currY + _dy; _currX < _argv.minX && (_currX = _argv.minX); _argv.maxX && _currX > _argv.maxX && (_currX = _argv.maxX); _currY < _argv.minY && (_currY = _argv.minY); _argv.maxY && _currY > _argv.maxY && (_currY = _argv.maxY); if(_currX!==_argv.currX){ _argv.mouseX = _px; _argv.currX = _currX; _argv.source.style[_argv.DX] = _currX + 'px'; } if(_currY!==_argv.currY){ _argv.mouseY = _py; _argv.currY = _currY; _argv.source.style[_argv.DY] = _currY + 'px'; } _argv.onDrag && _argv.onDrag(event, _argv); return false; } Dragger.prototype.__mouseup = function (event) { event.stopPropagation(); event.preventDefault(); this._argv.onDragEnd && this._argv.onDragEnd(event, this._argv); document.onmousemove = null; document.onmouseup = null; } module.exports = { init: function (target, argv){ return new Dragger(target, argv); } }