Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery鼠标移动捕捉不准确_Javascript_Jquery_Dom - Fatal编程技术网

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();