jQuery: Прокрутите к привязке при вызове URL, замените поведение браузеров

В C++ рассмотрите шаблон состояния .

14
задан bj. 14 December 2009 в 21:19
поделиться

5 ответов

Если вы не создаете фактическую привязку foo , а скорее создаете привязку с идентификатором типа _foo (что-то вроде < a id = "_ foo"> ). Вы можете обработать $ (document) .ready , чтобы добиться этого.

Что-то вроде (псевдокода)

$(document).ready(function() { 
    var elem = $('#_' + window.location.hash.replace('#', ''));
    if(elem) {
         $.scrollTo(elem.left, elem.top);
    }
});
21
ответ дан 1 December 2019 в 09:32
поделиться

Вы все еще можете использовать ScrollTo. Вы хотели бы отобразить страницу без привязок, а затем использовать JavaScript, который запускается при загрузке страницы, чтобы получить привязку из URL-адреса. Затем вы можете использовать этот текст для прокрутки к определенному идентификатору.

Не знаю, как разместить элемент в середине страницы, но вы можете указать смещение для прокрутки.

0
ответ дан 1 December 2019 в 09:32
поделиться

Я не хочу сказать, что это невозможно, но ... по крайней мере, это будет достаточно испытывающий. Браузер (или, по крайней мере, все известные мне) прокручиваются до точки привязки, как только загружается эта часть страницы; AFAIK не существует основанного на Javascript способа избежать этого (вам понадобится плагин для браузера или что-то в этом роде).

Однако я думаю, вы могли бы использовать вариант «не показывать страницу, пока страница загружена полностью " сценарий, чтобы потенциально получить желаемое поведение. Другими словами, вы должны:

  1. Скрыть все содержимое вашей страницы перед загрузкой (т. Е. Иметь DIV, который обертывает всю вашу страницу, и добавить к нему стиль «display: none»)

  2. Прикрепить «onLoad» "обработчик событий на страницу, которая открывает ваш DIV, и ...

  3. В том же обработчике событий" onLoad "используйте стандартный механизм прокрутки JS (например, ScrollTo) для прокрутки до привязки (я думаю, вы ' Я смогу определить, к какой привязке прокручивать, проверив window.location)

Теоретически, потому что браузер будет прокручивать браузер между # 1 и # 2 (и поскольку прокручивать некуда, что с скрытым содержимым и все, я полагаю, он просто ничего не сделает), механизм прокрутки, который вы используете в # 3, не должен иметь никаких помех.

При этом, как говорится, все вышеперечисленное - полностью непроверенный план; ваш пробег мой разнится. Даже если это сработает, его будет сложно реализовать, поэтому, если вы действительно не хотите такого поведения, оно почти наверняка не стоит усилий.

0
ответ дан 1 December 2019 в 09:32
поделиться

это невозможно

редактировать

поведение полностью находится в руках UA.

-1
ответ дан 1 December 2019 в 09:32
поделиться

Я внес некоторые улучшения в скрипт от Jan Jongboom, так что теперь он выглядит так:

$(document).ready(function () {
    // replace # with #_ in all links containing #
    $('a[href*=#]').each(function () {
        $(this).attr('href', $(this).attr('href').replace('#', '#_'));
    });

    // scrollTo if #_ found
    hashname = window.location.hash.replace('#_', '');
    // find element to scroll to (<a name=""> or anything with particular id)
    elem = $('a[name="' + hashname + '"],#' + hashname);

    if(elem) {
         $(document).scrollTo(elem, 800);
    }

});

Он изменяет все привязки в ссылках, поэтому для пользователей без javascript поведение останется нетронутым.

6
ответ дан 1 December 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: