拖拽 梦里梦外; 2022-06-16 12:47 355阅读 0赞 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> body { margin: 0; padding: 0; position: relative; } .box { width: 100px; height: 100px; background: deeppink; position: absolute; left: 25px; top: 25px; cursor: move; } </style> <script type="text/javascript"> /* * 利用JS面向对象OOP思想实现拖拽封装 */ ; (function() { //事件处理程序 //elem DOM对象 eventName 事件名称 eventType 事件类型 function eventHandler(elem, eventName, eventType) { // elem.attachEvent 兼容IE9以下事件 elem.addEventListener ? elem.addEventListener(eventType, eventName, false) : elem.attachEvent('on' + eventType, eventName); }; //移除事件兼容处理 function removeEventHandler(elem, eventName, eventType) { elem.removeEventListener ? elem.removeEventListener(eventType, eventName) : elem.detachEvent(eventType, eventName); } //获取style属性值 function getStyleValue(elem, property) { //getComputedStyle、currentStyle 返回CSS样式声明对象([object CSSStyleDeclaration]) 只读 //getComputedStyle 支持IE9+以上及正常浏览器 //currentStyle 兼容IE8及IE8以下获取目标元素style样式 return window.getComputedStyle(elem, null) ? window.getComputedStyle(elem, null)[property] : elem.currentStyle[property]; } //被拖拽构造函数 function Drag(selector) { //elem DOM对象 this.elem = typeof selector === 'object' ? selector : document.getElementById(selector); //元素初始化位置 this.initObjX = 0; this.initObjY = 0; //鼠标初始化位置 this.initMouseX = 0; this.initMouseY = 0; this.isDraging = false; //初始化--鼠标事件操作 this._init(); } //Drag对象原型 Drag.prototype = { constructor: Drag, //初始化 //构造原型指回Drag 等价于==>>Drag.prototype._init = function(){} //初始化鼠标事件及鼠标操作流程 _init: function() { this.setDrag(); }, //获取目标元素pos位置 getObjPos: function(elem) { var pos = { x: 0, y: 0 }; if(getStyleValue(elem, 'position') == 'static') { this.elem.style.position = 'relative'; return pos; } else { var x = parseInt(getStyleValue(elem, 'left') ? getStyleValue(elem, 'left') : 0); var y = parseInt(getStyleValue(elem, 'top') ? getStyleValue(elem, 'top') : 0); return pos = { x: x, y: y } } }, //设置被拖动元素的位置 setObjPos: function(elem, pos) { elem.style.position = 'absolute'; elem.style.left = pos.x + 'px'; elem.style.top = pos.y + 'px'; }, //设置目标元素事件及操作流程 setDrag: function() { //目标元素对象 var self = this; var time = null; //定时器 function mousedown(event) { event = window.event || event; //鼠标按下时位置 this.initMouseX = event.clientX; this.initMouseY = event.clientY; //获取元素初始化位置pos var pos = self.getObjPos(self.elem); this.initObjX = pos.x; this.initObjY = pos.y; //mousemove time = setTimeout(function() { //缓解移动卡顿 eventHandler(self.elem, mousemove, "mousemove"); }, 25); //mouseup eventHandler(self.elem, mouseup, "mouseup"); //按下标识 self.isDraging = true; } function mousemove(event) { event = window.event || event; if(self.isDraging) { //元素移动位置 == 当前鼠标移动位置 - 鼠标按下位置 + 目标元素初始化位置 var moveX = event.clientX - this.initMouseX + this.initObjX; var moveY = event.clientY - this.initMouseY + this.initObjY; //设置拖拽元素位置 self.setObjPos(self.elem, { x: moveX, y: moveY, }); } } function mouseup(event) { event = window.event || event; self.isDraging = false; clearTimeout(time); //移除事件 removeEventHandler(document, mousemove, 'mousemove'); removeEventHandler(document, mouseup, 'mouseup'); } //mousedown eventHandler(this.elem, mousedown, "mousedown"); } } //将Drag挂到全局对象window上 window.Drag = Drag; })(); </script> </head> <body> <div class="box" id="box" style="position: absolute;left: 25px;top: 25px;"></div> <script type="text/javascript"> window.onload = function() { new Drag(document.getElementById("box")); } </script> </body> </html>
相关 拖拽div 被拖拽元素需要绝对定位。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < 怼烎@/ 2023年10月06日 15:32/ 0 赞/ 82 阅读
相关 js拖拽 拖拽使用的三个事件 onmousedown //鼠标按下 onmousemove //鼠标移动 onmouseup //鼠标抬起 怼烎@/ 2023年06月09日 04:59/ 0 赞/ 48 阅读
相关 element 弹窗位置拖拽;拖拽宽高 vue <template> <el-dialog v-dialogDrag ref="dialog_ 逃离我推掉我的手/ 2023年02月21日 04:52/ 0 赞/ 45 阅读
相关 HTML 拖拽效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> 曾经终败给现在/ 2022年07月19日 06:27/ 0 赞/ 294 阅读
相关 JS 拖拽 实现后效果 ![70][] 实现原理: 1. 在允许拖拽的节点元素上,监听mousedown(按下鼠标按钮)事件,鼠标按下后,事件触发 2. 监听mousemov ╰半夏微凉°/ 2022年05月22日 08:50/ 0 赞/ 358 阅读
相关 jQuery 拖拽 <!DOCTYPE html> <html><head> <meta charset="utf-8" /> <title>jQu 心已赠人/ 2022年04月14日 20:12/ 0 赞/ 356 阅读
相关 JS代码实现拖拽(拖拽三剑客) 我们要实现对一个元素的拖拽,先假设在页面中有一个div,我们对div有一个简单的css样式,并且将div绝对定位。 在标题中提到了实现拖拽的“三剑客”,也就是实现拖拽的三个 客官°小女子只卖身不卖艺/ 2022年03月20日 05:12/ 0 赞/ 513 阅读
相关 ExtJS拖拽效果 ExtJS拖拽效果 <html> <head> <title>hello</title> <meta htt 分手后的思念是犯贱/ 2021年11月19日 16:28/ 0 赞/ 484 阅读
相关 javascript拖拽之从浏览器外拖拽(drag) ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ub 今天药忘吃喽~/ 2021年11月01日 05:40/ 0 赞/ 604 阅读
还没有评论,来说两句吧...