1、设置div样式position:absolute。
2、设置div的鼠标按下事件,并且定义一个变量click=false,来判断是否在div内点击过,并且在鼠标按下事件中设置click=true,鼠标松开时设置click=false。
3、鼠标抬起和鼠标移动事件都是window上的事件,如果是属于div的事件的话,鼠标移出div便会失效。
4、鼠标移动事件对象e中e.pageX/pageY分别是鼠标距离文档左边缘/上边缘的长度,设置div的left与top属性为e.pageX和e.pageY。
5、做到上述步骤会发现div左上角一直是鼠标位置(left,top跟鼠标位置一样,即左上角跟鼠标重合),所以鼠标要保持原先在div中点击时的位置,原先鼠标在div的按下位置为left:e.pageX-div.offsetLeft(div距离左边框的距离),top:e.pageY-div.offsetTop(div距离上边框的距离),div的left与top属性值分别减去left与top,即可还原鼠标在div中的位置。
6、鼠标移动事件中 e.preventDefault() 阻止默认行为,防止文字拖拽导致的div移动。
7、防止div拖拽时候切屏失去焦点,回到页面时div位置混乱,设置window.onblur失焦事件中click=false,在切屏时固定住div的位置。
8、防止div拖拽出文档范围,设置div属性left与top的最大值,left:window.innerWidth - div.offsetWidth top:window.innerHeight - div.offsetHeight,设置后便可保证div不会拖拽超出文档范围
9、以上全部完成,拖拽效果功能就基本实现了,具体细节还可以再优化