フロントエンド操作プログラミングを簡素化するための jQuery をいくつか知っていますがvar
、ID セレクターのキャッシングや常に派生するなど、ブラウザーでのパフォーマンスをレベルアップするための「ベスト プラクティス」もいくつか知っています。しかし、このコードには疑問があります。それはもっとうまくできるでしょうか?
プリアンブル: このコードは、(既にキャッシュされている) セレクター内のいくつかのブロックを .hover() によってアニメーション化します。
HTML は次のようなものです。
<div clas="block-link red">(...)</div>
<div clas="block-link yellow">(...)</div>
<div clas="block-link magenta">(...)</div>
<div clas="block-link moradopelusa">(...)</div>
そして、そのうちの1つの中にホバリングするとアニメーション化するjQuery:
var cached_blocks = jQuery(.block-link);
jQuery(cached_blocks).hover(function(){
var this_block = jQuery(this),
this_block_text = jQuery(this_block).children(div.text),
this_block_image = jQuery(this_block).children(div.image),
this_block_link = jQuery(this_block).children(div.link),
this_block_link_icon = jQuery(this_block_link).children(a.icon);
/* Animate in; show everything */
jQuery(this_block_text).animate(..);
jQuery(this_block_image).animate(..);
jQuery(this_block_link).animate(..);
jQuery(this_block_link_icon).animate(..);
}, function() {
var this_block = jQuery(this),
this_block_text = jQuery(this_block).children(div.text),
this_block_image = jQuery(this_block).children(div.image),
this_block_link = jQuery(this_block).children(div.link),
this_block_link_icon = jQuery(this_block_link).children(a.icon);
/* Animate out; put everything where they belong */
jQuery(this_block_text).animate(..);
jQuery(this_block_image).animate(..);
jQuery(this_block_link).animate(..);
jQuery(this_block_link_icon).animate(..);
});
ホバー後に変数を再度宣言しているように見えますが、再度実行しないためのテクニックがわかりません。とにかく、それは魅力のように機能します。
更新:修正コード #1
var cached_blocks = jQuery(.block-link);
jQuery(cached_blocks).on('mouseenter mouseleave', function(){
var this_block = jQuery(this),
this_block_text = jQuery(this_block).children(div.text),
this_block_image = jQuery(this_block).children(div.image),
this_block_link = jQuery(this_block).children(div.link),
this_block_link_icon = jQuery(this_block_link).children(a.icon);
/* Animate in; show everything */
this_block_text.animate(e.eventType(...));
this_block_image.animate(e.eventType(...));
this_block_link.animate(e.eventType(...));
this_block_link_icon.animate(e.eventType(...));
});
注 1: はい、コードの他の部分で cached_blocks を使用しています。