warnDefault не определено в скрипте смещения прокрутки - PullRequest
0 голосов
/ 04 января 2019

Я использую этот скрипт для прокрутки до якоря:

$( 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) {
                e.preventDefault();
                window.location.hash = href;
            });
            return false;
        }
    });

});

Однако после того, как я щелкнул ссылку (и анимация закончилась), я дважды получаю следующую ошибку: Uncaught TypeError: Cannot read property 'preventDefault' of undefined

Я не понимаю, почему. Я попытался добавить e к функции, но она все равно выдает ошибку. Может ли кто-нибудь дать некоторую справочную информацию?

1 Ответ

0 голосов
/ 04 января 2019

Проблема в том, что ...

$( 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...