代码之家  ›  专栏  ›  技术社区  ›  Lennie

div的onscroll函数不能与getBoundingClientRect()方法一起使用

  •  0
  • Lennie  · 技术社区  · 6 年前

    我为一个div实现了一个onscroll函数,它的工作方式如下:

    window.onscroll = function () {
      document.getElementById("faceExtractor").style.top = (($(window).scrollTop()) + 50) + "px";
    };
    

    效果很好。现在,我使div元素也可拖动,这意味着在有人拖动div a但向下然后滚动之后,由于onscroll函数,div再次放在页面顶部下方50px处。我想解决这个问题,以便div在滚动时保持它的位置,即使有人拖动它到一个特定的位置,我也尝试这样做:

    window.onscroll = function () {
      topDistance = document.getElementById("faceExtractor").getBoundingClientRect().top;
      if (topDistance < 50){
        document.getElementById("faceExtractor").style.top = (($(window).scrollTop()) + 50) + "px";
      } else {
        var gap = ($(window).scrollTop()) + topDistance;
        document.getElementById("faceExtractor").style.top = gap + "px";
      }  
    };
    

    不过,那就根本不起作用了。如何修改onscroll,使div保持其位置,而不总是放在页面顶部或静态位置?

    1 回复  |  直到 6 年前
        1
  •  0
  •   SOUser    6 年前
    window.onscroll = function () {
      positionFromTop = document.getElementById("faceExtractor").offsetTop;
      topDistance = document.body.parentElement.scrollTop+positionFromTop;
      if (topDistance < 50){
        document.getElementById("faceExtractor").style.top = topDistance+ "px";
      } else {
        var gap = topDistance;
        document.getElementById("faceExtractor").style.top = gap + "px";
      }  
    };
    

    试试这个方法。并且,为“faceExtractor”Div指定“position:absolute”。