原生js实现拖拽效果

css样式布局:

html部分:

js主体部分:

接下来用混合继承实现box2移动时有边界的效果:

思路:1.实现拖拽效果主要有三个事件,当鼠标按下的时候,获取鼠标相对于事件发生元素的位置(offsetX/offsetY);当鼠标移动的时候,利用鼠标指针相对于浏览器页面(或客户区)的坐标(clientX/clientY),得到元素的left和top值(clientX/clientY-offsetX/offsetY);当鼠标抬起的时候清除移动效果。

2.事件处理函数会使this指向触发事件的元素,使用bind改变this的指向(指向实例),会返回一个新函数,提前将移动和抬起事件的this改变保存在一个变量中,让移除的和调用的是同一个函数。

3.一个box有边界,一个box没有边界,就需要子元素继承父元素,然后修改子元素的move事件,这里用的是混合继承的方法,使用改变this指向的方法继承构造函数中的内容,使用原型继承来继承原型对象的内容。

4.边界值设定:不小于0;不大于可视宽度与元素本身宽度的差值。document.documentElement.clientWidth 为可视区域的宽度。

原文地址:https://www.cnblogs.com/wshj120828/p/11444551.html

时间: 2024-12-28 12:14:56

原生js实现拖拽效果的相关文章

js之拖拽效果

主要原理: 1.当鼠标按下时,记录鼠标坐标,用到的是 onmousedown: 2.当鼠标移动时,计算鼠标移动的坐标之差,用到的是 onmousemove: 3.当鼠标松开时,清除事件,用到的是 onmouseup: 了解的知识: 1.div 的 offsetLeft 与 style.left 的区别: http://longxu1314.blog.163.com/blog/static/2112990412013101814844444/ 效果图如下: 突然发现有没有效果图都一样哈哈,不说废话

js 鼠标拖拽效果实现

效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>速表拖拽效果实现</title> <style> *{ margin: 0; padding: 0; } .toolbar{ height: 30px; text-align: left; padding-left: 20px;

原生js实现拖拽弹框的效果

研究了一上午,模仿了拖拽弹框的效果,小有成就 <script type="text/javascript"> function getByClass(classname,parent){ var par=parent||document, eles=par.getElementsByTagName("*"), needArr=[]; for(var i=0;i<eles.length;i++){ if(eles[i].className==clas

JS简易拖拽效果

原理:注册mousemove事件,使元素跟随鼠标挪动:注册mouseup事件,移除mousemove事件,使得松开鼠标时元素不再跟随移动,能够固定在指定位置.在mousedown事件中注册mousemove事件和mouseup事件,这样便可完成一次完整的拖拽. 重点:IE中setCapture()的应用.它的作用是捕捉所有的MouseEvent,设置完成后,即使鼠标移出窗口注册的鼠标事件仍然能够被触发.它在此处的作用是当鼠标移动过快越出元素的边界使得原本将要失效的mousemove事件依然能够发

JS简单拖拽效果

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>拖拽</title> <style> *{margin:0;padding:0;} #box{width:100px;height:100px;background-color: #f00;position:absolute;left:0;top:0

原生js实现 拖拽事件

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> .box { width: 200px; height: 200px; background-color: #000000; position: absolute; left: 0; top: 0;

原生js实现拖拽功能

如果要设置物体拖拽,必须使用三个事件,分别是: 1.onmousedown:鼠标按下事件 2.onmousemove:鼠标移动事件 3.onmouseup:鼠标抬开事件 拖拽的原理:根据鼠标的移动来移动被拖拽的元素.鼠标的移动就是鼠标x.y坐标的变化,元素的移动就是position的top和left的变化. 当然并不是任何时候移动鼠标都要使元素移动,应该判断鼠标左键是否被按下,以及是否在可拖拽元素上按下的. 基本思路: 拖拽状态 = 0鼠标在元素上按下的时候{ 拖拽状态 = 1 记录下鼠标的x和

原生js 封装 拖拽限制范围

<div id="div1"></div><div id="div2"></div> window.onload = function() { var div1 = document.getElementById('div1'); var div2 = document.getElementById('div2'); drag(div1); drag(div2); } function drag(obj) { obj.

jQuery的DOM操作实例(2)——拖拽效果&amp;&amp;拓展插件

一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件