после реализации функции debounce из lodash эта функция больше не может препятствовать прокрутке страницы пользователем.
Я попытался передать debounce часть lodash в другую функцию, но не смог заставить ее работать таким образом.
Это код:
$(document).on('mousewheel DOMMouseScroll', _.debounce(function(event) {
event.preventDefault();
var wd = event.originalEvent.wheelDelta || -event.originalEvent.detail;
var a= document.getElementsByClassName('mouseScrollAnchor');
if (wd < 0) {
for(var i = 0 ; i < a.length ; i++) {
var t = a[i].getClientRects()[0].top;
if (t >= 40) break;
}
}
else {
for(var i = a.length-1 ; i >= 0 ; i--) {
var t = a[i].getClientRects()[0].top;
if (t < -20) break;
}
}
if (i >= 0 && i < a.length) {
$('html,body').animate({
scrollTop: a[i].offsetTop
});
}
}, 500));
Что я ожидаю от функции: Это не позволяет пользователю нормально прокручивать, вместо этого он должен прокручивать до следующего якоря в списке якорей.
Что оно делает: Это позволяет пользователю прокручивать вручную (что не должно быть разрешено), и через 0,5 секунды он прокручивается до привязки.
В основном он работает как задумано, за исключением части event.preventDefault.
Редактировать: Теперь работает! Ниже вы можете найти рабочий код:
jQuery(document).ready(function($){
var changeView = function(event){
var wd = event.originalEvent.wheelDelta || -event.originalEvent.detail;
var a= document.getElementsByClassName('mouseScrollAnchor');
if (wd < 0) {
for(var i = 0 ; i < a.length ; i++) {
var t = a[i].getClientRects()[0].top;
if (t >= 40) break;
}
}
else {
for(var i = a.length-1 ; i >= 0 ; i--) {
var t = a[i].getClientRects()[0].top;
if (t < -20) break;
}
}
if (i >= 0 && i < a.length) {
$('html,body').animate({
scrollTop: a[i].offsetTop
});
}
};
var mousewheelDebounced = _.debounce(changeView, 25);
$(document).on('mousewheel DOMMouseScroll', function(event) {
event.preventDefault();
mousewheelDebounced(event);
});
/*...*/
}
Возможный дубликат Подчеркнуть отказ аргументами
Проблема в том, что при запуске debounce событие уже выполнено
@mjwills большое спасибо! Я отредактирую рабочий код в сообщении.
Поместите свой рабочий код как отвечать, а не как вопрос. Это нормально, чтобы ответить на свой вопрос.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы читали stackoverflow.com/questions/39237942/… ?