【问题标题】:How can I detect a Scrollbar presence ( using Javascript ) in HTML iFrame?如何在 HTML iFrame 中检测滚动条的存在(使用 Javascript)?
【发布时间】:2010-10-15 10:19:12
【问题描述】:

如何在 HTML iFrame 中检测滚动条的存在(使用 Javascript)?

我已经试过了:

        var vHeight = 0;
        if (document.all) {
          if (document.documentElement) {
            vHeight = document.documentElement.clientHeight;
          } else {
            vHeight = document.body.clientHeight
          }
    } else {
      vHeight = window.innerHeight;
    }

    if (document.body.offsetHeight > vHeight) {
      //when theres a scrollbar
    }else{
      //when theres not a scrollbar
    }

我也试过了:

           this.scrollLeft=1;
    if (this.scrollLeft>0) {
        //when theres a scrollbar
        this.scrollLeft=0;
        }else{
        //when theres not a scrollbar
        return false;
    }

没有成功..

我在 DOM Inspector 上搜索了 javascript 对象,但没有找到任何东西。

是否可以在 javacscript 的 iframe 中检测到滚动条的存在?


iframe 内容来自同一个域。

直到现在都没有成功..

alt text http://www.upvtp.com.br/file.php/1/help_key.jpg

【问题讨论】:

    标签: javascript html dom iframe scrollbar


    【解决方案1】:

    使用 jQuery,您可以比较文档高度、scrollTop 位置和视口高度,这可能会为您提供所需的答案。

    类似的东西:

    $(window).scroll(function(){
      if(isMyStuffScrolling()){
        //There is a scroll bar here!
      }
    }); 
    
    function isMyStuffScrolling() {
      var docHeight = $(document).height();
      var scroll    = $(window).height() + $(window).scrollTop();
      return (docHeight == scroll);
    } 
    

    【讨论】:

    • 感谢您的回答,但您的代码仅在我尝试移动滚动条时进行测试。我想在页面加载时对其进行测试。
    • 很抱歉,但这不是正确的解决方案。 :( 您的代码实际上检查文档是否滚动到底部。这是一个证明:jsfiddle.net/vvdb0292/2。我认为 bobince 的答案是正确的。
    【解决方案2】:

    如果 iframe 内容来自另一个域,由于 JavaScript 安全限制,我认为无法做到这一点。

    编辑: 在这种情况下,类似于给 iframe 一个 name='someframe' 和 id='someframe2' 然后比较 frames['someframe'].document.body.offsetWidth 与 document.getElementById('someframe2').offsetWidth应该会给你答案。

    【讨论】:

    • iframe 内容来自同一个域。
    【解决方案3】:
    var root= document.compatMode=='BackCompat'? document.body : document.documentElement;
    var isVerticalScrollbar= root.scrollHeight>root.clientHeight;
    var isHorizontalScrollbar= root.scrollWidth>root.clientWidth;
    

    这会检测滚动条是否需要。对于 iframe 的默认设置,这与是否存在 滚动条相同,但如果滚动条被强制打开或关闭(使用父文档中的 'scrolling="yes"/"no"' 属性,或 iframe 文档中的 CSS 'overflow: scroll/hidden'),那么这可能会有所不同。

    【讨论】:

    • 这应该是答案
    • 为什么要测试“BackCompat”而不是在所有兼容模式下都使用documentElement
    • @bab 当您处于 Quirks 模式(IE5 兼容)时,顶级文档滚动条位于 body 元素而不是 html 上。
    • 为了更简单,您可以将 compatMode 检查替换为 var root = document.scrollingElement;
    【解决方案4】:

    我认为你的第二次尝试是在正确的轨道上。除了this,您应该尝试滚动/检查document.body

    【讨论】:

      【解决方案5】:
      $(window).scroll(function(){
        if(isMyStuffScrolling()){
      //scrolling
        }else{
      //not scrolling
      }
      }); 
      
      function isMyStuffScrolling() {
        var docHeight = $(document).height();
        var scroll    = $(window).height() ;//+ $(window).scrollTop();
        if(docHeight > scroll) return true;
        else return false;
      }
      

      对 Jon 的 Winstanley 代码进行了一些改进

      【讨论】:

        【解决方案6】:

        我发现这适用于任何元素,至少在 Chrome 上:

        hasVerticalScrollbar = (element.scrollHeight > element.offsetHeight)
                || 
        (element.scrollHeight > element.clientHeight
        

        使用Width 代替Height 可以检测到相同的水平滚动条。

        【讨论】:

          猜你喜欢
          • 2011-06-10
          • 2020-03-06
          • 2013-03-25
          • 2017-09-02
          • 2011-07-03
          • 1970-01-01
          • 1970-01-01
          • 2011-01-22
          • 2011-08-13
          相关资源
          最近更新 更多