У меня есть ситуация, когда, например, если пользовательский прокрутка приведет к изменению в 1000 пикселей в scrollTop, я бы хотел знать заранее.
Прекрасным примером является контроль iCalendar над прокруткой пользователя. Независимо от того, насколько сильно вы прокручиваете приложение iCalendar, самый дальний из них можно прокручивать до следующего или предыдущего месяца.
В настоящее время у меня очень хакерское решение для ограничения поведения прокрутки, которое учитывает только то, где сейчас выполняется прокрутка пользователя.
MyConstructor.prototype._stopScroll = function(){
//Cache the previous scroll position and set a flag that will control
//whether or not we stop the scroll
var previous = this._container.scrollTop;
var flag = true;
//Add an event listener that stops the scroll if the flag is set to true
this._container.addEventListener('scroll', function stop(){
if(flag) {
this._container.scrollTop = previous;
}
}.bind(this), false);
//Return a function that has access to the stop function and can remove it
//as an event listener
return function(){
setTimeout(function(){
flag = false;
this._container.removeEventListener('scroll', stop, false);
}.bind(this), 0);
}.bind(this);
};
Этот подход работает и останавливает прокрутку, но он не является гладким, и мне бы хотелось узнать, есть ли лучший способ выполнить это.
Ключом к этому вопросу я могу узнать раньше времени, где прокрутка закончится. Спасибо!!!