马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
var but = document.querySelectorAll(".button1");
var videos = document.querySelector("video");
for (var i = 0; i < but.length; i++) {
but[i].addEventListener("click", function () {
videos.src = "./video/" + i + ".mp4";
});
}
元素选择:使用 document.querySelectorAll(".button1") 选择了所有具有类名 button1 的元素,并将它们存储在 but 数组中。然后,通过 document.querySelector("video") 选择了视频元素。
循环和事件处理程序:通过一个 for 循环遍历 but 数组,并为每个按钮添加了一个点击事件处理程序。当点击按钮时,会设置视频的 src 属性为 ./video/ 加上当前按钮的索引(i)再加 .mp4 的文件路径。
我想得到的得效果是
点击but[0] 按钮得到videos.src = "./video/0.mp4";
点击but[1] 按钮得到videos.src = "./video/1.mp4";
点击but[2] 按钮得到videos.src = "./video/2.mp4";
点击but[3] 按钮得到videos.src = "./video/3.mp4";
但是报错,不知道哪错了
你的代码中有一个小问题。在 for 循环内部,你为每个按钮添加了相同的点击事件处理程序,但是这个事件处理程序使用了循环结束后的 i 值,这时候 i 的值等于 but.length。因此,当任何一个按钮被点击时,都会使用这个相同的 i 值来更新视频的 src 属性。
为了解决这个问题,你可以使用闭包来创建一个独立的作用域,以便保存每个按钮的索引。这样,当按钮被点击时,它所属的索引值将会被正确地传递给事件处理程序。
下面是一个修正后的代码示例:
var buttons = document.querySelectorAll(".button1");
var videos = document.querySelector("video");
for (var i = 0; i < buttons.length; i++) {
(function(index) {
buttons[index].addEventListener("click", function() {
videos.src = "./video/" + index + ".mp4";
});
})(i);
}
在这个修正后的代码中,我们使用了一个立即执行函数(IIFE)来创建一个独立的作用域,并将当前的索引值作为参数传递给这个函数。这样,每个按钮的点击事件处理程序就能够使用其对应的索引值来更新视频的 src 属性了。
希望这能够帮助到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|