javascript - 使用 setInterval 制作图像轮播
问题描述
我正在使用 setInterval 和 if 语句制作图像轮播,并且图像显示正常,但是当轮播再次启动时,通常会在页面找不到您的图像时显示一个图标。
<img src="images/img1.jpg" id="images">
<script>
var start = 1;
var timer = setInterval(carousel, 1000);
function carousel(){
var image_data;
if (start==1) {
image_data="images/img1.jpg";
}else if (start==2) {
image_data="images/img2.jpg";
}else if (start==3) {
image_data="images/img3.jpg";
}else if (start==4) {
image_data="images/img4.jpg";
}else if (start==5) {
image_data="images/img5.jpg";
}else {
start = 0;
}
document.getElementById('images').src=""+ image_data;
start++;
}
</script>
解决方案
当您将 start 设置为 0 时,对于轮播的该迭代,您将图像的源设置为未定义,因为您尚未为图像源分配值。
相反,考虑使用模数来选择要显示的图片。
// initially, start = 0
if (start % numImages === 0) {
// display image 1
}
else if (start % numImages === 1) {
// display image 2
}
或者:您可以调用您的方法并在将 start 设置为 0 时返回:
start = 1;
carousel();
return;
但是,对于更易于维护的解决方案,您可能需要这样做:
const images = [ 'images/image1.jpg', ... ];
const currImage = images[ start % images.length ];
document.getElementById('images').src = currImage;
start++;
// This part is optional, it's unlikely a user would be on the page long enough
// for start to overflow
if (start === images.length) {
start = 0;
}
那将是您的整个轮播功能。
这样,您以后可以轻松地添加更多图像,而无需过多地修改您的功能。您所要做的就是列出您在数组中显示的文件,然后一切就绪。
推荐阅读
- synchronization - 在 MPI 中模拟全局变量
- reactjs - React CSS Transition not working and classes never getting applied
- c# - c#中的字符串生成
- interface - 带有接口样板的 Kotlin 数据类
- git - 恢复 Git 分支以在新代码之前针对原始分支发出干净的拉取请求
- python - 当本地 Flask 应用程序从 CURL 命令返回 500 时未获取调试/日志
- javascript - 如果我不使用 `reduce` 的初始值,为什么会得到“`TypeError`: `flattenDeep(...)` is not iterable”?
- ruby - Capybara:cookie 是否保存在抓取会话中?
- java - 扫描多个 maven pom 以获取不同的依赖版本
- swift - Mac OS:在查找器中显示名称、大小等文件的自定义列。