javascript - addEventListener 只工作一次
问题描述
我有一个事件监听器。在里面,我循环浏览 3 张图片并对其应用样式translateX(350px)
。它工作得很好,但它只工作一次。
我单击一次右键,图像向右移动,但如果我再次单击右键,图像不会移动。如何使事件侦听器多次触发以使图像多次移动?Stack Overflow 上有一个类似的问题,但我无法理解。
HTML:
<div id='container'>
<div class='image-container'>
<img class='move' src='images/news1.jpg'>
<img class='move' src='images/news2.jpg'>
<img class='move' src='images/news3.jpg'>
</div>
</div>
<a href="#" id='arrow-left'>left</a>
<a href="#" id='arrow-right'>right</a>
JavaScript:
let imageContainer = document.querySelector('.image-container');
let arrowLeft = document.getElementById('arrow-left');
let arrowRight = document.getElementById('arrow-right');
let images = document.getElementsByClassName('move');
arrowRight.addEventListener('click', function() {
for (i = 0; i < images.length; i++) {
images[i].style.transition = "0.5s";
images[i].style.transform = 'translateX(350px)';
}
});
解决方案
您可能需要为您的转换使用累加器,以便他们记住之前的翻译状态,例如,第一次为 350,第二次为 700,... 等等:
试试这个:
var accum = 350;
let imageContainer = document.querySelector('.image-container');
let arrowLeft = document.getElementById('arrow-left');
let arrowRight = document.getElementById('arrow-right');
let images = document.getElementsByClassName('move');
arrowRight.addEventListener('click' , function() {
for (let i = 0 ; i < images.length; i++) {
images[i].style.transition = "0.5s";
images[i].style.transform = 'translateX(' + accum + 'px)';
}
accum+= 350;
});
<div id='container'>
<div class='image-container'>
<img class='move' src='images/news1.jpg'>
<img class='move' src='images/news2.jpg'>
<img class='move' src='images/news3.jpg'>
</div>
</div>
<a href="#" id='arrow-left'>left</a>
<a href="#" id='arrow-right'>right</a>
推荐阅读
- activemq - Red Hat AMQ 6.3 相互认证将用户映射到证书
- python - 创建一个列出所有先前整数之和的生成器函数
- r - 调整ggplot代码以更改所有文本颜色的快捷方式-R
- d3.js - d3.scaleLinear() 导致 TypeError: r is not a function
- r - 列表列表的一个向量的平均值
- swift - 在 macOS 上运行 SwiftUI 应用程序,但该平台被识别为 iOS。为什么?
- google-api - Google Places API 提取返回状态:200 但没有数据
- python-3.x - 从UMAP连接计算邻接矩阵?
- javascript - 重建行程深度优先搜索递归错误
- asp.net-core-mvc - 如何根据 ASP.NET Core 中的先前选择更改选择选项