Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Оптимизация Js (https://javascript.ru/forum/jquery/3288-optimizaciya-js.html)

Garovsky 03.04.2009 19:32

Оптимизация Js
 
Всем привет.

Пытаюсь объединить одинаковые js-функции, отличающиеся только классами, но пока ничего не выходит.
Может кто подскажет, поставит на путь истинный :)

$(function() {
		$(".scrollingHotSpotLeft").fadeTo("fast", .7);
		$(".scrollingHotSpotLeft").hover(function(){
			$(this).fadeTo("normal", 1);
		},function(){
	   		$(this).fadeTo("fast", .7);
		});
	});
	$(function() {
		$(".scrollingHotSpotRight").fadeTo("fast", .7);
		$(".scrollingHotSpotRight").hover(function(){
			$(this).fadeTo("normal", 1);
		},function(){
	   		$(this).fadeTo("fast", .7);
		});
	});

ast-ross 03.04.2009 20:26

а разве не сказывается на скорости постоянное обращение к DOM, я сам еще новичок, но кажется можно сделать что то типа:
$(function() {
	var fadeThis=$(this);
	var spotLeft=$(".scrollingHotSpotLeft");
	var spotRight=$(".scrollingHotSpotRight");
	spotLeft.fadeTo("fast", .7);
	spotLeft.fadeTo("fast", .7);
	spotLeft.hover(
		function(){fadeThis.fadeTo("normal", 1);}
		function(){fadeThis.fadeTo("fast", .7);}
		);
	spotRight.hover(
		function(){fadeThis.fadeTo("normal", 1);}
		function(){fadeThis.fadeTo("fast", .7);}
		);
	});

Dmitry A. Soshnikov 03.04.2009 20:31

Garovsky, создайте одну функцию, которая в качестве параметра будет принимать имя класса, и оперируйте хоть с сотней классов.

Garovsky 03.04.2009 20:50

Цитата:

Сообщение от ast-ross
но кажется можно сделать что то типа:

реально ли сделать еще меньше кода? через запятую перечислить например :)
$(function() {
        $(".scrollingHotSpotLeft, .scrollingHotSpotRight").fadeTo("fast", .7);
        $("$").hover(function(){
            $(this).fadeTo("normal", 1);
        },function(){
               $(this).fadeTo("fast", .7);
        });
    });


Цитата:

Сообщение от Dmitry A. Soshnikov
создайте одну функцию, которая в качестве параметра будет принимать имя класса

думал об этом, но в таком случае мне придется добавить для пятнадцати < li > пятнадцать одинаковых классов, а это не очень хорошо.
$(function() {
		$("#nav li a").fadeTo("fast", 1);
		$("#nav li a").hover(function(){
			$(this).fadeTo("fast", .7);
		},function(){
	   		$(this).fadeTo("fast", 1);
		});
	});


Не теряю надежды найти более компактное решение и жду новых комментариев :)

x-yuri 03.04.2009 21:58

расскажи, что у тебя за список, и что ты с ним сделать хочешь?

Garovsky 03.04.2009 23:54

навигация (расположена на темном фоне), каждый пункт при наведении плавно затемняется.

x-yuri 05.04.2009 00:51

для этого нужны 2 обработчика (mouseover, mouseout)
если же у тебя есть не одно меню, выполненное в разном стиле, то тебе уже сказали
Цитата:

Garovsky, создайте одну функцию, которая в качестве параметра будет принимать имя класса, и оперируйте хоть с сотней классов
***
хотя это даже не надо, ты ж говоришь у тебя при наведении только fadeIn/fadeOut

Garovsky 05.04.2009 17:13

у меня несколько разных классов с одинаковым fadeIn/Out эффектом.

hogart 06.04.2009 11:25

Garovsky, сделайте класс, который будет отчечать только за fadeIn/fadeOut, и добавьте его всем элементам, которые должны демонстрировать такое поведение.


Часовой пояс GMT +3, время: 11:43.