原生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 为可视区域的宽度。

posted @ 2019-09-02 08:05  Glu__TtoNy  阅读(358)  评论(0编辑  收藏  举报