2009-03-06 40 views
0

我編寫了一個jQuery插件來控制同一頁上的多個圖像的動畫。這些呼叫初始化爲:僅適用於上次聲明的元素的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

如果您編輯或鏈接到插件的代碼,它可能會有所幫助。 – 2009-03-06 01:36:38

回答

0

我會仔細檢查所有的要點在此頁面上:.js文件 http://docs.jquery.com/Plugins/Authoring

  • 名稱文件的jQuery [插件名稱],如: jquery.debug.js
  • 所有新方法都附加到jQuery.fn對象,所有功能都以 jQuery對象。
  • 裏面的方法,'this'是對當前jQuery 對象的引用。
  • 您附加的任何方法或函數在末尾必須帶有分號(;) - 否則當壓縮 時代碼將中斷。
  • 您的方法必須返回jQuery對象,除非明確指出 否則。
  • 您應該使用this.each遍歷當前匹配的 元素 - 它以這種方式生成乾淨和 兼容代碼。
  • 在插件代碼中始終使用jQuery而不是$,這允許 用戶在一個位置更改jQuery 的別名。請參閱下面的 解釋和更優雅的 解決方案。

例如,你說你正在使用$(this),但你應該使用jQuery(this)。我懷疑這是什麼問題,但是你應該密切關注這些文檔,以防萬一有些意外行爲是由於不遵守其中一個而導致的。你是否返回jQuery對象?

除此之外,你真的需要發佈你的anims插件的來源,所以我們可以嘗試看看有什麼可能是錯的。

1

我解決了我的問題。在我的插件裏面,我寫道:

img = $(this);

然後使用img變量來控制其後的所有內容。將其更改爲:

var img = $(this);

解決了我的問題。愚蠢的錯誤。

+0

使用JSLint(www.jslint.com)來檢查你的代碼,它會警告這種事情。 (將$和jQuery放入全局並檢查假設瀏覽器。) – svinto 2009-03-06 02:22:18

0

您可能還會發現this article,它解釋了當某些操作僅應用於選擇/數組的最後一個元素或您獲得了所選內容的最後一個ID /屬性時常見的JavaScript問題。