Запретить запуск события прокрутки, когда контент нажат вверх

Я заметил, что событие прокрутки jquery автоматически запускается, когда какой-то контент нажимает вверху страницы на ajax. Любой эксперт знает, как избежать запуска события прокрутки, когда содержимое было добавлено? Но событие прокрутки запускается, когда пользователь запускает колесико мыши, вверху страницы, а также клавиатуру вверх и вниз, возможно?

$(window).on('scroll', function () {
        console.log("User manual scrolled.");
    });

На основе этого примера. https://jsfiddle.net/q00jnv4n/

Ответы

Ответ 1

.off функция, используемая для Удаление обработчика событий.

Вы должны использовать $(window).off("scroll") непосредственно перед загрузкой содержимого с помощью ajax, а затем снова использовать $(window).on('scroll', function () { после загрузки содержимого

Используя .off, ваш обработчик прокрутки будет удален, пока контент загружается на сайт.

Ответ 2

Один из вариантов остановки отображения, отображаемого для перемещения, состоит в том, чтобы отрегулировать scrollTop на величину, измененную высотой #result, например. scrollTop = (scrollTop + newHeight - oldHeight):

function AddContent() {
    var height = $('#result').height();
    console.log("height: " + height);
    $(".UnloadedPara").each(function () {
        //console.log();
        $(this).replaceWith("<div>This is some new paragraph</div>");
    });

    var newHeight = $('#result').height();
    $(window).scrollTop($(window).scrollTop() + newHeight - height);
}

JSFiddle: https://jsfiddle.net/TrueBlueAussie/q00jnv4n/12/

Ответ 3

Вы используете window.scrollTop() в своем коде. Он автоматически выведет событие прокрутки в jQuery, поскольку jQuery использует window.scrollTo() под капотом.

Вы не можете подавить это событие с прокруткой. Но вы можете использовать хак, чтобы определить, было ли вызвано событие прокрутки после того, как вы добавили AddContent под названием window.scrollTop(). Вы можете сделать это, установив логическую переменную в AddContent на false. И проверьте свой обработчик события прокрутки, если переменная if false или нет. Если это false, то установите его на true и ничего не делайте. В противном случае выполните требуемое действие.

Я разветкил ваш jsfiddle и обновил его: JsFiddle

Ответ 4

ссылаясь на этот пост, существует событие, которое прослушивает только прокрутку мышь.

$(window).bind('mousewheel DOMMouseScroll', function(e){
    if (e.originalEvent.wheelDelta > 0 || e.originalEvent.detail < 0) {
        // scroll up
    } else {
        // scroll down
    }
});

приветствия timotheus

Ответ 5

Это всего лишь обходной путь, но если вам нужно быстрое исправление, вы можете прокрутить окно назад к кнопке после того, как новый контент будет загружен наверху.
https://jsfiddle.net/msfq5mx0/

$(window).scrollTo(0,$("#btnAddContent").offset().top);