【问题标题】:(doc && doc.scrollTop || body && body.scrollTop || 0) return 'Window' object(doc && doc.scrollTop || body && body.scrollTop || 0) 返回“窗口”对象
【发布时间】:2013-08-28 16:44:38
【问题描述】:

我只想获取文档的 scrollTop 并使用此 answer 中的代码。但我得到的是一个“窗口”对象。我已经用 IE 10、Chrome 和 Firefox 进行了测试。 这是我的代码:

    var doc = document.documentElement, body = document.body;
    var left = (doc && doc.scrollLeft || body && body.scrollLeft || 0);
    var top = (doc && doc.scrollTop  || body && body.scrollTop  || 0);

    scroll = {
        top: (doc && doc.scrollTop  || body && body.scrollTop  || 0),
        left: (doc && doc.scrollLeft || body && body.scrollLeft || 0)
    };


    console.log(scroll.top); // return 0
    console.log(top); // return object 'Window'

我认为这是一个简单的问题,但我不知道为什么它会返回一个对象。

【问题讨论】:

    标签: javascript scrolltop


    【解决方案1】:

    您的变量top 在窗口范围内。我可以用window.topwindow.left 引用它。 window.top 的问题已经定义。 window.top 指层次结构中最顶层的窗口。浏览器不允许您设置该变量。

    您需要将其定义为不同的变量或更改范围,使其不会与全局 [window] 命名空间冲突。

    【讨论】:

    • +1 不错的想法,我认为这是一个范围问题。 window.top 不可写是有道理的,所以如果所有代码都在全局范围内,也会导致它(并且是基于 OP 代码的更准确的答案)。
    • 是的,就像你说的那样。谢谢。
    【解决方案2】:

    可能是您的 console.log 不在您的 var top 声明的内部范围内。

    当您引用top 时,您不会引用您声明的变量,而是引用window.top

    console.log(top); // global variable `window.top`: window object
    
    ;(function(){
      var top = 0;
    
      console.log(top); // local variable `top`: 0
    
    })();
    
    console.log(top); // global variable `window.top`: window object
    

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      相关资源
      最近更新 更多