Исправить HTML-элемент прокрутки в главном окне просмотра (+ jQuery) - PullRequest
1 голос
/ 07 декабря 2010

Когда я хочу прокрутить сайт по коду javascript, какой элемент corrent должен установить свойство .scrollTop?

window, document, document.body или htmlelement?

Есть ли у jQuery хитрость, чтобы обнаружить намерение прокрутить главное окно просмотра и объединить вызовы?Мне кажется, что иногда $(window).scroolTop(value) работает, но иногда нет.

Ответы [ 4 ]

1 голос
/ 08 декабря 2010

Есть ответ на вопрос Бобинса, который заключается в том, что браузеры Webkit неправильно устанавливают documentElement.scrollTop на ноль, независимо от того, находитесь ли вы в режиме причуд или в стандартном режиме; следовательно, вы не можете полностью положиться на его однострочник.

https://bugs.webkit.org/show_bug.cgi?id=9248

http://code.google.com/p/chromium/issues/detail?id=2891

Кто-то с достаточными привилегиями должен сделать это комментарием к ответу Бобинса, чтобы он не был пропущен, и тогда я смогу удалить это сообщение.

1 голос
/ 07 декабря 2010

Обычно элемент <html>, он же document.documentElement.Однако, если вы используете режим Quirks, <body> (document.body) представляет вместо этого область просмотра.(HTML / CSS явно не заявляет / не требует этого, но так работают все современные браузеры.)

Вы никогда не захотите находиться в режиме Quirks, но если вы пишете скрипт дляПри включении на чужие страницы вам придется иметь дело с этим:

var viewport= document.compatMode==='BackCompat'? document.body : document.documentElement;
// do something with viewport.scrollTop

jQuery использует window.scrollTo() вместо прямой установки свойств прокрутки.В любом случае на практике все почти одинаково.Вы могли бы утверждать, что использование scrollTo немного чище, поскольку оно избегает полагаться на область просмотра, представленную определенным элементом, но тогда jQuery по-прежнему должен использовать scrollTop / scrollLeft для чтения текущего значения 'otherсобственность в любом случае, так что нет большой победы.Вы можете использовать pageXOffset / pageYOffset, чтобы прочитать текущую позицию прокрутки, не полагаясь на конкретный элемент, но это не поддерживается везде, поэтому вам все же придется вернуться к методу scrollTop.

К сожалению, ни одно из этих свойств / методов не было стандартизировано в прошлом. CSSOM Views наконец-то исправим это.

0 голосов
/ 07 декабря 2010

У меня была и эта проблема и раньше, и во многих браузерах она велась совершенно иначе. Я закончил тем, что использовал этот довольно ужасный кусок кода:

function scrollToTop() {
    $('body, html').scrollTop(0);

    if ($.browser.webkit || $.browser.safari) {
        // Hack for webkit browsers: hide and show canvas layer so window will scroll up.
        // (scrollTop does not work right).
        $('#canvas').hide();
        window.setTimeout(function () {
            $('#canvas').show();
        }, 0);
    }
}

Однако мне нужно было только прокрутить вверх, что проще. Я не уверен, как бы вы это сделали, если хотите прокрутить до определенной точки. Может быть, использовать якоря?

0 голосов
/ 07 декабря 2010

Зависит от того, что вы прокручиваете, документ / окно или раздел

...