网页相册点击显示更多图片后logo变动、图片不加载如何修复
问题根源
- logo被篡改原因:你在
previewFive函数里用document.getElementsByTagName("img")[0]获取相册第一张图,但这个API会选中页面所有img标签的第一个,也就是你的页面logo,直接修改它的src自然会把logo改掉。 - 新增图片加载失败+显示异常:
populateFigures函数的5图模式分支有两个低级错误:- 图片路径拼写错误:把
images/写成了image/,少了末尾的s导致资源请求404 - 索引写死:循环里每次都取
getElementsByClassName("about")[1],相当于5次循环都在修改同一张图,根本没给另外4张图赋值src
- 图片路径拼写错误:把
修复步骤
1. 修改previewFive函数,只选中相册内的img
把原来直接取全局img的两行,改成只选class为about的相册专属图片:
// 替换原有错误代码 // document.getElementsByTagName("img")[0].src = "images/about_0" + photoOrder[0] + "sm.jpg"; // document.getElementsByTagName("img")[4].src = "images/about_0" + photoOrder[4] + "sm.jpg"; // 修改后代码 const albumImgs = document.getElementsByClassName("about"); albumImgs[0].src = "images/about_0" + photoOrder[0] + "sm.jpg"; albumImgs[4].src = "images/about_0" + photoOrder[4] + "sm.jpg";
同时要修改createEventListeners里获取主图的代码,避免误选到logo:
// 替换原有错误代码 // var mainFig = document.getElementsByTagName("img")[1]; // 修改后代码 var mainFig = document.getElementsByClassName("about")[1];
2. 修复populateFigures函数的5图分支逻辑
} else { for (var i = 0; i < 5; i++) { // 修复路径拼写错误 filename = "images/about_0" + photoOrder[i] + "sm.jpg"; // 修复索引写死问题,用循环变量i取对应位置的图片 currentFig = document.getElementsByClassName("about")[i]; currentFig.src = filename; } }
可选优化
建议给相册外层容器加专属id,比如<article id="album-wrap">,后续选择元素都限定在这个容器内,不会误选到页面其他区域的元素,避免后续再踩同类的选择器坑。
内容的提问来源于stack exchange,提问作者L3ly
相关产品推荐
相关产品推荐

