javascript - 检测可滚动 div 中的元素何时超出 View

标签 javascript jquery html tracking viewport

我需要为以下问题找到一个好的解决方案。我看到很多人询问有关跟踪元素是否在页面或浏览器窗口的 View 端口之内或之外的问题。我需要能够复制此操作,但在滚动的 DIV 中,例如溢出:滚动。有谁知道这个特定操作的好例子吗?

提前致谢。

最佳答案

这是已接受答案的纯 javascript 版本,不依赖于 jQuery,并对部分 View 检测进行了一些修复,并支持顶部的 View 外。

function checkInView(container, element, partial) {

    //Get container properties
    let cTop = container.scrollTop;
    let cBottom = cTop + container.clientHeight;

    //Get element properties
    let eTop = element.offsetTop;
    let eBottom = eTop + element.clientHeight;

    //Check if in view    
    let isTotal = (eTop >= cTop && eBottom <= cBottom);
    let isPartial = partial && (
      (eTop < cTop && eBottom > cTop) ||
      (eBottom > cBottom && eTop < cBottom)
    );

    //Return outcome
    return  (isTotal  || isPartial);
}

作为奖励,此函数可确保元素在 View 中(如果不在 View 中(部分或全部)):

function ensureInView(container, element) {

    //Determine container top and bottom
    let cTop = container.scrollTop;
    let cBottom = cTop + container.clientHeight;

    //Determine element top and bottom
    let eTop = element.offsetTop;
    let eBottom = eTop + element.clientHeight;

    //Check if out of view
    if (eTop < cTop) {
      container.scrollTop -= (cTop - eTop);
    }
    else if (eBottom > cBottom) {
      container.scrollTop += (eBottom - cBottom);
    }
}

关于javascript - 检测可滚动 div 中的元素何时超出 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16308037/

相关文章:

javascript - 将 jQuery 焦点转移到下一个 div 分隔输入

javascript - 如何在 JavaScript 中迭代 map 数组列表?

html - 推特 Bootstrap 元素的重叠边界

javascript - 基于视口(viewport)高度的 CSS

javascript - “did-fail-load”事件的反义词是什么

javascript - 从 jquery 添加 on click 时如何传递被单击的控件的实例?

HTML 表单标签有两个选项

javascript - 如何在href之前触发onClick

javascript - 使用文本字段中的值更新隐藏表单字段

javascript - 根据下拉列表显示多个字段