Используя Doctype, пусть scrollTop возвращает 0, почему? - PullRequest
1 голос
/ 27 января 2011

Когда я помещаю этот Doctype в мои документы, document.body.scrollTop возвращает ноль.

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

Почему это?

1 Ответ

4 голосов
/ 27 января 2011

Когда вы используете этот Doctype, вы переводите каждый текущий браузер в так называемый Почти стандартный режим , без него вы будете в режиме Quirks.

Как вы можете прочитать на этой странице ,

[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, Сказка о двух видовых экранах .

...