Оптимизация скриптов
Добрый день!
Приведу пример сложности с которой столкнулся: <a href="/"><img src="i.jpg" onload="EffectHoverImageParent(this)" /></a> Стили: a {width:60px;height:90px;display:block;float:left;margin:0;overflow:hidden;text-decoration:none;} a img{position:relative;} Скрипт ниже, делает так, чтобы при наведении на ссылку изображение уменьшается, чтобы вписаться в рамку 60х90. А когда убираем курсор со ссылки то изображение возвращается в исходное состояние (100% размер и отцентровано в блоке, что не влазит, то скрывается). Получается некий эффект зумма при наведении. Вот собственно сам скрипт (не рекомендую особо вникать в этот сумбур кода, т.к. соль вопроса не в этом): function EffectHoverImageParent(el) { var iW=$(el).width(); var iH=$(el).height(); var iWp=$(el).parent().width(); var iHp=$(el).parent().height(); var iL=(iWp-iW)/2; var iT=(iHp-iH)/2; var iHh=iHp; var iWh=iHh*iW/iH; var sP='height'; if(iWh<iWp) { iWh=iWp; iHh=iWh*iH/iW; sP='width'; } var iLh=(iWp-iWh)/2; var iTh=(iHp-iHh)/2; $(el).css('left',iL+'px').css('top',iT+'px').css('opacity','0.8'); if(sP='height') { var oP={'opacity':'0.8','height':iH+'px','top':iT+'px','left':iL+'px'}; var oPh={'opacity':'1.0','height':iHh+'px','top':iTh+'px','left':iLh+'px'}; } else { var oP={'opacity':'0.8','width':iW+'px','top':iT+'px','left':iL+'px'}; var oPh={'opacity':'1.0','width':iWh+'px','top':iTh+'px','left':iLh+'px'}; } $(el).hover( function(){ var $this = $(this); $this.stop().animate(oPh,150); }, function(){ var $this = $(this); $this.stop().animate(oP,150); } ); } Сайт который использует данный скрипт построен на AJAX и страницы подгружаются динамически. И чем больше таких картинок отобразилось на экране, тем больше начинает тормозить браузер. Следовательно скрипт написан далеко не профессионально. Значит мне нужно понять свои ошибки и научиться писать правильно. Теория о том, где ошибка Думаю я неэффективно использую память ПК. На все подгруженные картинки навешивается свойство $(el).hover(...,...);, которое видимо хранится в оперативе и т.п. Видимо когда таких картинок пару сотен, то оператива не слабо заполняется, отсюда идут глюки... Нужно отказаться от hover и использовать стандартные способы навешивания функций на события? Подскажите, в ту сторону ли я копаю, или я допустил совершенно другие ошибки? Может быть есть некий принцип написания кода, так сказать некий образец, чтобы не допускать утечек памяти ... ткните носом, что мне нужно подучить ... Спасибо! |
greatilya,
Вообще т для картинок лучше использовать готовые галлереи, подгружающих динамически полномасштабную картинку, одна из неплохих отечественных => Iload => http://studioad.ru/index/0-8 |
Цитата:
Цитата:
|
Deff,
я не старался изобрести lightbox, а части моего коды были подсмотрены из готового зуммера, но его функционал несколько отличался от моих задач. melky, понятно, спасибо! а вот меня тут только всё терзает вопрос, например у нас есть такое (пример взят по предложенной вами ссылке): <div id="content"> <ul id="menu"> <li><a class="button" href="/php">PHP</a></li> <li><a class="button" href="/html">HTML</a></li> <li><a class="button" href="/javascript">JavaScript</a></li> <li><a class="button" href="/flash">Flash</a></li> </ul> </div> <script type="text/javascript"> document.getElementById('menu').onclick = function(e) { var target = e && e.target || event.srcElement; // целевой элемент if (target.tagName != 'A') return; // если не ссылка - не интересует! var href = target.getAttribute('href'); alert(href); // обработать клик по элементу return false; // отменить переход по ссылке } function nextPage() { document.getElementById("content").innerHTML="новый контент"; } </script> Тут у нас событие было делегировано при загрузке страницы. А если мы потом запускаем nextPage(), то всё что было делегировано на menu очищается? или так и остается висеть в памяти? |
Цитата:
|
Часовой пояс GMT +3, время: 02:08. |