javascript - JavaScript 中的 .clientWidth/.width 不适用于 img 标签
问题描述
我想为此制作一个 JavaScript 滑块,我需要获取图像的宽度,以便可以应用translateX
它们,但是当我尝试获取 div 的第一个图像的宽度时,它返回 0。
我很确定错误就在这var size = carouselImg[0].clientWidth;
条线上,但我不知道如何解决它。我将 JavaScript 代码放在 HTML 下方。
var carouselSlide = document.querySelector(".carousel-slide");
var carouselImg = document.querySelectorAll(".carousel-slide img");
let count = 1;
var size = carouselImg[0].clientWidth;
carouselSlide.style.transform = 'translateX(' + (-size * count) + 'px)';
console.log(size);
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
.carousel-container{
width: 900px;
border: 3px solid black;
margin: auto;
}
.carousel-slide{
display: flex;
height: 300px;
}
<div class="carousel-container">
<div class="carousel-slide">
<img src="img4.png" id="lastImg" alt="">
<img src="img1.png" alt="">
<img src="img2.png" alt="">
<img src="img3.png" alt="">
<img src="img4.png" alt="">
<img src="img1.png" id="firstImg" alt="">
</div>
</div>
解决方案
浏览器没有时间加载图像。clientWidth
在图像加载或显示为损坏的图像之前,它将为 0 。此外,即使在浏览器确定图像损坏后,设置alt=""
也会始终使损坏的图像为 0。clientWidth
(在问题的片段中,图像的alt
属性是这样设置的。)这一切都在 Chrome 76 中进行了测试。
下面的代码片段应该可以工作(在 Chrome 76 中测试)。我将您的脚本放入window.onload
并提供了图像alt
属性。
window.onload = function() {
var carouselSlide = document.querySelector(".carousel-slide");
var carouselImg = document.querySelectorAll(".carousel-slide img");
let count = 1;
var size = carouselImg[0].clientWidth;
carouselSlide.style.transform = 'translateX(' + (-size * count) + 'px)';
console.log(size);
}
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
.carousel-container{
width: 900px;
border: 3px solid black;
margin: auto;
}
.carousel-slide{
display: flex;
height: 300px;
}
<div class="carousel-container">
<div class="carousel-slide">
<img src="img4.png" id="lastImg" alt="1">
<img src="img1.png" alt="2">
<img src="img2.png" alt="3">
<img src="img3.png" alt="4">
<img src="img4.png" alt="5">
<img src="img1.png" id="firstImg" alt="6">
</div>
</div>
推荐阅读
- r - 如何用另一行中的单词替换一行中的部分字符串?
- laravel - 如何为 3D 打印机生成仅可打印的链接,而不是模型的可下载链接?
- swift - Xcode 11 Beta 4 Archive swift 错误
- php - 同一页面上的联系表格
- google-apps-script - 取消共享 Google Drive 上的所有文件、文件夹和子文件夹
- python - 如何使用 Python 和 ElementTree 挖掘 XML 文件中的字段数据
- excel - 编辑多个单元格进行超链接,无需一一进行
- c# - C# LINQ 从具有多个字段的列表中选择表
- javascript - 如何检查组件的 props 的组件类型?
- sql-server - 为什么使用 .xlsx (Microsoft Excel 2016/2013/2010) 文件进行数据导入,而不是将 .xlsx 保存为 .xls(Microsoft Excel 97-2003)?