123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /**
- * 拖拽移动
- * @param {elementObjct} bar 鼠标点击控制拖拽的元素
- * @param {elementObjct} target 移动的元素
- * @param {function} callback 移动后的回调
- */
- export function startDrag(bar, target, callback) {
- var params = {
- top: 0,
- left: 0,
- currentX: 0,
- currentY: 0,
- flag: false,
- cWidth: 0,
- cHeight: 0,
- tWidth: 0,
- tHeight: 0
- };
-
- // 给拖动块添加样式
- bar.style.cursor = 'move';
-
- // 获取相关CSS属性
- // o是移动对象
- // var getCss = function (o, key) {
- // return o.currentStyle ? o.currentStyle[key] : document.defaultView.getComputedStyle(o, false)[key];
- // };
-
- bar.onmousedown = function (event) {
- // 按下时初始化params
- var e = event ? event : window.event;
- params = {
- top: target.offsetTop,
- left: target.offsetLeft,
- currentX: e.clientX,
- currentY: e.clientY,
- flag: true,
- cWidth: document.body.clientWidth,
- cHeight: document.body.clientHeight,
- tWidth: target.offsetWidth,
- tHeight: target.offsetHeight
- };
-
- // 给被拖动块初始化样式
- target.style.margin = 0;
- target.style.top = params.top + 'px';
- target.style.left = params.left + 'px';
-
- if (!event) {
- // 防止IE文字选中
- bar.onselectstart = function () {
- return false;
- }
- }
-
- document.onmousemove = function (event) {
- // 防止文字选中
- window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
-
- var e = event ? event : window.event;
- if (params.flag) {
- var nowX = e.clientX;
- var nowY = e.clientY;
- // 差异距离
- var disX = nowX - params.currentX;
- var disY = nowY - params.currentY;
- // 最终移动位置
- var zLeft = 0;
- var zTop = 0;
-
- zLeft = parseInt(params.left) + disX;
- // 限制X轴范围
- if (zLeft <= -parseInt(params.tWidth / 2)) {
- zLeft = -parseInt(params.tWidth / 2);
- }
- if (zLeft >= params.cWidth - parseInt(params.tWidth * 0.5)) {
- zLeft = params.cWidth - parseInt(params.tWidth * 0.5);
- }
-
- zTop = parseInt(params.top) + disY;
- // 限制Y轴范围
- if (zTop <= 0) {
- zTop = 0;
- }
- if (zTop >= params.cHeight - parseInt(params.tHeight * 0.5)) {
- zTop = params.cHeight - parseInt(params.tHeight * 0.5);
- }
-
- // 执行移动
- target.style.left = zLeft + 'px';
- target.style.top = zTop + 'px';
- }
-
- if (typeof callback == "function") {
- callback(zLeft, zTop);
- }
- }
-
- document.onmouseup = function () {
- params.flag = false;
- document.onmousemove = null;
- document.onmouseup = null;
- };
- };
- }
|