使用或不使用 jQuery 在屏幕上获取浮动 div 位置

Posted

技术标签:

【中文标题】使用或不使用 jQuery 在屏幕上获取浮动 div 位置【英文标题】:Get float div position on screen, with or without jQuery 【发布时间】:2019-02-17 20:10:18 【问题描述】:

我正在尝试使用 jQuery 在 div 元素上实现拖动效果。这个 div 元素通常是隐藏的,触发时会弹出。

如果我没有滚动我的文档,以下算法可以正常工作。例如,当我向下滚动文档 X 像素时,newTop 值会以某种方式添加此偏移量,并且 div 会将 X 像素移动到鼠标位置下方。

我相信这是因为window_div.offset().top 从文档的最顶部返回 div 的位置,即使它是浮动的。有没有办法从屏幕顶部获取 div 的位置?

或者有其他解决方案吗?

make_window_draggable(window_div) 

  var bWindowMoveMouseDown = false;

  var windowPositionLeft = 0;
  var windowPositionTop = 0;

  var initMousePositionLeft = 0;
  var initMousePositionTop = 0;

  var newMousePositionLeft = 0;
  var newMousePositionTop = 0;

  window_div.bind('mousedown', function(e) 

    windowPositionLeft = window_div.offset().left;
    windowPositionTop = window_div.offset().top;

    initMousePositionLeft = e.screenX;
    initMousePositionTop = e.screenY;

    bWindowMoveMouseDown = true;
  );

  $(document).bind('mousemove',function(e)  

    if(bWindowMoveMouseDown) 

      newMousePositionLeft = e.screenX;
      newMousePositionTop = e.screenY;

      let relativeMouseLeft = newMousePositionLeft - initMousePositionLeft;
      let relativeMouseTop = newMousePositionTop - initMousePositionTop;

      var newLeft = windowPositionLeft + relativeMouseLeft;
      var newTop = windowPositionTop + relativeMouseTop;

      //check bounds

      window_div.css(
        left:newLeft,
        top:newTop
      );
    
  );

  window_div.bind('mouseup', function(e) 
    bWindowMoveMouseDown = false;
  );

【问题讨论】:

这个问题可能对你有帮助***.com/questions/9334084/moveable-draggable-div 【参考方案1】:

这就是你要找的东西!

$(window).on('scroll', function () 
    var scrollTop     = $(window).scrollTop(),
        elementOffset = $('#my-element').offset().top,
        distance      = (elementOffset - scrollTop);

    console.log(distance);
);
#my-element 
    position: absolute;
    top: 500px;
    background: gold;
    height: 50px;
    width: 50px;

#output 
    position: fixed;
    top: 0;
    right: 0;
    height: 200px;
    width: 200px;
    border: 1px solid yellow;
    overflow: hidden;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div id="my-element"></div>

取自https://***.com/a/9880571/3912615

【讨论】:

以上是关于使用或不使用 jQuery 在屏幕上获取浮动 div 位置的主要内容,如果未能解决你的问题,请参考以下文章

如何根据屏幕分辨率加载或不加载 JS 脚本(进入头部)?

Android - imageView 可以在屏幕上浮动吗?

获取当前用户屏幕以显示或不显示远程通知警报

如何获得输入有焦点或不使用jquery [重复]

引导浮动标签与 jquery 验证标签冲突

如何按住浮动按钮并将其移动到 android 屏幕上的任何位置?