javascript - 纯js。获取元素的宽度并在滚动中使用它

标签 javascript html

目前我无法理解可能非常简单的事情。

为了获得良好的 View ,下面是 html。

它有一个以 #sliderScroll 作为 ID 的 slider ,具有固定宽度和溢出滚动。

其中有多个 div.text-image-item,它们是宽度大小根据用户屏幕大小而变化的 block 。

<div id="sliderScroll" class="slider">
   <div class="text-image-item"> Content block 1 </div>
   <div class="text-image-item"> Content block 2 </div>
   <div class="text-image-item"> Content block 3 </div>
   <div class="text-image-item"> Content block 4 </div>
</div>

通过按钮,我希望用户能够水平滚动。 我想要滚动的像素数量来表示 block 的宽度 (.text-image-item),它会根据用户的屏幕尺寸而波动。

我正在尝试获取此 .text-image-item block 的宽度并将其用于 scrollLeft 函数。

到目前为止我得到了什么:

const buttonLeft = document.getElementById('scrollLeft');

buttonLeft.onclick = function () {
    var itemWidth = document.getElementsByClassName('text-image-item').offsetWidth;
    console.log(itemWidth);
    document.getElementById('sliderScroll').scrollLeft -= itemWidth;
};

如果我为 var itemWidth 设置一个固定的数字,它看起来就像工作。 但我想用 .text-image-item 类获取 div 的宽度。

我添加了 console.log 以查看 var 是否输出正确的数字,但它只返回 undefined

有人能指出我正确的方向吗?我在这里挠头,因为我不太确定哪里出了问题。

最佳答案

document.getElementsByClassName('text-image-item') 返回一个 NodeList,在本例中包含 4 个节点。 NodeList 没有 offsetWidth。只有个别元素有宽度。

您需要选择其中一个节点并改用其宽度。您可以通过选择一个有效的索引来做到这一点:

document.getElementsByClassName('text-image-item')[0].offsetWidth

关于NodeList的更多信息,查看MDN

关于javascript - 纯js。获取元素的宽度并在滚动中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55634378/

相关文章:

jquery - 在移动版网页上根据宽度大小调整菜单 Logo 的大小

html - 如何使此文本在导航栏中居中

javascript - 查询字符串参数的约定

javascript - jquery 单击事件不会在 iPhone 中的按钮元素上触发

php - CodeIgniter Controller 总是调用索引函数

javascript - lodash _.findIndex 通过多个值

javascript - 如何链接 CSS 和 Jade?

javascript - 为什么单选按钮中需要不规则的消息(jquery 验证)?

javascript - jquery html 中没有表单的对象 HTMLInputElement

javascript - 原型(prototype)方法能做什么 es6 类不能做什么?