我正在尝试创建一个复杂的项目:一个Youtube界面的克隆,并且我在JS方面遇到了问题。
思路
思路是:在滚动时,应该自动创建更多的 divs
,类似于第一个(这部分工作得很好)。
问题
但是,当我想要为click
添加事件监听器时,JavaScript无法处理后续 divs
上的事件,
而实际上会自动生成50~100个具有相同类的其他 divs
。因此,我认为.length
可能存在问题。
这是演示网站,让您更好地了解问题:
https://laaouatni.github.io/yt-clone/
这是我认为问题所在的位置:
function createVideo() {
let videoComponent = videoContainer.cloneNode(true);
mainContainer.appendChild(videoComponent);
}
...
<main>
<div class="video-container">
...
</div>
<!-- here javascript will put other divs on scroll -->
</main>
...
window.addEventListener("scroll", function() {
let scrollPercentage = (window.scrollY / (document.body.scrollHeight - window.innerHeight)) * 100;
if (scrollPercentage > 70) {
createVideo();
}
}
let videoContainer = document.querySelector(".video-container");
let allVideoContainer = document.querySelectorAll(".video-container");
for (let index = 0; index < allVideoContainer.length; index++) {
allVideoContainer[index].addEventListener("click", function() {
console.log("clicked video N " + index);
})
}
如果我点击手动编写的 div
,则会执行 click
函数,但是对于生成的 div
,click
不起作用。我不知道 DOM 是否没有更新或者我需要编写更多内容?在互联网上没有解决此问题的结果(希望能找到有经验的人,在这里帮助我)。
scroll
事件监听器需要被设置为passive
。 - Dai