二十三,事件联系——拖拽

 拖拽box1元素
                 * 拖拽流程:
                 * 1.当鼠标在拖拽元素上按下时,开始拖拽onmousedown
                 * 2.当鼠标移动时被拖拽元素跟随 鼠标移动onmousemove
                 * 3.当鼠标松开时,被拖拽元素固定在当前位置onmouseup

二十三,事件联系——拖拽_第1张图片二十三,事件联系——拖拽_第2张图片

看似功能实现了,但是还存在什么问题呢?再添加一个DIV,当将box1拖拽到box2的地方时,由于onmoseup事件绑定给box1了,当移入到box2时,鼠标在Box2上面,在此处松开鼠标,触发的是box2的up事件,Box1和box2是兄弟元素,不存在冒泡,所以onmoseup事件不能给Box1绑定,只能给document绑定。

二十三,事件联系——拖拽_第3张图片二十三,事件联系——拖拽_第4张图片

此时的代码如下:可以很好的实现需求,但是我们依旧会发现问题,当我们点击Box1时,鼠标一直很都是位于左上角,我们希望鼠标点那就在哪。

二十三,事件联系——拖拽_第5张图片二十三,事件联系——拖拽_第6张图片

我们期望的是相对位置保持不变,但实际是蓝色会与左上角重合。我们不能动 鼠标的位置,鼠标的位置是用户控制的,我们就只能调整DIV的位置,将多余的位置减去。

clientX 是鼠标的水平偏移量(绿色),offsetLeft:元素左侧偏移量(红色),黄色代表浏览器窗口。

二十三,事件联系——拖拽_第7张图片二十三,事件联系——拖拽_第8张图片

还有一个细节问题,在浏览器中我们选中一段文字是可以拖动的,并且在联网时浏览器会直接搜索选中文字。

当我们拖拽网页中的内容时,浏览器会默认去搜索引擎哄搜索,此时会导致拖拽异常。这个是浏览器提供的默认行为,我们可以取消这个行为 return false但是对IE8不起作用。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(前端基础)