使用Doctype让scrollTop返回0,为什么?

时间:2011-01-27 10:39:29

标签: javascript dom doctype

当我将此Doctype放入我的文档时document.body.scrollTop返回零。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

为什么?

1 个答案:

答案 0 :(得分:4)

当您使用该Doctype时,您会将所有当前浏览器放入所谓的Almost Standards mode,如果没有它,您将处于Quirks模式。

正如您可以阅读this page

  

[m] ost浏览器提供window.pageXOffset/pageYOffset。这些都是完全可靠的。再次,Internet Explorer是奇怪的,因为它不提供这些属性。 Internet Explorer和其他一些浏览器将提供document.body.scrollLeft/Top。在严格模式下,IE 6和其他一些浏览器提供document.documentElement.scrollLeft/Top

在那里提供的脚本计算你想要的值:

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

另一篇有趣的文章出现在QuirksMode上,A tale of two viewports