【发布时间】:2018-12-24 17:37:37
【问题描述】:
情况:我正在使用 HTML5 拖放在我正在编写的游戏中放置图块。我想添加一个效果,其中我将要放置新瓷砖的两个瓷砖稍微分开,以表明这是您要放置的位置(类似于 Mac OS 扩展坞)。
我的方法:我有一个flexbox,我将这些图块放入其中。我写了一个函数,它基本上返回一个正弦波的周期,我用它来根据它们相对于drag期间的鼠标。
// Update occupant style for desired effect
occupants.forEach(function(occupant, index) {
$(occupant).css({'right' : -10 * nudgeSine(occupantsMouseOffset[index] * 10) + 'px',
'top' : -10 * Math.abs(nudgeSine(occupantsMouseOffset[index] * 10)) + 'px',
'opacity' : 1 - Math.abs(nudgeSine(occupantsMouseOffset[index])) });
});
// Function to return 1 period of a sine wave
function nudgeSine(x) {
if (x < -3.14159 || x > 3.14159) {
return 0;
} else {
return Math.sin(x);
}
}
问题:在 Chrome(但不是 Firefox)中,在某些我找不到模式的鼠标位置,磁贴来回跳跃。请参阅下面的 .gif:
在 Chrome(左)和 Firefox(右)中:
我什至console.logged 元素的计算right: 属性,当它显示在屏幕上跳跃时,它输出为一个常数值。
我尝试过/想到的:
- 即使鼠标静止且
console.log(event.clientX)输出恒定值,图块也会跳来跳去。 - 我认为
event.clientX可能会在不知不觉中发生变化,所以我将我的计算基于Math.trunc(event.clientX)无济于事。 - 我在计算中使用了
element.getBoundingClientRect(),对此我不是很熟悉,我认为这可能是我的问题的根本原因。
我创建了this CodePen,但无法完全复制该问题。不过,我认为有人可能能够发现正在发生的事情。
编辑:我把它放在github page to fully replicate 上。此链接可能不适用于该问题的未来读者,但我会在可预见的将来继续使用它。要演示该问题,请在 Chrome 和 Firefox 中查看。
谢谢。
【问题讨论】:
标签: javascript google-chrome user-interface drag-and-drop html5-draggable