0

同じページ上の複数の画像のアニメーションを制御する jQuery プラグインを作成しました。呼び出しは最初に次のように初期化されます。

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

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

anims プラグインは基本的に、指定された上部と左側のパラメーターに基づいて、マウスオーバーとマウスアウト (ホバーを使用) に一連のアニメーションを適用します。ただし、すべてが Safari に読み込まれると、#image2 にマウスを合わせると、#image2 に設定されたパラメータで #image1 がアニメーション化されます。#image1 にマウスを合わせると、#image1 に設定されたパラメータで、本来どおりに #image1 がアニメーション化されます。Firefox では逆です。ロードした順番か何かに関係していると思います。

私は何を間違えたのでしょうか?プラグイン全体で animate() やその他のさまざまな呼び出しに $(this) を使用しています。

4

3 に答える 3

1

問題を解決しました。私のプラグインの中で、私は書いた:

img = $(これ);

その後、 img 変数を使用してすべてを制御しました。次のように変更します。

var img = $(これ);

私の問題を解決しました。愚かな間違い。

于 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 のエイリアスを 1 か所で変更できます。説明とよりエレガントなソリューションについては、以下を参照してください。

たとえば、 を使用していると言いますが、使用$(this)する必要がありますjQuery(this)。それが問題だとは思いませんが、ドキュメントに従わないことで予期しない動作が発生する場合に備えて、ドキュメントに厳密に従う必要があります。jQueryオブジェクトを返していますか?

それ以外に、anims プラグインのソースを投稿して、何が問題なのかを確認する必要があります。

于 2009-03-06T01:39:54.663 に答える
0

いくつかのアクションが選択/配列の最後の要素にのみ適用される場合、または選択の最後の ID/属性を取得する場合の一般的な JavaScript の問題を説明するこの記事を見つけることもできます。

于 2009-03-26T11:18:51.840 に答える