拖動(dòng)拖拽插件

分享一個(gè)封裝好的拖動(dòng)插件,使用方式很簡(jiǎn)單,入?yún)魅胄枰蟿?dòng)的dom即可(支持pc端,h5端)

例子:Drag(document.getElementsByClassName("test")[0]);

效果:


廢話不多話上代碼:

(function?(window)?{

????????????var?dom?=?{

????????????????//綁定事件

????????????????on:?function?(node,?eventName,?handler)?{

????????????????????if?(node.addEventListener)?{

????????????????????????node.addEventListener(eventName,?handler);

????????????????????}?else?{

????????????????????????node.attachEvent("on"?+?eventName,?handler);

????????????????????}

????????????????},

????????????????//獲取元素的樣式

????????????????getStyle:?function?(node,?styleName)?{

????????????????????var?realStyle?=?null;

????????????????????if?(window.getComputedStyle)?{

????????????????????????realStyle?=?window.getComputedStyle(node,?null)[styleName];

????????????????????}?else?if?(node.currentStyle)?{

????????????????????????realStyle?=?node.currentStyle[styleName];

????????????????????}

????????????????????return?realStyle;

????????????????},

????????????????//獲取設(shè)置元素的樣式

????????????????setCss:?function?(node,?css)?{

????????????????????for?(var?key?in?css)?{

????????????????????????node.style[key]?=?css[key];

????????????????????}

????????????????},

????????????};

????????????//#region?拖拽元素類

????????????function?DragElement(node)?{

????????????????this.node?=?node;

????????????????this.x?=?0;

????????????????this.y?=?0;

????????????}

????????????DragElement.prototype?=?{

????????????????constructor:?DragElement,

????????????????init:?function?()?{

????????????????????this.setEleCss({

????????????????????????left:?dom.getStyle(node,?"left"),

????????????????????????top:?dom.getStyle(node,?"top"),

????????????????????}).setXY(node.style.left,?node.style.top);

????????????????},

????????????????setXY:?function?(x,?y)?{

????????????????????this.x?=?parseInt(x)?||?0;

????????????????????this.y?=?parseInt(y)?||?0;

????????????????????return?this;

????????????????},

????????????????setEleCss:?function?(css)?{

????????????????????dom.setCss(this.node,?css);

????????????????????return?this;

????????????????},

????????????};

????????????//#endregion

????????????//#region?鼠標(biāo)元素

????????????function?Mouse()?{

????????????????this.x?=?0;

????????????????this.y?=?0;

????????????}

????????????Mouse.prototype.setXY?=?function?(x,?y)?{

????????????????this.x?=?parseInt(x);

????????????????this.y?=?parseInt(y);

????????????};

????????????//#endregion

????????????//拖拽配置

????????????var?draggableConfig?=?{

????????????????zIndex:?1,

????????????????draggingObj:?null,

????????????????mouse:?new?Mouse(),

????????????};

????????????function?Drag(ele)?{

????????????????this.ele?=?ele;

????????????????dom.on(ele,?"mousedown",?mouseDown);

????????????????dom.on(ele,?"touchstart",?mouseDown);

????????????????dom.on(ele,?"mousemove",?mousemove);

????????????????dom.on(ele,?"touchmove",?mousemove);

????????????????dom.on(ele,?"mouseup",?mouseup);

????????????????dom.on(ele,?"touchend",?mouseup);

????????????????ele.onselectstart?=?function?()?{

????????????????????//防止拖拽對(duì)象內(nèi)的文字被選中

????????????????????return?false;

????????????????};

????????????}

????????????function?getPositionInfo(event)?{

????????????????var?clientX?=?event.clientX;

????????????????if?(event.clientX)?{

????????????????????return?event;

????????????????}?else?{

????????????????????return?event.targetTouches[0];

????????????????}

????????????}

????????????function?mouseDown(event)?{

????????????????var?ele?=?event.target?||?event.srcElement;

????????????????var?{

????????????????????clientX,

????????????????????clientY

????????????????}?=?getPositionInfo(event);

????????????????draggableConfig.mouse.setXY(clientX,?clientY);

????????????????draggableConfig.draggingObj?=?new?DragElement(ele);

????????????????draggableConfig.draggingObj.setXY(ele.style.left,?ele.style.top)

????????????????????.setEleCss({

????????????????????????zIndex:?draggableConfig.zIndex++,

????????????????????????position:?"relative",

????????????????????});

????????????}

????????????function?mousemove(event)?{

????????????????if?(draggableConfig.draggingObj)?{

????????????????????var?{

????????????????????????clientX,

????????????????????????clientY

????????????????????}?=?getPositionInfo(event);

????????????????????var?mouse?=?draggableConfig.mouse,

????????????????????????draggingObj?=?draggableConfig.draggingObj;

????????????????????draggingObj.setEleCss({

????????????????????????left:?parseInt(clientX?-?mouse.x?+?draggingObj.x)?+?"px",

????????????????????????top:?parseInt(clientY?-?mouse.y?+?draggingObj.y)?+?"px",

????????????????????});

????????????????}

????????????}

????????????function?mouseup(event)?{

????????????????draggableConfig.draggingObj?=?null;

????????????}

????????????window.Drag?=?Drag;

})(window);

感謝,老鐵的閱讀,如果喜歡的,幫忙點(diǎn)個(gè)??,你的支持我是前進(jìn)的動(dòng)力++

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容