Javascript jquery鼠标移动捕捉不准确
我正面临一个奇怪的问题。 我通过以下方式捕捉鼠标移动:Javascript jquery鼠标移动捕捉不准确,javascript,jquery,dom,Javascript,Jquery,Dom,我正面临一个奇怪的问题。 我通过以下方式捕捉鼠标移动: var mmoves = []; jQuery(document).mousemove(function(event) { mmoves.push({x:event.pageX, y:event.pageY}) } 然后我在页面上附加一个div,如下所示: $("body").append('<div id="mouseemul" style="padding:0; margin:0; color: red; backgrou
var mmoves = [];
jQuery(document).mousemove(function(event) {
mmoves.push({x:event.pageX, y:event.pageY})
}
然后我在页面上附加一个div,如下所示:
$("body").append('<div id="mouseemul" style="padding:0; margin:0; color: red; background-color: blue; width: 1px; height: 1px;">*</div>');
$(“body”).append('*');
然后试着播放这些动作
它在大多数页面上工作正常,但在某些页面上播放开始(“*”初始位置)右侧(x)的一些像素。y是可以的,但x在右边大约是120像素。在其他页面上,它是准确的。在不准确的页面上,当鼠标靠近右侧滚动条时,它会超出右侧页面边框,并生成一个水平滚动条
我认为这与正在播放的页面的css样式有关
有人知道是什么导致了这一切吗?
如何获得实际偏移量(如果此类页面存在偏移量)
非常感谢
赫尔南
--编辑--
很明显,x位移是由于主文档的定位引起的。第一个元素给出的$.position()为0134,如果我从记录的数据中减去该值,则回放是准确的。问题是,这种位移并不是在每一页上都发生,我不知道如何计算位移发生的时间和不发生的时间(用减法纠正)。
如果要捕获并回放鼠标移动,可以尝试从文档中“录制”。
这将使用窗口中的x和y弦
为此,可以使用document DOM元素:
var m = [];
// Using the document instead of body might solve your issue
$( document ).mousemove(function( e ){
m.push({ x : e.pageX, y : e.pageY });
});
重播
HTML/CSS
您的HTML/CSS应该是页面上设置了位置:fixed
的div,它应该与您的javascript弦示例匹配,因为fixed
绝对位于窗口:
<style>
.replay {
/* Use position fixed to match window chords */
position: fixed;
top: 0;
left: 0;
/* These are just for show */
border-radius: 20px;
background: red;
width: 10px;
height: 10px;
}
</style>
<div class="replay"></div>
演示
试试这个。你如何定位这些div?我在代码中看不到正确的位置。那么clientX
/clientY
呢?div是通过$(“#div”).css({top:yy,left:xx})定位的。yy和xx是从鼠标移动中收集的pageX和pageY。帮你自己一个忙:JSFIDLE!另外,这是一个18个月前发布的问题。如果您找到了解决方案,请为社区着想,将其添加到下面。
var $replay = $('.replay'), // Get mouse simulator
i = 0, l = m.length,
pos, t;
// Recursive animation function
function anim(){
// Cache current position
pos = m[i];
// Move to next position
$replay.css({ top: pos.y, left: pos.x });
i++;
// Exit recursive loop
if ( i === l )
clearTimeout( t );
// Or keep going
else
t = setTimeout(anim, 100); // Timeout speed controls animation speed
}
// Start animation loop
anim();