【问题标题】:Scrollbar appear / disappear event in jQuery?滚动条在jQuery中出现/消失事件?
【发布时间】:2011-02-04 09:40:42
【问题描述】:

在 jQuery 中是否有一种简单的方法来检测滚动条何时出现和消失在具有 overflow:auto 的 div 上? (就像一个事件?手指交叉......)

(我宁愿不必查看 div 内容的高度)

【问题讨论】:

标签: javascript jquery scroll scrollbar jquery-events


【解决方案1】:

据我所知,没有事件发生。
但是,您“可以”为此编写自己的特殊活动,我想您必须检查一下 高度和宽度。

如果.innerHeight 超过.outerHeight,应该可以检测到滚动条 元素的值。

【讨论】:

  • 谢谢我试图避免这种情况,因为我在相对定位的 div 中使用绝对定位的 div。溢出:自动为此(神奇地)工作,但计算内部元素的高度并不容易。
【解决方案2】:

正如其他人所说,没有简单的方法。这是我过去用来检测是否存在滚动条的一些代码。

// Used like $('#my-id').hasScrollbar();

jQuery.fn.hasScrollbar = function() {
    var scrollHeight = this.get(0).scrollHeight;

    //safari's scrollHeight includes padding
    if ($.browser.safari)
        scrollHeight -= parseInt(this.css('padding-top')) + parseInt(this.css('padding-bottom'));

    if (this.height() < scrollHeight)
        return true;
    else
        return false;
}

在从 div 中添加或删除内容后,您需要手动调用它,并且它可能仅在您在可见元素上调用它时才有效,但它比从头开始更好。

【讨论】:

    【解决方案3】:

    实现此目的的另一种方法是使用 scrollLeft 或 scrollTop 检查是否存在滚动条:

    //nudge the scrollbar away from its starting position
    
    $('#your_selector').scrollLeft(1);
    
    //A value of 0 is assigned if the scrollbars are at their default position, 
    //or are abscent
    
    if($('#your_selector').scrollLeft() !== 0) return true;
    
    //put the scrollbar back to its starting position
    
    $('#your_selector').scrollLeft(0);
    

    【讨论】:

    • 这看起来是最简单的解决方案,但我相信它也会触发回流。
    猜你喜欢
    • 1970-01-01
    • 2013-11-20
    • 2013-05-25
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多