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

标签 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">

这是为什么?

最佳答案

当您使用该 Doctype 时,您会将每个当前浏览器放在所谓的 Almost Standards mode 中。 ,没有它,您将处于怪癖模式。

正如您在 this page 上看到的那样,

[m]ost browsers provide window.pageXOffset/pageYOffset. These are completely reliable. Once again, Internet Explorer is the odd one out, as it does not provide these properties. Internet Explorer and some other browsers will provide document.body.scrollLeft/Top. In strict mode, IE 6 and a few other browsers, provide 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 .

关于javascript - 使用 Doctype 让 scrollTop 返回 0,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4815283/

相关文章:

javascript - 访问 Angular 2 中的 DOM 元素并更改元素的类属性

c# - 如何在 C# 中将文档类型添加到新的 XML 文件

javascript - 通过 escape_javascript 在 JavaScript 中转义斜线

javascript - 将上下文传递给 React ChartJS 2 上的选项

jquery - HTML5 视频加载

javascript - 使通过 JQuery 生成的表行充当 onClick 页面重定向

html - IE9 CSS兼容性和DOCTYPE声明

html - 网页可以成为 future 的证明吗?

javascript - 将 ECMAScript 6 const 作为函数参数传递

javascript - Cookie 在 Web 应用程序中的用途是什么?