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