Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Последовательность выполнения функций (https://javascript.ru/forum/jquery/39230-posledovatelnost-vypolneniya-funkcijj.html)

Алек 21.06.2013 17:17

Последовательность выполнения функций
 
Здравствуйте!

У меня есть 4 функции, они выполняются одновременно, но мне нужно сделать так чтоб они выполнялись поочерёдно.
Подскажите пожалуйста как это мне сделать, а то я всё время чё-то на этом спотыкаюсь.

Вот функции:

function one_img(){	
	$('#img_1').fadeOut(2000, function(){
		$(this).attr('width', 100).attr('height', 62).show(1500, function(){
			$(this).effect('pulsate', 1500, function(){
				$(this).attr('width', 199).attr('height', 125);
			})
		})		
	});
	}

	function two_img(){	
	$('#img_2').fadeOut(2000, function(){
		$(this).attr('width', 100).attr('height', 62).show(1500, function(){
			$(this).effect('pulsate', 1500, function(){
				$(this).attr('width', 199).attr('height', 125);
			})
		})		
	});
	}	

	function three_img(){	
	$('#img_3').fadeOut(2000, function(){
		$(this).attr('width', 100).attr('height', 62).show(1500, function(){
			$(this).effect('pulsate', 1500, function(){
				$(this).attr('width', 199).attr('height', 125);
			})
		})		
	});
	}	

	function for_img(){	
	$('#img_4').fadeOut(2000, function(){
		$(this).attr('width', 100).attr('height', 62).show(1500, function(){
			$(this).effect('pulsate', 1500, function(){
				$(this).attr('width', 199).attr('height', 125);
			})
		})		
	});
	}	
	
	one_img();
	two_img();
	three_img();
	for_img();


Заранее большое спасибо!

Faab 21.06.2013 18:40

у меня опыта нет.. но callback разве не для этого?

var callbacks = $.Callbacks();
callbacks.add(one_img );
callbacks.add(two_img );
callbacks.add(three_img );
callbacks.add(for_img );
callbacks.fire();


http://api.jquery.com/jQuery.Callbacks/

Но сам с колбэками не работал, может они тут нафиг и не нужны. )

Faab 21.06.2013 19:25

нее... проверил, так тоже срабатывают все 4 функции одновременно

Алек 21.06.2013 19:33

Да, я тоже проверил, всё равно срабатывают все 4 одновременно, сейчас смотрю документацию по кэлбэкам, попробую разобраться, может всё-таки ответ в этой стороне.
Хотя нет, тут должен быть другой способ, посмотрю похожие темы на форуме...

Faab 21.06.2013 19:39

Слушай, а что за ошибка вылазивает

Метка времени: 21.06.2013 17:36:04
Ошибка: TypeError: $(...).effect is not a function
Источник: test.js
Строка: в твоём коде в посте строка 4, 14, 24, 34

4 ошибки... у тебя этих ошибок нет? Я из-за этой ошибки не могу протестировать ещё один вариант.

Faab 21.06.2013 19:51

Если закомментировать то место где у меня вылазивает ошибка (я пока стал вдаваться что за эффект ты навсил и как), то так у меня всё работает:

function one_img(){	
	$('#img_1').fadeOut(2000, function(){
		$(this).attr('width', 100).attr('height', 62).show(1500, function(){
			$(this).effect('pulsate', 1500, function(){
				$(this).attr('width', 199).attr('height', 125);
                                 two_img();
			})
                       
		})		
	});
	}

	function two_img(){	
	$('#img_2').fadeOut(2000, function(){
		$(this).attr('width', 100).attr('height', 62).show(1500, function(){
			$(this).effect('pulsate', 1500, function(){
				$(this).attr('width', 199).attr('height', 125);
                                three_img();
			})
		     
                })		
	});
	}	

	function three_img(){	
	$('#img_3').fadeOut(2000, function(){
		$(this).attr('width', 100).attr('height', 62).show(1500, function(){
			$(this).effect('pulsate', 1500, function(){
				$(this).attr('width', 199).attr('height', 125);
                                 for_img();
			 })
                   })		
	});
	}	

	function for_img(){	
	$('#img_4').fadeOut(2000, function(){
		$(this).attr('width', 100).attr('height', 62).show(1500, function(){
			$(this).effect('pulsate', 1500, function(){
				$(this).attr('width', 199).attr('height', 125);
			})
		})		
	});
	}	
	
	one_img();


Осталось выяснить что я закомментировал и исправить ошибку, но смысл решения проблемы будет тот же думаю.

У меня просто плагин UI наверное не установлен, вот и ошибка вылазивает. Я поправил код, так работает?

Алек 21.06.2013 20:17

Да, спасибо!
Всё отлично работает.
А так, да если UI не установлено, ошибки вплывают.
У меня она полностью почти установлена, кроме виджетов, я попутно ещё корзину разрабатываю для контента, потипу как в интернет магазине.

Ещё раз спасибо вам за подсказку!

Faab 21.06.2013 20:47

Удачи.

Вот у меня вопрос, к спецам JS. Вот какая польза от callback?

Вот пример (пусть в его случае и неверное по смыслу) топстартера:

one_img();
two_img();
three_img();
for_img();


А вот аналог кода на callback:
var callbacks = $.Callbacks();
callbacks.add(one_img );
callbacks.add(two_img );
callbacks.add(three_img );
callbacks.add(for_img );
callbacks.fire();


И в чём фишка callback? Я не вижу приимущество использования callback... В каких ситуациях его используют?

vadim5june 21.06.2013 21:48

удалил


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