0

我编写了一个 jQuery 插件来控制同一页面上多个图像的动画。调用在开始时初始化为:

$("#image1").anims({top: "240px", left: "300px"});

$("#image2").anims({top: "160px", left: "430px"});

动画插件基本上根据提供的顶部和左侧参数在鼠标悬停和鼠标悬停(使用悬停)上应用一堆动画。但是,一旦在 Safari 中加载了所有内容,将鼠标悬停在 #image2 上会导致 #image1 使用为 #image2 设置的参数进行动画处理。将鼠标悬停在#image1 上会按照应为#image1 设置的参数为#image1 设置动画。在 Firefox 中,情况正好相反。我想这与他们加载的顺序有关。

我可能做错了什么?我在整个插件中使用 $(this) 进行 animate() 和其他各种调用。

4

3 回答 3

1

我解决了我的问题。在我的插件中,我写道:

img = $(这个);

然后使用 img 变量来控制之后的一切。将其更改为:

var img = $(this);

解决了我的问题。愚蠢的错误。

于 2009-03-06T02:13:33.067 回答
0

我会仔细检查此页面上的所有要点:http: //docs.jquery.com/Plugins/Authoring

  • 将您的文件命名为 jquery.[插入插件名称].js,例如。jquery.debug.js
  • 所有新方法都附加到 jQuery.fn 对象,所有函数都附加到 jQuery 对象。
  • 在方法内部,'this' 是对当前 jQuery 对象的引用。
  • 您附加的任何方法或函数都必须在末尾有一个分号 (;) - 否则压缩时代码会中断。
  • 您的方法必须返回 jQuery 对象,除非另有明确说明。
  • 您应该使用 this.each 来迭代当前匹配的元素集 - 它以这种方式生成干净且兼容的代码。
  • 始终在插件代码中使用 jQuery 而不是 $ - 这允许用户在一个地方更改 jQuery 的别名。请参阅下面的解释和更优雅的解决方案。

例如,您说您正在使用$(this),但您应该使用jQuery(this). 我怀疑那是问题所在,但您应该密切关注文档,以防因不遵循其中之一而导致一些意外行为。你要返回 jQuery 对象吗?

除此之外,您确实需要发布您的动画插件的来源,以便我们可以尝试查看可能出现的问题。

于 2009-03-06T01:39:54.663 回答
0

当某些操作仅应用于选择/数组的最后一个元素或您获得选择的最后一个 ID/属性时,您可能还会发现这篇文章解释了常见的 javascript 问题。

于 2009-03-26T11:18:51.840 回答