在jquery中将变量从一个函数专门传递给另一个函数而不使其成为全局变量

时间:2012-01-19 15:44:14

标签: javascript jquery

我正在寻找jquery脚本中的一些帮助我正在创建,生病并尝试用简单的英语将其分解。

该脚本在通过<ul></ul>元素使用的网格背面工作,每个<li></li>形成网格的各个组件。

如果将鼠标悬停在list-item上,jquery脚本将扩展该元素以通过动画占据其父级的整个维度。它一直停留在那里,直到光标移开并且应该将自身调整回原来的位置并且它在那里我遇到了我的问题(看起来扩展函数中的变量没有正确地传递到收缩函数中)。

希望这有助于简要理解,如果没有,请查看jsfiddle示例

http://jsfiddle.net/EzYeH/3/

提前感谢任何能解码我的谣言和帮助的人。

2 个答案:

答案 0 :(得分:1)

我相信我理解你要做的事情,这是一个可能的解决方案:http://jsfiddle.net/EzYeH/4/

要回答您的基本问题,将数据从起始函数“传递”到结束函数的一种方法是将其作为data-存储在元素本身上:

$this = $(this);
var position = $this.position();
$this.data('leftPos', position.left + 'px');
$this.data('topPos', position.top + 'px');

答案 1 :(得分:1)

首先,您没有正确实现回调函数expand()collapse()。根据{{​​3}},这些函数的参数与mouseover相同,这意味着有一个参数,它是事件对象,this设置为您的对象。这意味着它无法正常工作,因为leftPos和topPos不是这些函数的参数。为了使其工作,您需要在函数中计算所需的leftPos和topPos - 它们不会传递给它。

如果您需要将原始位置存储在除全局变量之外的某个位置(我不确定您确实需要这样做),您可以使用jQuery的.data()方法将其存储在动画对象本身上。 / p>

为了帮助您使用新版本的代码,我需要了解您希望每次进出特定对象的动画的位置。我没有完全按照你想要的开始/结束点所以我不确定要推荐哪些代码来正确计算它。