Today I was making an effect for share-icons using jQuery. The effect is a bit complicated so I tried to think of a way to optimize preformance. I ended up caching the $(this) object into array.
Effect Demo
I uploaded a working example of the effect using the array-cached objects (Hover on the icons to see the effect): http://mahersalam.co.cc/addthis/
HTML:
<div id="share-widget" class="addthis_toolbox">
<a class="addthis_button_favorites" title="أضف للمفضلة"><div>أضف للمفضلة</div></a>
<a class="addthis_button_facebook" title="شارك في فيسبوك"><div>شارك في فيسبوك</div></a>
<a class="addthis_button_twitter" title="شارك في تويتر"><div>شارك في تويتر</div></a>
<a class="addthis_button_email" title="أرسل الصفحة بالإيميل"><div>أرسل الصفحة بالإيميل</div></a>
<a class="addthis_button_compact" title="أضغط هنا لمشاهدة المزيد من خدمات المشاركة"><div>المزيد من الخدمات</div></a>
</div>
Javascript:
// Return jQuery-obj of the share links
var shareLinks = $('#share-widget').find('a').css('opacity', 0.8);
//////////////////////////////////////////
// Only jQuery way
//////////////////////////////////////////
shareLinks.hover(
function () {
$(this).clearQueue()
.siblings()
.stop(true,false).fadeTo('fast', 0.3)
.end()
.stop(true, true).fadeTo('normal', 1);
},
function () {
shareLinks.delay(100).fadeTo('normal', 0.8);
})
//////////////////////////////////////////
// jQuery + Array cache way
//////////////////////////////////////////
// Cache the array
var linksArr = [];
$.each( shareLinks, function (i) {
linksArr.push( $(this) );
linksArr[i].hover( function () {
linksArr[i].clearQueue()
.siblings()
.stop(true,false).fadeTo('fast', 0.3)
.end()
.stop(true, true).fadeTo('normal', 1);
},
function () {
shareLinks.delay(100).fadeTo('normal', 0.8);
})
});
I just want to know if the array cached objects will make the performance faster or is it just not necessary. Also if anyone have a better idea to make this effect, I'm all ears ^^.