Smooth Div Scrollと呼ばれる jQuery プラグイン (jQuery UI ウィジェット) に取り組んでおり、ページ上のプラグインの個々のインスタンスに固有の間隔への参照を保存する必要があります。私がこのようなものを書くだけなら:
var myInterval = setInterval(関数() { alert("こんにちは!"); }、100);
...変数myIntervalは実際にはwindow.myIntervalになり、ページ上のプラグインのすべてのインスタンスで共有されます。したがって、インスタンスの間隔を設定またはクリアしようとすると、すべてのインスタンスが同じウィンドウ変数を参照しているため、すべてのインスタンスの間隔が設定/クリアされます。
jQuery API を調べると、プラグインの各インスタンスには対応する DOM 要素があるため、一致した要素に関連付けられた任意のデータを格納するために使用されるメソッド.dataが見つかりました。完全!このメソッドを使用して、一致した要素に固有のデータを保存できます。したがって、コードを次のように構成しました (ここで、el は一致した要素への参照です)。
el.data("myInterval", setInterval(関数() { alert("こんにちは!"); }、100));
プラグインの異なるインスタンスが同じ変数 (間隔) を参照しなくなるため、これはある程度機能します。しかし、プラグインのインスタンスが 2 ~ 3 個あるページがあり、各インスタンスに同じ間隔を設定すると、最初のインスタンスだけがその間隔を開始することに気付きました。ただし、間隔のタイマーが小さい場合、一部の要素のみが間隔を開始します。
実際の値を深く掘り下げることはしていませんが、1 つのページにプラグインの 3 つのインスタンスがあり、次のように間隔が 5 に設定されている場合:
el.data("myInterval", setInterval(関数() { alert("こんにちは!"); }、5));
...最初のインスタンスのみが開始されます。20 ~ 30 に増やすと 2 つのインスタンスが起動し、さらにたとえば 50 に増やすと 3 つのインスタンスすべてが起動します。これはとても奇妙ですか?
私の質問は次のとおりです。
(.data を使用して) 間隔への参照を保存することは良い考えですか? もしそうなら、失敗した間隔の原因は何ですか?
これで私を助けてください - 私は困惑しています! 実際のソース コードが必要な場合は、プラグイン ページ (この投稿の上部にあるリンク) をチェックしてください。
/トーマス・カーン