情况:我正在使用 HTML5 拖放在我正在编写的游戏中放置图块。我想添加一个效果,其中我将要放置一个新瓷砖的两个瓷砖稍微分开,以表明这是你要放下的地方(类似于 Mac OS 扩展坞)。
我的方法:我有一个flexbox
将这些瓷砖放入其中的方法。我写了一个函数,它基本上返回一个正弦波的周期,我用它来根据right:
它们在.top:
position: relative;
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.log
至 ged 元素的计算right:
属性,当它显示在屏幕上跳跃时,它输出为一个常数值。
我尝试过/想到的:
- 即使鼠标静止并
console.log(event.clientX)
输出恒定值,图块也会跳来跳去。 - 我认为
event.clientX
可能会在不知不觉中发生变化,所以我根据我的计算Math.trunc(event.clientX)
无济于事。 - 我
element.getBoundingClientRect()
在我的计算中使用,我不是很熟悉,我认为这可能是我问题的根本原因。
我制作了这个 CodePen,但无法完全复制该问题。不过,我认为有人可能能够发现正在发生的事情。
编辑:我把它放在一个github 页面上以完全复制. 此链接可能不适用于该问题的未来读者,但我会在可预见的将来继续使用它。要演示该问题,请在 Chrome 和 Firefox 中查看。
谢谢你。