Запретить запуск события прокрутки, когда контент нажат вверх
Я заметил, что событие прокрутки 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);