zoukankan      html  css  js  c++  java
  • 纯js 实现 HTML 元素拖拽,

    let Drag = function () {
        function isElement(obj) {
            return (typeof HTMLElement === 'object')
                ? (obj instanceof HTMLElement)
                : !!(obj && typeof obj === 'object' && (obj.nodeType === 1 || obj.nodeType === 9) && typeof obj.nodeName === 'string');
        }
    
    
        let elements = document.getElementsByClassName("drag");
        for (let elementsKey in elements) {
            let element = elements[elementsKey];
            if (!isElement(element)) {
                continue;
            }
            drag(element);
        }
    
        function drag(element) {
            element.setAttribute("ondragstart", "return false");
            element.style.position = "relative";
            element.onmousedown = function (e) {
                this.setAttribute("drag", "true");
                this.setAttribute("x", e.x);
                this.setAttribute("y", e.y);
                this.setAttribute("t", isNaN(Number.parseInt(this.style.top)) ? 0 : Number.parseInt(this.style.top));
                this.setAttribute("l", isNaN(Number.parseInt(this.style.left)) ? 0 : Number.parseInt(this.style.left));
            }
            element.onmousemove = function (e) {
                if (this.getAttribute("drag") === "true") {
                    if (this.offsetLeft >= this.parentElement.offsetLeft ||
                        this.offsetLeft <= this.parentElement.offsetLeft + this.parentElement.offsetWidth ||
                        this.offsetTop >= this.parentElement.offsetTop ||
                        this.offsetTop <= this.parentElement.offsetTop + this.parentElement.offsetHeight
                    ) {
                        this.style.left = e.x - (Number.parseInt(this.getAttribute("x"))) + (Number.parseInt(this.getAttribute("l"))) + "px";
                        this.style.top = e.y - (Number.parseInt(this.getAttribute("y"))) + (Number.parseInt(this.getAttribute("t"))) + "px";
                    }
                }
            }
            element.onmouseup = function (e) {
                this.setAttribute("drag", "false");
                this.setAttribute("x", e.x);
                this.setAttribute("y", e.y);
            }
            element.onmouseout = function (e) {
                this.setAttribute("drag", "false");
            }
        }
    
        window.drag = drag;
    }();
    如何调用:
    
    第一种方式:在元素的class上添加 drag 。例如 <div class="drag"></div>
    第一种方式:drag(元素)。例如 drag($("div"));
  • 相关阅读:
    Python基础:数据类型-列表与元组(6)
    Python基础:数据类型-数字(5)
    Python基础:编码规范(4)
    Python基础:语法基础(3)
    Python基础:第一个Python程序(2)
    Python基础:搭建开发环境(1)
    Vue.js 2.x笔记:服务请求axios(8)
    Vue.js 2.x笔记:状态管理Vuex(7)
    一位资深传统型软件开发者的思考:传统软件企业危机四伏【转】
    基于cesium的GIS洪水淹没三维模拟系统
  • 原文地址:https://www.cnblogs.com/gatico/p/14693620.html
Copyright © 2011-2022 走看看