我希望为每个.item
框添加延迟动画。
我有两个问题:
each
非常棘手,因为它在PHP中不起作用 - 即使我在bool to false
之后设置each
(如下例所示),它只运行它有多少元素。此外,如果我使用animate()
回调 - 它也会多次触发。var isAnimating = false;
$('.toggle').click(function() {
//Only run it if it's not animating
if(!isAnimating) {
isAnimating = true;
menu.toggleClass('open');
item = $('.item');
$.each($(item), function(i, el) {
$(el).css({'opacity': 0});
setTimeout(function() {
$(el).toggleClass('open').animate({
'opacity': 1.0
}, 450);
},50 + ( i * 200 ));
});
//It just triggers it as many times as there are elements..
isAnimating = false;
}
});
答案 0 :(得分:2)
window.onload = function(){
start();
};
检测元素是否为animationg。is(':animated')
函数的元素。首先需要首先显示元素,然后在第二次单击时运行动画,反之亦然。尝试以下内容。希望这会对你有所帮助。
reverse()
$('.toggle').click(function () {
var item = $('.item');
if (item.is(':animated')) return;
if (item.hasClass('open')) {
$.each(item.toArray().reverse(), function(i, el) {
setTimeout(function() {
$(el).animate({
'opacity': 0
}, 450, function() {
$(this).removeClass('open');
});
}, 50 + (i * 200));
});
} else {
$.each(item, function (i, el) {
setTimeout(function () {
$(el).addClass('open').animate({
'opacity': 1
}, 450);
}, 50 + (i * 200));
});
}
});
body {
height: 1000px;
background-color: #222;
}
.toggle {
height: 50px;
width: 75px;
color: #fff;
text-align: center;
line-height: 50px;
border: 2px solid #fff;
border-radius: 5px;
cursor: pointer;
}
.toggle:hover {
background-color: #fff;
color: #222;
}
.wrap {
position: fixed;
left: 50%;
top: 50%;
margin-top: -125px;
margin-left: -50px;
}
.item {
height: 50px;
width: 100px;
background-color: red;
margin-bottom: 4px;
display: none;
opacity: 0;
}
.item.open {
display: block;
}
答案 1 :(得分:0)