Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以在-gt;a中的事件侦听器->;对于循环,有参数吗?_Javascript_Html_Css - Fatal编程技术网

Javascript 是否可以在-gt;a中的事件侦听器->;对于循环,有参数吗?

Javascript 是否可以在-gt;a中的事件侦听器->;对于循环,有参数吗?,javascript,html,css,Javascript,Html,Css,我的意思是,我有一个功能,可以设置各种LI的背景和背景位置来制作一个社交媒体精灵,现在我想给它添加一个悬停事件侦听器,悬停时将背景图像从其原始位置向上移动-29px 为此,我使用了一个变量,该变量是在for循环的不同实例中声明和设置的(在本例中,它的var“k”)k以=开始,然后每次循环迭代都会向它添加-28 我希望for循环中的事件侦听器中的函数使用此变量来计算其悬停背景位置,当我添加参数时,它只会在for循环运行时调用自己(例如,如果我让函数记录一些东西),我能够让它从其上一个循环中记录va

我的意思是,我有一个功能,可以设置各种LI的背景和背景位置来制作一个社交媒体精灵,现在我想给它添加一个悬停事件侦听器,悬停时将背景图像从其原始位置向上移动-29px

为此,我使用了一个变量,该变量是在for循环的不同实例中声明和设置的(在本例中,它的var“k”)k以=开始,然后每次循环迭代都会向它添加-28

我希望for循环中的事件侦听器中的函数使用此变量来计算其悬停背景位置,当我添加参数时,它只会在for循环运行时调用自己(例如,如果我让函数记录一些东西),我能够让它从其上一个循环中记录var I,但在我希望它运行时它不会运行

这里我留下一个片段

函数sprite(){
var c=document.getElementById(“社交”).children;
var k=0;
var=”;
对于(i=0;i
.smedia{
背景色:;
高度:20px;
位置:绝对位置;
}
.smedia>ul{
位置:相对位置;
显示:内联块;
背景色:;
左:836px;
高度:28px;
右边距:8px;
边缘顶部:8px;
}
.smedia>ul li{
背景色:黑色;
显示:内联块;
高度:28px;
宽度:28px;
}
斯梅迪亚先生{
显示:内联块;
颜色:黑色;
文字装饰:无;
高度:28px;
宽度:28px;
}


简单回答是。您需要一个创建整个函数并返回该函数的函数,而不是计算函数语句并返回计算结果

比如说。如果我定下底线

c[i].addEventListener(“mouseenter”,spriteHover)

c[i].addEventListener(“mouseenter”,spriteHover(c[i],k))

如果您试图警告spriteHover函数中的参数,这看起来像是正确地传递了参数。但它不起作用的原因是,该语句不是将函数指定为事件侦听器,而是指定在for循环中调用时返回的spriteHover函数的结果(将括号放在函数名后面实际上使javascript调用该函数)

因此,为了传递参数,但将整个函数返回给事件侦听器语句,我们创建了另一个函数,它实际上将函数作为一个整体返回给我们。e、 g

// Handler that will return a function to the addeventlistener
  function createHoverHandler(param1, param2 ....) {
     return function() {
         spriteHover(param1, param2 ....);
     }
  }
下面是一个使用代码和creator函数的示例。请注意,我已将mouseenter更改为mouseover,并在mouseout中添加了鼠标,以实现悬停效果。我们必须定义鼠标何时进入元素以及何时退出元素的情况

示例代码:


希望这有助于理解如何做到这一点。

你能分享你的社交图标吗?在这里,请确保你去掉黑色背景(我添加的背景只是为了让你能看到李的),这是我现在知道如何分享它们的唯一方法。问题。为什么不使用css:hover-selector而不使用JS解决方案?并不是说这在css中不会更好,而是对我自己来说更具挑战性,但是我遇到了参数/参数问题,知道这个问题的答案在将来可能会很有用。我的原始版本是用css完成的,带有过渡,看起来很漂亮=)哇,这非常有用,谢谢你的答案,并花时间编辑它。如果这有帮助,请你投票并检查答案。谢谢。当然,我试过几次投赞成票,但我需要更多的代表才能投赞成票(忘记了支票,现在拿到了)。