两个连续的动画将不会在jQuery中运行
Two consecutive Animation will not run in jQuery
请看下面的脚本:
<style type="text/css">
.div1
{
background-color: Aqua;
width: 400px;
height: 30px;
}
.div2
{
background-color: Fuchsia;
width: 400px;
height: 30px;
}
.div3
{
background-color: Green;
width: 400px;
height: 30px;
}
.div4
{
background-color: Orange;
width: 400px;
height: 30px;
}
</style>
<script type="text/javascript">
$(document).ready(function () {
var timer = setInterval(showDiv, 2000);
var counter = 0;
function showDiv() {
if (counter == 0) { counter++; return; }
$('div.My').css('height', '30px');
$('div.My').animate({ height: '30' }, 2000, function () { alert('i'); });
$('div.My')
.stop()
.filter(function () { return this.id.match('div' + counter); })
.animate({ height: '50' }, 500, function () { });
counter == 4 ? counter = 0 : counter++;
}
});
</script>
<body>
<div>
<div class="div1 My" id="div1">
</div>
<div class="div2 My" id="div2">
</div>
<div class="div3 My" id="div3">
</div>
<div class="div4 My" id="div4">
</div>
</div>
</body>
我想每隔5秒我的div变大然后变为normal然后下一个div变大。问题是第一个动画不运行,只有第二个动画运行。问题在哪里?
JSFiddle样本
编辑1)
我想当下一个div变大时,前一个div同时变正常。
检查我的叉子你的小提琴,让我知道这是做什么你想要的。你在中间调用了.stop()
,它阻止了缓慢收缩动画的显示。
$(document).ready(function () {
var timer = setInterval(showDiv, 2000);
var counter = 0;
function showDiv() {
if (counter == 0) { counter++; return; }
$('div.My').animate({ height: '30px' }, { duration: 500, queue: false });
$('div.My')
.filter(function () { return this.id.match('div' + counter); })
.animate({ height: '50px' }, { duration: 500, queue: false });
counter == 4 ? counter = 0 : counter++;
}
});
编辑-新建提琴
我觉得上面的代码不对,它在我的浏览器中没有像预期的那样工作,所以我找到了一种不同的方法,我认为它工作得更干净。这个使用jQuery的step
选项。我还使用addClass
和removeClass
作为一种本地存储,以记住哪个div需要在下一个动画中收缩。您可以对counter
进行一些计算并得到相同的结果,但这是有效的。
$(document).ready(function () {
var timer = setInterval(showDiv, 2000);
var counter = 0;
function showDiv() {
if (counter == 0) { counter++; return; }
$shrinker = $("div.big").removeClass("big");
$grower = $("#div"+counter);
$grower
.animate({ height:50 },
{duration:500,
step: function(now, fx) {
$shrinker.css("height", 80-now);
}
}
);
$grower.addClass("big");
counter == 4 ? counter = 0 : counter++;
}
});
step
体看起来有点奇怪,但它保证在动画的每个时刻,div堆栈的总高度保持不变。基本上,收缩和增长div的总高度(min:30, max:50)必须始终为80,因此收缩div的高度应该为80——增长div的高度。
相关文章:
- 使用JQuery运行php并刷新页面是不起作用的
- 通过JavaScript/jQuery运行PHP SQL Query以隐藏条目
- 第二次单击时,使用JQUERY运行另一个函数
- 在.each()循环中的ajax完成后,Jquery运行代码
- 我的jQuery运行有点慢.我该如何加快速度
- jQuery 运行函数组合框填充多个组合框
- jQuery 运行总计和输出标签不起作用
- jQuery运行函数加载和键控
- jQuery运行不佳
- 使用 JQuery 运行 AJAX 和使用普通 XMLHttpRequest 运行 AJAX 有什么区别?
- JavaScript/jQuery:运行 DOM 命令 *after* img.onload 命令
- jQuery 运行 C# 方法
- 自动滚动到目标,iOS 中的 jQuery 运行得太远
- jQuery:运行多个日期选择器's动态创建的输入
- Span元素不从jQuery运行动画
- 使用ajax jquery运行php脚本
- jQuery -运行一个函数来替换常用的代码
- jquery运行函数前检查字段值
- 我如何使用jQuery运行MySQL查询
- 从AJAX或JQuery运行Python脚本