1

私は社内で使用するための小さなjavascriptフレームワークを開発しています。場合によっては、フレームワークが基本的なjQuery機能を上書きして、内部ロジックを処理したり、ブラウザーのバグなどを修正したりします。開発者がjQueryを以前と同じように使い続けることができるように、これらのケースを完全に透過的にしたいと思います。

私は頭をうまく透明な方法でやることができないように見えるという問題に遭遇しました-少なくとも私はそれを行うための良い方法を思い付くことができません-それで私はあなたに目を向けます:)。

私がやりたいのは、何かが「見えるようになる」たびに特定のコードを実行できるように、jQueryを上書きすることです。たとえば、開発者がshow()メソッドを実行する場合、要素が表示された後にコードを実行したいと思います。実際、開発者が「要素を表示する」方法(show()、css()、animate()など)に関係なく、コードを実行したい

たとえば、show()には、そのために使用できる「コールバック」パラメーターがあることを知っています。しかし、要点は; これは、開発者にとって完全に透過的である必要があります。彼は、このコードが「下で実行されている」ことを知る必要はありません。

私の上書きはすべてクロージャを使用して行われるので、元のメソッドへの参照を保存し、自分のことを実行して元のメソッドを実行できます。これは、showメソッドを使用してこれを行う方法の例です。

(function ($) {
  var originalShowMethod = jQuery.fn.show;
  jQuery.fn.show = function (speed, easing, callback) {
    // Do stuff before
    var theReturn = jQuery(originalShowMethod.call(this, speed, easing, callback));
    // Do stuff after
    return theReturn;
  };
})(jQuery);

私の最初のアプローチは、単にこの方法でそれを行うことでした(「// Do stuffafter」でコードを実行する)。これは、速度パラメーターを渡す場合(内部でsetTimeoutやsetIntervalなどを使用しているため)、または他の「要素の表示」メソッドのいずれかを使用している場合を除いて、うまく機能します。

「要素の表示」に関係するすべてのメソッドが私のコードの影響を受けるように上書きできるマスター「要素の表示」メソッドはありますか?または、すべての「表示方法」を上書きする必要がありますか?誰かが私がこのタスクを共犯する方法の例を与えることができますか?それがそれを行う方法である場合、私が上書きする必要があるもの。

前もって感謝します。

4

1 に答える 1

0

.is() や :visible セレクターのようなものが必要だと思います。setInterval を使用してこのような関数を実行したいようです。

関数checkElementVis(){

if($(".element").is(":visible")){
    alert("is visible");
} else {
alert("not visible");
}

}

于 2011-05-04T18:52:12.180 に答える