Получить вертикальную позицию полосы прокрутки для веб-страницы при загрузке страницы, когда URL содержит привязку - PullRequest
3 голосов
/ 04 июня 2011

Я использую метод scrollTop () в jQuery, чтобы получить вертикальную позицию полосы прокрутки при загрузке страницы. Мне нужно получить это значение после выполнения привязки в URL (ex url: www.domainname.com # foo). Я могу использовать следующий код, и он работает в Firefox и IE:

ex url: www.domainname.com # foo

$(document).ready(function() {    
    if ($(this).scrollTop() > 0) {
         // then a conditional statement based on the scrollTop() value
         if ($(this).scrollTop() > $("#sidenav").height()) { ...

Но в Safari и Chrome document.ready (), кажется, выполняется до привязки, поэтому scrollTop () возвращает 0 при загрузке страницы в этом сценарии. Как получить доступ к значению scrollTop () при загрузке страницы после выполнения привязки в Chrome и Safari?

1 Ответ

4 голосов
/ 04 июня 2011

Возможно, вы просто захотите сделать что-то быстрое и грязное, например setTimeout, и сколько угодно миллисекунд потребуется, чтобы получить его из Chrome или Safari надежно

var MAX_CHECKS = 5;             // adjust these values
var WAIT_IN_MILLISECONDS = 100; // however works best
var checks = 0;

function checkScroll() {
  if ($(this).scrollTop() > 0) {
    // then a conditional statement based on the scrollTop() value
    if ($(this).scrollTop() > $("#sidenav").height()) {
      ...
    }
  } else {
    if (++checks < MAX_CHECKS) {
      // just to make sure, you can try again
      setTimeout(checkScroll, WAIT_IN_MILLISECONDS);
    }
  }
}

$(document).ready(function() {
  // You can also throw in an if statement here to exclude
  // URLs without # signs, single out WebKit browsers, etc.
  setTimeout(checkScroll, WAIT_IN_MILLISECONDS);
  ...
});

Обратите внимание, что вы также можете использовать if ($.browser.webkit), хотя эта функция устарела и может быть перемещена в плагин вместо основного jQuery (в пользу обнаружения функций).

...