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

kostant 26.06.2013 17:01

Последовательность выполнения скрипта
 
Здравствуйте! Нужен скрипт, который вначале перемещает картинку в корзину, а после открывается модальное окно. Но модальное окно открывается сразу, а должно в конце. Как заставить его срабатывать в конце?
<div class="productPriceWrapRight">
							<a class="modalbox" href="#inline" onClick="return false;">
								<img src="images/add-to-basket2.gif" alt="Add To Basket" width="111" height="32" id="featuredProduct_1" />
							</a>
						</div>


<div id="inline">
	<h2>Отправка сообщения</h2>

	<form id="contact" name="contact" action="#" method="post">
		<label for="email">Ваш E-mail</label>
		<input type="email" id="email" name="email" class="txt">
		<br>
		<label for="msg">Введите сообщение</label>
		<textarea id="msg" name="msg" class="txtarea"></textarea>
		
		<button id="send">Отправить E-mail</button>
	</form>
</div>


$(document).ready(function(){ 
...здесь обеспечивается полёт картинки...
$(".modalbox").fancybox({ }); - модальное окно, которое должно сработать в конце.
});

animhotep 26.06.2013 17:04

если картинка летит по средствам animate то
.animate({
...
}, 5000, function() {
$(".modalbox").fancybox({ }); // Animation complete.
});

kostant 26.06.2013 17:33

В общем приведу весь код с исправлением (жирным выделил), но всё-равно окно выскакивает сразу.

$(document).ready(function(){ 

	$("#basketItemsWrap li:first").hide();

	$(".productPriceWrapRight a img").click(function() {
		var productIDValSplitter 	= (this.id).split("_");
		var productIDVal 			= productIDValSplitter[1];
		
		var productX 		= $("#productImageWrapID_" + productIDVal).offset().left;
		var productY 		= $("#productImageWrapID_" + productIDVal).offset().top;
		
		if( $("#productID_" + productIDVal).length > 0){
			var basketX 		= $("#productID_" + productIDVal).offset().left;
			var basketY 		= $("#productID_" + productIDVal).offset().top;			
		} else {
			var basketX 		= $("#basketTitleWrap").offset().left;
			var basketY 		= $("#basketTitleWrap").offset().top;
		}
		
		var gotoX 			= basketX - productX;
		var gotoY 			= basketY - productY;
		
		var newImageWidth 	= $("#productImageWrapID_" + productIDVal).width() / 3;
		var newImageHeight	= $("#productImageWrapID_" + productIDVal).height() / 3;
		
		$("#productImageWrapID_" + productIDVal + " img")
		.clone()
		.prependTo("#productImageWrapID_" + productIDVal)
		.css({'position' : 'absolute'})
		.animate({opacity: 0.4}, 100 )
		.animate({opacity: 0.1, marginLeft: gotoX, marginTop: gotoY, width: newImageWidth, height: newImageHeight}, 1200 , function() {																													  			$(this).remove();
	
			$("#notificationsLoader").html('<img src="images/loader.gif">');
		
			$.ajax({  
				type: "POST",  
				url: "inc/functions.php",  
				data: { productID: productIDVal, action: "addToBasket"},  
				success: function(theResponse) {
					
					if( $("#productID_" + productIDVal).length > 0){
						$("#productID_" + productIDVal).animate({ opacity: 0 }, 500);
						$("#productID_" + productIDVal).before(theResponse).remove();
						$("#productID_" + productIDVal).animate({ opacity: 0 }, 500);
						$("#productID_" + productIDVal).animate({ opacity: 1 }, 500);
						$("#notificationsLoader").empty();
						
					} else {
						$("#basketItemsWrap li:first").before(theResponse);
						$("#basketItemsWrap li:first").hide();
						$("#basketItemsWrap li:first").show("slow");  
						$("#notificationsLoader").empty();			
					}
					
				}  
			});
                        
                       $(".modalbox").fancybox();
		
		});
		
	});
	
	
	
	$("#basketItemsWrap li img").live("click", function(event) { 
		var productIDValSplitter 	= (this.id).split("_");
		var productIDVal 			= productIDValSplitter[1];	

		$("#notificationsLoader").html('<img src="images/loader.gif">');
	
		$.ajax({  
			type: "POST",  
			url: "inc/functions.php",  
			data: { productID: productIDVal, action: "deleteFromBasket"},  
			success: function(theResponse) {
				
				$("#productID_" + productIDVal).hide("slow",  function() {$(this).remove();});
				$("#notificationsLoader").empty();
			
			}  
		});  
		
	});
        

});

kostant 27.06.2013 13:53

Подскажите пожалуйста, как выражение href="#inline" реализовать программно с помощью javascript чтобы вставить его в нужное место в скрипте и вызвать div-блок c индетификатором id="inline"

zebra 27.06.2013 13:57

Нефигасебе код. Он не влез на 1920 разрешение. :nono:

kostant 27.06.2013 14:03

Цитата:

Нефигасебе код. Он не влез на 1920 разрешение.
Понятия не имею как так получилось((

danik.js 27.06.2013 14:04

kostant, ты страницу верни как было! Из-за твоего жирного кода страницу расперло. (32ю строку почисти от пробелов)

kostant 02.07.2013 12:52

Друзья, помогите пожалуйста! В общем пытаюсь запустить ф-цию предварительно (как написано в документации), но всё равно 2 действия запускаются одновременно:
<script type="text/javascript">
		$(document).ready(function() {
	
			$('.fancybox').fancybox({
	                                         'beforeShow': $(".productPriceWrapRight a img").bind('click',kos_fly), 
                                                 'href': '#inline1'
		                                });
                });
	</script>


'beforeShow': $(".productPriceWrapRight a img").bind('click',kos_fly), в этой строчке, я так понимаю, нельзя использовать метод bind и связывать событие click с моей функцией kos_fly. Мне то всего нужно передать этой ф-ции id селектора ".productPriceWrapRight a img" в момент клика. Вопрос 1: как в качестве параметра функции передать id в момент клика?

Ещё есть 2 вариант. Привожу код:
$(function (){
    $(".productPriceWrapRight a img")
            .bind('click',kos_fly)
            .bind('click',function(event) {
                //        Функция вызова модального окна
                $.fancybox( {'href': '#inline1', title : 'Текст посылаемый'} );
            });

});

Но всё-равно 2 этих навешенных действия выполняются одновременно, а не друг за другом. Вопрос 2: как задать последовательную очерёдность?


Код ф-ции kos_fly:
function kos_fly (event) {

    var productIDValSplitter 	= (this.id).split("_");
		var productIDVal 			= productIDValSplitter[1];
		
		var productX 		= $("#productImageWrapID_" + productIDVal).offset().left;
		var productY 		= $("#productImageWrapID_" + productIDVal).offset().top;
		
		if( $("#productID_" + productIDVal).length > 0){
			var basketX 		= $("#productID_" + productIDVal).offset().left;
			var basketY 		= $("#productID_" + productIDVal).offset().top;			
		} else {
			var basketX 		= $("#basketTitleWrap").offset().left;
			var basketY 		= $("#basketTitleWrap").offset().top;
		}
		
		var gotoX 			= basketX - productX;
		var gotoY 			= basketY - productY;
		
		var newImageWidth 	= $("#productImageWrapID_" + productIDVal).width() / 3;
		var newImageHeight	= $("#productImageWrapID_" + productIDVal).height() / 3;
		
		$("#productImageWrapID_" + productIDVal + " img")
		.clone()
		.prependTo("#productImageWrapID_" + productIDVal)
		.css({'position' : 'absolute'})
		.animate({opacity: 0.4}, 100 )
		.animate({opacity: 0.1, marginLeft: gotoX, marginTop: gotoY, width: newImageWidth, height: newImageHeight}, 1200, function() {
			$(this).remove();
	
			$("#notificationsLoader").html('<img src="http://www.cyberforum.ru/images/loader.gif">');
		
			$.ajax({  
				type: "POST",  
				url: "inc/functions.php",  
				data: { productID: productIDVal, action: "addToBasket"},  
				success: function(theResponse) {
					
					if( $("#productID_" + productIDVal).length > 0){
						$("#productID_" + productIDVal).animate({ opacity: 0 }, 500);
						$("#productID_" + productIDVal).before(theResponse).remove();
						$("#productID_" + productIDVal).animate({ opacity: 0 }, 500);
						$("#productID_" + productIDVal).animate({ opacity: 1 }, 500);
						$("#notificationsLoader").empty();
						
					} else {
						$("#basketItemsWrap li:first").before(theResponse);
						$("#basketItemsWrap li:first").hide();
						$("#basketItemsWrap li:first").show("slow");  
						$("#notificationsLoader").empty();			
					}
					
				}  
			});  
		
		});
    
}

kostant 02.07.2013 18:02

В общем получилось с помощью задержки сделать нужную последовательность:
//        Функция вызова модального окна
            setTimeout( function () {  
                   $.fancybox.open( {'href': '#inline1', title : ''} );
                                    }, 1000 
                          );


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