这page描述了拖放算法。
只看第一段代码(本文不断改进),它说我们在 document.addEventListener('mousemove', onMouseMove);
.document
中使用很重要
这是因为如果我们要使用 ball
,我们有可能将光标移动得如此之快,以至于光标可能会在 mousemove
之前离开球的盒模型有机会再次执行吗?我们不会将鼠标移到 ball
上,所以 mousemove
不会重新触发。
最佳答案
Is this because if we were to use ball, there's a chance we might move the cursor so fast the cursor might leave the box-model of the ball before mousemove would have a chance to execute again?
是的。
如果您向上拖动一个对象,而您的拖动点也是该对象的顶行像素,则会发生这种情况。
如果您从其中心拖动一个较大的对象并且您的计算机具有高轮询率和显示刷新率的鼠标,则不太可能发生这种情况并且浏览器能够快速处理操作系统提供的输入事件 - 因此如果您是使用高端游戏机(配备 1000Hz USB 鼠标和 120Hz+ 显示器)的前端开发人员,可能与在 30Hz 显示器上使用 100Hz 鼠标的人相比,没有注意到这个问题(这是一回事:许多人通过 HDMI 1.x 运行 4K 显示器,而 HDMI 1.x 只能在 30Hz 下运行 4K)。
另一种情况是当用户使用绝对模式(也称为 Wacom 的“笔模式”)而不是相对模式的绝对指点设备时,例如触摸屏或绘图板(也称为 Wacom 的“鼠标模式”)- 如果用户仅通过用手指点击目标位置(或通过将手写笔垂直移动到检测区域之外)将对象“拖动”到屏幕上的其他位置,则只会出现1 个 mousemove
事件,它根本不会被 ball
捕获。
关于javascript - 拖放算法 'n',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64018823/