我试图弄清楚如何将变量从我的forEach
循环传递到addEventListener('scroll')
方法。
这是一个小提琴:
(function parallax() {
let p = document.querySelectorAll('.js-parallax'),
i = 0,
m
p.forEach(function (el, m) {
i % 2 == 0 ? m = 1 : m = 2
i++
console.log('m: ' + m + ' and i: ' + i)
document.addEventListener('scroll', function(m) {
console.log('And now m: ' + m + ' and i: ' + i)
})
});
})()
body {
min-height: 2000px;
}
<body>
<div class="js-parallax"></div>
<div class="js-parallax"></div>
<div class="js-parallax"></div>
<div class="js-parallax"></div>
<div class="js-parallax"></div>
</body>
这个想法是使用自定义的Parallax脚本,其中
m
是一个乘数,并且对于p
中两个项目中的一个都不相同。我使用第一个
i
,如果它是奇数,则使用m = 1
,甚至是m = 2
。您会在代码段控制台中看到,在循环内但在
m
外部相当公认addEventListener()
。第二个控制台日志输出m = [object Event]
。从这里我有点卡住。有什么线索吗?提前致谢,
一个。
最佳答案
您不能将参数发送到侦听器函数中。
侦听器的参数仅是一个,并且始终是Event对象。
相反,您可以向目标元素添加属性。
像下面
p.forEach(function(el, m) {
i % 2 == 0 ? m = 1 : m = 2
i++
el.multiplier = m;
然后,
您可以在侦听器函数中使用该属性。
document.addEventListener('scroll', function(e) {
console.log(e.target.multiplier);
})
关于javascript - 将变量从ForEach传递到addEventListener,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48585233/