拖动拖拽插件

作者: lzy_9fff | 来源:发表于2020-07-24 15:10 被阅读0次

分享一个封装好的拖动插件,使用方式很简单,入参传入需要拖动的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;

                },

                //获取设置元素的样式

                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 鼠标元素

            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 () {

                    //防止拖拽对象内的文字被选中

                    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);

感谢,老铁的阅读,如果喜欢的,帮忙点个👍,你的支持我是前进的动力++

相关文章

  • 拖动拖拽插件

    分享一个封装好的拖动插件,使用方式很简单,入参传入需要拖动的dom即可(支持pc端,h5端) 例子:Drag(do...

  • 上网效率不高 请看chrome 终极使用技巧

    常用插件篇 crxmouse: 浏览器手势软件 超级拖拽: 选中链接,按住左键,往前拖动,可以在后台打开链接 in...

  • H5新增API

    拖拽API 属性 draggable 设置为true 可以被拖拽 拖拽事件 ondragstart 开始被拖动...

  • HTML5新增API

    拖拽API 属性 draggable 设置为true 可以被拖拽 拖拽事件 ondragstart 开始被拖动...

  • html5 drag拖拽

    一、概念 1. 被拖拽元素(拖拽目标) 1.1 属性 必须给拖拽目标设置draggable=true,目标才能拖动...

  • jqueryUI-draggable-droppable实现多元

    应用场景 痛点: 基于jqueryUI,默认的拖动只能对当前被点击的元素进行拖拽,不能实现多选拖拽。拖动如果是对目...

  • JS拖拽元素原理及实现代码

    拖拽功能主要是用在让用户做一些自定义的动作,比如拖动排序,弹出框拖动移动等等,效果还是蛮不错的。下面讲解一下拖拽的...

  • js之好玩的拖拽

    拖拽功能主要是用在让用户做一些自定义的动作,比如拖动排序,弹出框拖动移动等等,效果还是蛮不错的。下面讲解一下拖拽如...

  • H5的原生拖拽,拖放事件(drag and drop)

    通过draggable=true设置是否可以被拖动(ie这个老表不支持) dragstart:拖拽开始时在被拖拽元...

  • h5拖拽相关事件

    拖拽 Sortable.js插件拖拽的时候主要由这几个事件完成,

网友评论

    本文标题:拖动拖拽插件

    本文链接:https://www.haomeiwen.com/subject/sybjlktx.html