【问题标题】:Can Javascript create multiple functions based on other multiple functions by itself?Javascript 可以自己创建基于其他多个函数的多个函数吗?
【发布时间】:2018-01-11 23:08:35
【问题描述】:

我有一个大型代码,在我的 HTML 中的各种对象上有多个事件侦听器,它们都是“点击”侦听器。现在我意识到我想要所有这些对象上的另一个事件监听器。除了点击侦听器之外,我还想要 mouseenter 侦听器。我已经把它全部写出来了,但我认为应该有一种更简单的方法来做到这一点。 这可能有点模糊,但这基本上是我现在所拥有的:

object1.addEventListener("click", function(){
    if(condition1){
        function1();
    }
});

object2.addEventListener("click", function(){
    if(condition2){
        function2();
    }
});

etcetera etcetera

我想保留这些功能,并使用“mouseenter”侦听器创建新功能。如果每个对象都满足尊重的条件,这些新功能都会做同样的事情。所以我想要这个:

object1.addEventListener("click", function(){
    if(condition1){
        function1();
    }
});

object1.addEventListener("mouseenter", function(){
    if(condition1){
        myAnimation();
    }
});

object2.addEventListener("click", function(){
    if(condition2){
        function2();
    }
});

object2.addEventListener("mouseenter", function(){
    if(condition2){
        myAnimation();
    }
});

etcetera etcetera

就像我说的,我可以编写所有代码,但有超过 100 个函数。如果 Javascript 有办法用函数生成它,那就太棒了。

编辑:

我正在做的是构建故事情节(在带有 Aframe 的 VR 中)。您可以点击很多元素,但只有在故事允许的情况下,才能解释听众的状况。我现在想要做的(我意识到为时已晚)是一个带有光标的动画,只要光标悬停在正确单击的元素上,因此用户无需单击所有元素就知道要单击什么在房间里。因此,所有“mouseenter”侦听器都需要与同一元素的“click”侦听器相同的特定条件。听起来仍然很模糊,但我不知道如何进一步解释。

【问题讨论】:

  • arrayOfObjects.forEach(o => o.addEventListener('mouseenter', function () ... )) – 每当你对多件事情做同样的事情时,你可能需要某种形式的循环。

标签: javascript


【解决方案1】:

如果您有选择它们的方法(css 选择器),您可以遍历您的“html 对象”。以下示例假设您要应用侦听器的每个对象都有一个“对象”类

var objects = document.querySelectorAll('.object');
[].forEach.call(objects, function(object) {
  // do whatever
  object.addEventListener("click", ...
  object.addEventListener("mouseenter", ...
});

如果你想要的话,你可以根据“对象”的属性来改变点击函数中发生的事情。

如果您不/不能使用选择器,您可能有其他方法来编译对象数组,您可以对其进行迭代并有条件地应用事件侦听器。

【讨论】:

  • 所有不同的对象都需要一个特定的条件,匹配的'click'事件处理程序具有相同的条件。在你的解决方案中,我猜这是不可能的。我编辑了我的问题,希望现在更清楚了。
  • 一点都不清楚@RobbertOl。我绝对可以确定我可以帮助您回答您的问题,但是您没有提供足够的详细信息。 Javascript 可以绝对轻松地根据您想要的任何条件,为您想要的任何数量的节点动态生成多个 eventListener 函数。但你必须能够指定你想要的
猜你喜欢
  • 2021-12-17
  • 1970-01-01
  • 2022-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多