У меня есть элемент, который можно прокручивать. У меня также есть функция, которая прокручивает до определенной позиции. Я хотел бы вызвать функцию, когда scrollTo закончен.
var x = document.querySelector('.container');
$scope.scrollTo = function() {
x.scrollTo({
top: 300 ,
behavior: 'smooth'
});
};
// do something when scrollTo is finished
3 ответа
Проверяя положение элемента, который я прокручиваю, и сравнивая его с текущей позицией прокрутки контейнера, вы можете увидеть, когда действие прокрутки закончено.
function isScrollToFinished() {
const checkIfScrollToIsFinished = setInterval(() => {
if (positionOfItem === scrollContainer.scrollTop) {
// do something
clearInterval(checkIfScrollToIsFinished);
}
}, 25);
}
Интервал проверяет, равна ли позиция контейнера прокрутки позиции элемента, на который я прокручиваюсь. Затем выполните действие и очистите интервал.
Я использую решение, подобное этому:
function scrollElementTo(el, position) {
return new Promise((resolve) => {
const scrollListener = (evt) => {
if (typeof evt === 'undefined') {
return;
}
const target = evt.currentTarget;
if (target.scrollTop === position) {
target.removeEventListener('scroll', scrollListener);
resolve();
}
};
el.addEventListener('scroll', scrollListener);
// scroll to desired position (NB: this implementation works for
// vertical scroll, but can easily be adjusted to horizontal
// scroll as well)
el.scrollTo(0, position);
});
}
const scrollContainer = document.querySelector('#theScrollContainer');
// desired y coords for scroll
const yDesiredScroll = 234;
scrollElementTo(scrollContainer, yDesiredScroll).then(() => {
// do something here
});
Функция window.scrollTo()
не имеет функции обратного вызова при завершении. Вместо этого вы можете использовать функцию jquery.scrollTo
. Пример поста: scrollTo с замедлением и функцией обратного вызова.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.