Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.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
jQuery mousemove(游标“概述”)计算错误_Jquery_Position_Mousemove_Jquery Calculation - Fatal编程技术网

jQuery mousemove(游标“概述”)计算错误

jQuery mousemove(游标“概述”)计算错误,jquery,position,mousemove,jquery-calculation,Jquery,Position,Mousemove,Jquery Calculation,我正试图创建一个文档/光标“MapOverview”,但是我在计算时卡住了。指针仍超出“概述”框 到目前为止: 我知道,这不是使用百分比的最佳方法,但我不知道如何计算正确的尺寸。。。有什么更好的建议吗?光标将始终与框的边框重叠,因为 a) 它的定义宽度大于1 b) 您将其放置在实际位置的右下角,使其与右下角和右下角重叠 c) 应将框的溢出设置为隐藏 见示例: 编辑:适应JSFIDLE的最新变化 CSS: jQuery: $(window).on('mousemove', function(e)

我正试图创建一个文档/光标“MapOverview”,但是我在计算时卡住了。指针仍超出“概述”框

到目前为止:


我知道,这不是使用百分比的最佳方法,但我不知道如何计算正确的尺寸。。。有什么更好的建议吗?

光标将始终与框的边框重叠,因为

a) 它的定义宽度大于1

b) 您将其放置在实际位置的右下角,使其与右下角和右下角重叠

c) 应将框的溢出设置为隐藏

见示例:

编辑:适应JSFIDLE的最新变化

CSS:

jQuery:

$(window).on('mousemove', function(e) {

   var pageX = e.clientX;
   var pageY = e.clientY;
   var winW = $(this).width();
   var winH = $(this).height();

   if(pageX > winW-5) pageX = winW-5; // deal with scrollbar

   var boxWidth = 172;
   var boxHeight = 172;

   var posX = pageX / winW * boxWidth;
   var posY = pageY / winH * boxHeight;

   pointer.css({
      top: posY + 'px',
      left: posX + 'px'
   });

});

你到底想完成什么?试图“捕捉”网站上的菜单项似乎很烦人。@Jurgenstilart如前所述,我试图重建以下部分或更确切地说是其中的一部分……是的,你的想法是正确的,但这并不能解决我的问题:P“指针”仍然在框上方/下方:你只能通过“调整”实际屏幕到虚拟屏幕来避免这种情况,忽略外部部分(例如,每个方向10个左右像素)。您可以使用
if(pageXHmm…我认为有一个更好的解决方案;)这样的构造来实现这一点,如果您使用灰色框的x/y尺寸减去光标框和滚动条的宽度/高度(!),则可以使用百分比来计算正确的尺寸你会得到一个总的xa/ya,你可以根据屏幕的实际宽度和高度进行设置:哇,看起来不错!谢谢:-*
#box {
   position: fixed;
   bottom:0;
   left:0;
   width: 180px;
   height: 180px;
   background: #aaa;
   overflow: hidden;
}
$(window).on('mousemove', function(e) {

   var pageX = e.clientX;
   var pageY = e.clientY;
   var winW = $(this).width();
   var winH = $(this).height();

   if(pageX > winW-5) pageX = winW-5; // deal with scrollbar

   var boxWidth = 172;
   var boxHeight = 172;

   var posX = pageX / winW * boxWidth;
   var posY = pageY / winH * boxHeight;

   pointer.css({
      top: posY + 'px',
      left: posX + 'px'
   });

});