Проблема в том, что ...
$( document ).ready(function(e)
{
var $root = $('html, body');
$('a').click(function(e) {
e.preventDefault();
var href = $.attr(this, 'href');
if(href!=='javascript:void(0)' && href!=='javascript:void(0);'){
$root.animate({
scrollTop: $(href).offset().top-100
}, 1000, function (e) {
// ^−−−−−−−−−−−−−−−−−−−−−− here
e.preventDefault(); // <−− and/or (arguably) here
window.location.hash = href;
});
return false;
}
});
});
Обратный вызов animate
не получает объект события.
Не ясно, что вы пытаетесь предотвратить в этот момент, так как вы уже предотвратили по умолчанию событие, которое произошло (щелчок).Просто удалите e
, указанный выше, а также вызов e.preventDefault()
в обратном вызове animate
.
В комментарии, которые вы добавили:
Проблемаэто потому, что смещение элемента прокрутки к элементу равно -100, страница немного перепрыгивает после обновления URL-адреса.Я хочу предотвратить это, поэтому у меня есть это e.preventDefault ();внутри живого обратного вызова.Если я удаляю его, он все равно делает этот странный скачок.
Единственная причина, по которой он не имеет этого скачка при вызове, заключается в том, что вызов вызывает ошибку, поэтому следующая строка никогда не выполняется,поэтому он никогда не устанавливает URL.
Если вы хотите установить URL без изменения страницы или положения прокрутки, вместо этого используйте history.replaceState
:
history.replaceState(null, "", href);