(doc&& doc.scrollTop || body&& body.scrollTop || 0)返回'Window'对象

时间:2013-08-28 16:44:38

标签: javascript scrolltop

我只想获取文档的scrollTop并使用此answer中的代码。但我得到的是一个'Window'对象。我已经使用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'

我认为这是一个简单的问题,但我无法弄清楚它为什么会返回一个对象。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

可能是您的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