我写了一个jQuery插件来控制同一页面上几个图像的动画。呼叫在开头初始化为:
$(“#image1”)。anims({top:“240px”,left:“300px”});
$(“#image2”)。anims({top:“160px”,left:“430px”});
anims插件基本上根据提供的顶部和左侧参数在mouseover和mouseout(使用悬停)上应用了一堆动画。但是,一旦在Safari中加载了所有内容,将鼠标悬停在#image2上会导致#image1使用为#image2设置的参数进行动画处理。使用为#image1设置的参数,将#image1设置为#image1,就像它应该的那样。在Firefox中,情况正好相反。我想这与它们加载的顺序或其他东西有关。
我可能做错了什么?我在整个插件中使用$(this)进行animate()和其他各种调用。
答案 0 :(得分:1)
我解决了我的问题。在我的插件中,我写道:
img = $(this);
然后使用img变量控制其后的所有内容。将其更改为:
var img = $(this);
解决了我的问题。愚蠢的错误。
答案 1 :(得分:0)
我会仔细检查此页面上的所有要点: http://docs.jquery.com/Plugins/Authoring
- 将文件命名为jquery。[插入插件名称] .js,例如。 jquery.debug.js
- 所有新方法都附加到jQuery.fn对象,所有函数都附加到 jQuery对象。
- 在inside方法中,'this'是对当前jQuery的引用 对象。
- 您附加的任何方法或功能必须在结尾处加上分号(;) - 否则代码会在什么时候破坏 压缩。
- 除非明确指出,否则您的方法必须返回jQuery对象 否则。
- 您应该使用this.each来迭代当前匹配的集合 元素 - 它产生干净和 兼容的代码。
- 总是在你的插件代码中使用jQuery而不是$ - 允许 用户更改jQuery的别名 在一个地方。见下文 解释和更优雅 溶液
例如,您说您使用的是$(this)
,但您应该使用jQuery(this)
。我怀疑这是问题所在,但是你应该密切关注文档,以防万一因为不遵循其中一个而导致一些意外行为。你是否返回了jQuery对象?
除此之外,你真的需要发布anims插件的来源,这样我们就可以尝试看看可能出现的问题。
答案 2 :(得分:0)
当某些操作仅应用于选择/数组的最后一个元素或您获得所选内容的最后一个ID /属性时,您可能还会发现this article解释常见的javascript问题。