Предотвращение / остановка автоматической привязки ссылки - PullRequest
9 голосов
/ 01 апреля 2009

Мне нужно запретить автоматическую прокрутку в браузере при использовании link.html # idX и

.

Проблема, которую я пытаюсь решить, заключается в том, что я пытаюсь выполнить пользовательские функции прокрутки при загрузке страницы, обнаруживая привязку в URL, но до сих пор не смог предотвратить функцию автоматической прокрутки (в частности, в Firefox).

Есть идеи? Я пробовал метод protectDefault () в обработчике $ (window) .load (), который, похоже, не работает.

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

Все понимают, что я не ищу обходной путь; Мне нужно знать, можно ли (и как) предотвратить автоматическую прокрутку до #anchors при загрузке страницы.


Примечание

Это не на самом деле ответ на вопрос, просто простой клюге в стиле гонки.

Используйте плагин jQuery scrollTo для прокрутки назад до верхней части страницы, а затем реанимируйте прокрутку, используя что-то свое. Если браузер / компьютер достаточно быстрый, на странице нет «вспышки».

Я чувствую себя грязно, просто предлагая это ...

$(document).ready(function(){

    // fix the url#id scrollto "effect" (that can't be
    // aborted apparently in FF), by scrolling back
    // to the top of the page.
    $.scrollTo('body',0);

    otherAnimateStuffHappensNow();

});

Кредит идет на Уомблтон за указание на это. Спасибо!

Ответы [ 4 ]

6 голосов
/ 02 апреля 2009

Этот кажется единственным вариантом, который я могу видеть с идентификаторами:

$(document).ready(function() {
  $.scrollTo('0px');
});

Он не прокручивается автоматически до классов.

Так что, если вы отождествляете свои div с уникальными классами, вы немного потеряете скорость при поиске элементов, но приобретете поведение, за которым следите.

(Кстати, спасибо, что указали на функцию прокрутки-идентификатора! Никогда не знал, что она существует.)

РЕДАКТИРОВАТЬ:

1 голос
/ 05 сентября 2011

Я знаю, что это старая тема, но я нашел что-то без необходимости прокрутки. Запустите это перед любыми другими сценариями. Он ставит якорь перед первым элементом на странице, который предотвращает прокрутку, потому что он находится в верхней части страницы.

function getAnchor(sUrl)
{
  if( typeof sUrl == 'string' )
  {
   var i = sUrl.indexOf( '#' );
   if( i >= 0 )
    { return sUrl.substr( i+1 ).replace(/ /g, ''); }
  }
  return '';
};

var s = getAnchor(window.location.href);
if( s.length > 0 )
 { $('<a name="'+s+'"/>').insertBefore($('body').first()); }

Ура! Эрвин Хаантес

1 голос
/ 01 апреля 2009
  1. Прокрутите сначала вверх (быстро, без эффектов, пожалуйста), а затем вызовите функцию прокрутки. (Я знаю, это не так красиво)
  2. или просто используйте префикс
0 голосов
/ 09 декабря 2009

Это хорошо сработало для меня:

1 - поместите это в свой css файл

a[name] { position: absolute; top: 0px }

2 - поместите это в свой документ. Свяжите прямо перед тем, как начать анимацию (если вы вообще анимируете)

$("a[name]").css("position","relative");

Может потребоваться настройка в зависимости от вашей таблицы стилей / кода, но вы поняли идею.

Кредит: http://cssbeauty.com/skillshare/discussion/1882/disable-anchor-jump/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...