Два вопроса по 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" для очистки очереди стека функций. Помогите пожалуйста разобраться, как правильно сделать так, чтобы отрабатывало верно при любом кликанье по элементам. Заранее благодарен за ответ. |
Цитата:
|
Цитата:
<!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>
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
.css({color:'red'});
и посмотри что будет... И это не из-за того, что Цитата:
|
Цитата:
<!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>
|
Цитата:
.css({display:'none'});
то снова не работает .. |
Цитата:
|
Цитата:
|
Цитата:
$("div").css({display:'block', opacity:'0'}).animate({opacity:'1'}, 500).delay(2000).animate({opacity:'0'}, 500).css({background:'red'});
фунции animate отрабатывают по-очереди, функции css вырываются из этой очередности - исполняются сразу. Т.е. css({background:'red'}), находящийся в самом конце, исполняется сразу после css({display:'block', opacity:'0'}). Вроде читал, что не должно быть так :( .. Проясните ситуацию ?.. |
Цитата:
чтобы добавить функцию в очередь, нужно (очевидно) её добавить в очередь.
$(this).
css({display:'block'}).
animate({opacity:'1'}, 1000).
delay(2000).
animate({opacity:'0'}, 1000).
queue(function () {
$(this).css({display:'none'});
});
(код не тестил, есть сомнения по поводу this в callback'е) |
| Часовой пояс GMT +3, время: 17:15. |