非同期効果の紛らわしいチェーンを含むサイトで作業しています。多くの場合、エフェクトは停止する前に数回相互に実行/取り消しを行います。スパゲッティコードをフォローするのに非常に苦労しています。
コードが適用されている一連の効果を追跡できるように、DOM要素が操作されるたびに実行するようにコールバックを設定することは可能ですか?
編集:私は現在、どこにでも数十のconsole.logを追加しており、よりクリーンなアプローチを望んでいました。
非同期効果の紛らわしいチェーンを含むサイトで作業しています。多くの場合、エフェクトは停止する前に数回相互に実行/取り消しを行います。スパゲッティコードをフォローするのに非常に苦労しています。
コードが適用されている一連の効果を追跡できるように、DOM要素が操作されるたびに実行するようにコールバックを設定することは可能ですか?
編集:私は現在、どこにでも数十のconsole.logを追加しており、よりクリーンなアプローチを望んでいました。
なしではありませんsetInterval
。
エフェクトを適用するコードに、何が変更されたかを記録させることもできます。
これは、データ属性を使用して行うことができます。
<div data-state="some state" ...
console.log(targetElement.getAttribute("data-state");
targetElement.setAttribute("data-state","changes");
MakeChanges(targetElement);
次の記事では、あなたのケースで機能する可能性のある2つの手法、MutationObserversとKeyframesを紹介します。
http://www.backalleycoder.com/2012/08/06/css-selector-listeners/
各手法について、記事は関連するライブラリを指しています。
1つのアプローチは、コアjQuery関数にフックして、必要な情報をログに記録することです。これは、私が乗っ取ったいくつかの関数、つまり非表示とアニメーション化に関する非常に大まかなコードです。
var log_for_functions = 'hide animate'.split(' ');
$.each( log_for_functions , function(){
var function_name = this;
var original_function = $.fn[ original_function_name ]; // get a reference to old function name
$.fn[ function_name ] = function () {
var r = original_function.apply(this, arguments);
console.log( function_name + ' called on element ', this );
return r;
}
});
ここで、jqueryを使用して要素を非表示にする$('#test').hide()
と、次の出力が得られます。
hide called on element [context: #test, selector: "#test"]
ニーズに合わせてこれを変更したり、他の機能に接続したりすることもできます。