Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Два вопроса по animate() jQuery (https://javascript.ru/forum/misc/37912-dva-voprosa-po-animate-jquery.html)

Neznayka 13.05.2013 20:11

Два вопроса по animate() jQuery
 
Добрый день. У меня два вопроса по функции animate:
1) Если написать код в таком виде :
$(this).css({display:'block'}).animate({opacity:'1'}, 1000).delay(2000).animate({opacity:'0'}, 1000).css({display:'none'});

то он не исполнится, такое впечатление, что из-за того, что в одном стеке используются противоречащие друг-другу методы css : display:'block', display:'none'. Переделываю таким образом :
$(this).css({display:'block'}).animate({opacity:'1'}, 1000).delay(2000).animate({opacity:'0'}, 1000, 
				function()
				{
					$(this).css({display:'none'});
				});
и все начинает работать.. Но все таки вопрос в том, почему в первом исполнении код не работает ?
2)Второй вопрос такого содержания. Написал скрипт, в котором есть кнопка и див (изначально невидимый и прозрачный).. При клике на кнопку, див путем того же animate (приблизительно такой же код как в первом вопросе) сначала становится непрозрачным-видимым, далее висит в таком положении 2 сек.. и далее делается прозрачным.. При клике по самому диву (когда он находится в видимом состоянии) он должен принимать первоначальный вид (прозрачным-невидимым)
Код :
<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<title>Help</title>
	<style>
		div{
			display:none;
			position:absolute;
			top:50px;
			left:10px;
			width:200px;
			height:200px;
			background:#ccf;
			opacity:0;
		}
	</style>
	<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
	<script>
		$(function()
		{
			$('button').click(function()
			{
				$("div").css({display:'block'}).animate({opacity:'1'}, 1000).delay(2000).animate({opacity:'0'}, 1000, 
				function()
				{
					$(this).css({display:'none'});
				});
			})
			$('div').click(function()
			{
				$(this).css({display:'none', opacity:'0'}).clearQueue();
			});
		});
	</script>
</head>
<body>
	<div></div>
	<button>Показать</button>
</body>
</html>

Если кликать по кнопке изрядно часто, то нарушается очередность выполнения применяемых методов к диву.. (начинает моргать). Хотя вроде применяю "clearQueue" для очистки очереди стека функций. Помогите пожалуйста разобраться, как правильно сделать так, чтобы отрабатывало верно при любом кликанье по элементам. Заранее благодарен за ответ.

ksa 14.05.2013 09:10

Цитата:

Сообщение от Neznayka
почему в первом исполнении код не работает ?

С чего ты взял что он не работает? Есть сообщение об ошибке?

ksa 14.05.2013 09:15

Цитата:

Сообщение от Neznayka
Если кликать по кнопке изрядно часто, то нарушается очередность выполнения применяемых методов к диву.. (начинает моргать).

Мой вариант в Опере не моргает...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
div{
	display:none;
	position:absolute;
	top:50px;
	left:10px;
	width:200px;
	height:200px;
	background:#ccf;
	opacity:0;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
	$('button').click(function(){
		$("div").css({display:'block'}).animate({opacity:'1'}, 1000).delay(2000).animate(
			{opacity:'0'}, 1000, 
		function(){
			$(this).css({display:'none'});
		});
	})
	$('div').click(function(){
		$(this).clearQueue().css({display:'none', opacity:'0'});
	});
});
</script>
</head>
<body>
<html> 
<body> 
<div></div>
<button>Показать</button>
</body>
</html>

Neznayka 14.05.2013 12:31

Цитата:

Сообщение от ksa (Сообщение 250374)
С чего ты взял что он не работает? Есть сообщение об ошибке?

Сообщения об ошибке нет, просто ничего не происходит, игнорирует исполнение всего стека

Neznayka 14.05.2013 12:34

Цитата:

Сообщение от ksa (Сообщение 250375)
Мой вариант в Опере не моргает...

Моргает )).. Попробуйте нажать сначала на кнопку, когда появится див - по самому диву (он исчезнет) и тут-же опять по кнопке... В этом случае див появится, но уже не будет висеть 2000, а буквально тут же начнет исчезать.

ksa 14.05.2013 14:34

Цитата:

Сообщение от Neznayka
просто ничего не происходит, игнорирует исполнение всего стека

Поставь вместо последнего
Цитата:

Сообщение от Neznayka
.css({display:'none'});

Например
.css({color:'red'});

и посмотри что будет...
И это не из-за того, что
Цитата:

Сообщение от Neznayka
такое впечатление, что из-за того, что в одном стеке используются противоречащие друг-другу методы css : display:'block', display:'none'


ksa 14.05.2013 14:46

Цитата:

Сообщение от Neznayka
Попробуйте нажать сначала на кнопку, когда появится див - по самому диву (он исчезнет) и тут-же опять по кнопке... В этом случае див появится, но уже не будет висеть 2000, а буквально тут же начнет исчезать.

А так?

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
div{
	display:none;
	position:absolute;
	top:50px;
	left:10px;
	width:200px;
	height:200px;
	background:#ccf;
	opacity:0;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
	$('button').click(function(){
		$("div").css({display:'block', opacity:'0'}).animate({opacity:'1'}, 1000).delay(2000).animate(
			{opacity:'0'}, 1000, 
		function(){
			$(this).css({display:'none'});
		});
	})
	$('div').click(function(){
		$(this).clearQueue().css({display:'none', opacity:'0'});
	});
});
</script>
</head>
<body>
<html> 
<body> 
<div></div>
<button>Показать</button>
</body>
</html>

Neznayka 14.05.2013 17:22

Цитата:

Сообщение от ksa (Сообщение 250433)
Поставь вместо последнего
Например
.css({color:'red'});

и посмотри что будет...

Поставил, работает, но если меняю назад на
.css({display:'none'});

то снова не работает ..

Neznayka 14.05.2013 17:24

Цитата:

Сообщение от ksa (Сообщение 250436)
А так?

Неа, ничего не изменилось. Так же стек функций сбивается.

danik.js 14.05.2013 20:22

Цитата:

Сообщение от Neznayka
Поставил, работает, но если меняю назад на

Поставь background: red , для наглядности.


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