Я вижу странную проблему, когда плагин ScrollTo прокручивает вдвое ожидаемое расстояние, но только при нажатии на кнопку-переключатель или метку флажка.
Я удалил плагин и заменил его следующим ...
$("html, body").animate({ scrollTop: '+=50' }, 650);
И все же проблема осталась. Тогда я попытался добавить остановку анимации без удачи ...
$("html, body").stop(true, true).animate({ scrollTop: '+=50' }, 650);
Затем я создал очень простой jsFiddle для этой проблемы, и теперь я убежден, что это ошибка в jQuery Core. Протестировано во всех версиях jQuery, насколько позволяет jsFiddle. Пока что в Safari, Firefox и IE8 то же самое.
Если рядом с переключателем или флажком установлен элемент <label>
и его id
используется в качестве атрибута for
внутри <label>
, щелчок по <label>
установит соответствующий переключатель или флажок. (Это должно работать так).
<input id="type-0" type="radio" name="name" value="" />
<label for="type-0" title="">Click this Label and Radio is selected.</label>
Проблема здесь в том, что jQuery scrollTop()
удваивает вычисленную позицию, но только , когда вы нажимаете <label>
, который выбирает переключатель или флажок. Он прокручивает правильное расстояние, когда вы нажимаете что-либо еще, включая переключатель или сам флажок.
http://jsfiddle.net/sparky672/sZAkJ/
Как видите, нажатие на ярлык, связанный с его элементом ввода, вызывает двойную прокрутку.
Некоторые другие наблюдения:
На моей странице это выглядело так, как будто прокрутка запускается и останавливается дважды. Вот почему я добавил .stop(true, true)
к моей анимации. Однако это никак не повлияет на решение этой проблемы.
Я не могу избежать использования меток для выбора элементов ввода, поскольку у меня есть другая функция, которая зависит от этого. (Пример: http://jsfiddle.net/sparky672/CgMX8/)
Я ищу ...
1) Объяснение этому. Если нет, возможно, это просто (новая?) Ошибка в jQuery Core. Я не смог найти никаких других упоминаний об этой причуде после поиска в Google. Ничего в трекере ошибок jQuery тоже нет .
2) Обходной путь для этого, чтобы я мог нажимать на ярлыки ввода и не иметь прокрутки в два раза. Я хотел бы добиться эффекта прокрутки, когда щелкает что-либо внутри контейнера, включая переключатели и метки. Я думаю, что селекторы могут быть улучшены, так что прокрутка может быть разрезана пополам при нажатии на ярлык, но все еще работает нормально, когда нажимается что-либо еще. (Это может не очень хорошо работать, поскольку все равно выглядит так, как будто анимация запускается дважды.)