javascript - 元素在可滚动容器中是否可见

标签 javascript html css twitter-bootstrap-3 overflow

我正在尝试为 Bootstrap 创建一个完全可样式化的选择字段。我快完成了,但我想让控件正确处理向上和向下箭头键。如果您使用箭头将所选元素移出菜单的可见部分,我希望它滚动到事件元素。

我能找到的大多数关于如何使这样的东西工作的例子只关心在浏览器视口(viewport)中。我需要检查某个元素在设置了溢出的不同容器元素中是否可见。

我目前的尝试导致菜单在需要之前向下滚动,并且永远不会向上滚动以跟随事件元素。

我在站点中使用 jQuery,因此您可以在您的答案中使用它,或者只是普通的 javascript。请不要引用任何额外的库,我希望这是一个简单的解决方案。

$.fn.visible = function(partial, parent){
    var $w              = parent ? $(parent): $(window);
    var $t              = $(this),
        viewTop         = $w.scrollTop(),
        viewBottom      = viewTop + $w.height(),
        _top            = $t.offset().top,
        _bottom         = _top + $t.height(),
        compareTop      = partial === true ? _bottom : _top,
        compareBottom   = partial === true ? _top : _bottom;

    return ((compareBottom <= viewBottom) && (compareTop >= viewTop));
};

jsfiddle example

最佳答案

我找到了一种方法来判断子元素在可滚动父元素中是否可见。这是我想出的 jQuery 函数。

$.fn.visible = function(partial, parent, child){
    var $outer = $(parent);
    var $child = $(child);

    if(partial)
        return ($child.position().top >= 0 && $child.position().top < $outer.height());
    else
        return ($child.position().top - $child.height() >= 0 && $child.position().top + $child.height() < $outer.height());
};

关于javascript - 元素在可滚动容器中是否可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47817551/

相关文章:

CSS:有什么方法可以水平居中具有 "position:fixed"的 header ?

html - 使用 Bootstrap 自定义更改按钮上的悬停颜色

javascript - 固定表格布局在列隐藏时调整大小

javascript - JQuery - 根据数组数据将 html 表格列添加到表格末尾

html - 为什么我的 CSS 下拉菜单在底部被截断?

javascript - 代码在 Safari 和响应式浏览器中无法正常工作

javascript - 实验 : it is possible to find with element has been affected by a class using javascript?

javascript - 预加载器在 HTML 完成加载/Javascript 之前消失

javascript - 将高分辨率 Adob​​e Creative SDK 从 PHP 转换为 Ruby on Rails

html - <select> 标签上的值属性未选择默认选项