我有一个这样的页面和脚本:
期望行为:
我想滚动到每个listitem
暂停一秒钟,然后滚动到下一个listitem
,并继续直到列表的末尾。
重现问题所需的最短代码:
我尝试的代码看起来像这样:
const sleep = (time) => new Promise(res => setTimeout(res, time, "done sleeping"));
let elm = document.querySelector('#pane-side');
let listitems = elm.children[0].children[0].children
for (let index = 0; index < listitems.length; index++) {
const y = listitems[index].getBoundingClientRect().top + window.scrollY;
elm.scroll({
top: y,
behavior: 'smooth'
});
sleep(1000).then(msg => console.log(msg));
}
个字符
具体问题或错误:
它只滚动一次到第一个listitem
,然后什么也不做。
尝试次数:
我尝试的另一个变体是elm.scroll({..})
个
与listitems[index].scrollIntoView({ behavior: "smooth", block: "end", inline: "nearest" });
个
一次都没滚动过
2条答案
按热度按时间ippsafx71#
你需要更多的CSS来实现这一点
为什么不用interval呢?
这是一个使用你原来的滚动条而不移动页面的版本。我不得不调整offsetTop来处理边距和填充
将计数更改为
const listItem = listitems[cnt % len];
并将cnt++添加到要循环的函数的末尾
xmakbtuz2#
实现这一点的一种方法是使用一个通过
setTimeout()
递归调用的函数,每次调用时递增索引。注意,您可以使用模运算符来确保索引永远不会越界。字符串
下面是一个例子:https://jsfiddle.net/6srbtvjz/。
请注意,我必须将其放置在jsFiddle中,因为在使用片段时滚动会导致SO布局出现问题。