我试图弄清楚如何将变量从我的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/

10-13 21:54