gpt4 book ai didi

javascript - 将 javascript 间隔存储在 jQuery element.data 对象中?

转载 作者:行者123 更新时间:2023-12-01 01:39:26 25 4
gpt4 key购买 nike

我正在开发一个名为 Smooth Div Scroll 的 jQuery 插件(一个 jQuery UI 小部件)。我需要存储对页面上插件的每个单独实例特定的间隔的引用。如果我只是写这样的东西:

var myInterval = setInterval(function() {      alert("Hi!");  }, 100);

...变量 myInterval 实际上是 window.myInterval 并且它将被页面上插件的所有实例共享。因此,当我尝试设置或清除实例的间隔时,所有实例的间隔都将被设置/清除,因为它们都引用相同的窗口变量。

通过 jQuery API,我找到了方法 .data它用于存储与匹配元素关联的任意数据,并且因为插件的每个实例都有一个相应的 DOM 元素。完美的!使用此方法,我可以存储特定于匹配元素的数据。所以我的代码结构如下(其中 el 是对匹配元素的引用):

el.data("myInterval", setInterval(function() {      alert("Hi!");  }, 100));

在某种程度上,这是有效的,因为插件的不同实例不再引用相同的变量(间隔)。但我注意到,如果我的页面有 2-3 个插件实例,并且我为每个实例设置了相同的间隔,则只有第一个实例开始其间隔。但如果间隔计时器很小,则只有部分元素开始间隔。

我没有对实际值进行任何深入挖掘,但如果我在一页上有该插件的三个实例并且间隔设置为 5,如下所示:

el.data("myInterval", setInterval(function() {      alert("Hi!");  }, 5));

...只有第一个实例才会启动。如果我将其增加到 20-30,其中两个实例将启动,如果我进一步将其增加到 50,则所有三个实例都会启动。这有这么奇怪吗?!

我的问题是:

存储对间隔的引用(使用 .data)是个好主意吗?如果是这样,间隔失败的原因可能是什么?

请帮我解决这个问题 - 我很难过!如果您想要实际的源代码,请查看插件页面(链接位于本文顶部)。

/托马斯·卡恩

最佳答案

setInterval 和 setTimeout 的返回值只是内部使用的整数来引用超时,因此使用 .data 存储整数不是问题。

关于javascript - 将 javascript 间隔存储在 jQuery element.data 对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3399419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com