一. mousemove并非逐帧监听,而是大概10-20毫秒触发一次。
这个问题会导致:
1.如果我们将鼠标移动事件绑在被拖动的滑块上,用户快速拖动会导致鼠标脱离滑块。所以将移动事件绑在body之类上会更友好。
2.如果我们做了一些边缘限制,例如拖拽至边缘50px处便不可继续拖动。由于10-20毫秒鼠标可能移动1到30+ px的样子,所以只是普通做了个判断会导致我们超出一些这个限制,或者达不到这个限制就停止。
二. 鼠标脱离滑块后的操作
如果做了一些边缘限制,那么需要对鼠标脱离滑块后的一些操作进行处理。也就是说当达到限制时,滑块不再跟随鼠标,但鼠标划回脱离处,滑块要继续跟随。所以需要记录鼠标脱离滑块时的坐标。
附上实现效果图:
项目地址:https://github.com/Emiya-wkq/vue-drag-flex。 基于vue的拖拽布局插件,欢迎star