在 slideUp 启动后但完成之前删除 class(回调)
Remove class after slideUp initiates but before it finishes (callbacks)
这是我在 Jquery 中看到的第一段代码,我遇到了一个问题。 HTML 在 fiddle.
问题
您会注意到 slideup 回调函数会等待 300 秒,然后才会删除活动 class。因此,如果您单击一个面板,然后在 0.3 秒内单击另一个面板,您将展开 2 个面板,因为在单击时有 2 个活动 classes。有办法解决这个问题吗?
JSfiddle测试
在此jsfiddle中通过单击任何面板进行测试,然后在 1 秒内快速单击另一个面板。
(显然我可以减少向上滑动所需的时间,但目前我的速度为 0.3 秒,我只是不希望它在有人快速点击它的情况下中断...)
$(function(){
$(".tab-panels .tabs li").on("click", function(){
//show panel with class="active"
var panelToShow = $(this).attr("rel");
$(".tab-panels .panel.active").slideUp(300, function(){
$(this).removeClass("active", function(){
$("#"+panelToShow).slideDown(300, function() {
$(this).addClass("active");
});
});
});
});
});
你可以把之前的动画停掉试试
$(function() {
$(".tab-panels .tabs li").on("click", function() {
//show panel with class="active"
var panelToShow = $(this).attr("rel");
$(".tab-panels .panel.active").stop().slideUp(1000, function() {
$(this).removeClass("active");
$("#" + panelToShow).slideDown(1000, function() {
$(this).addClass("active");
});
});
});
});
.tab-panels ul li {
list-style: none;
display: inline-block;
background: #999;
margin: 0;
padding: 3px 10px;
border-radius: 10px 10px 0 0;
color: #fff;
}
.tab-panels ul {
margin: 0;
padding: 0;
}
.tab-panels ul li:hover {
color: #fff;
background: #666;
}
.tab-panels ul li.active {
color: #fff;
background: #666;
}
.tab-panels .panel {
display: none;
background: #c9c9c9;
padding: 30px;
border-radius: 0 0 10px 10px;
width: 222px;
}
.tab-panels .panel {
display: none;
}
.tab-panels .panel.active {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="tab-panels">
<ul class="tabs">
<li rel="panel1">Panel 1</li>
<li rel="panel2">Panel 2</li>
<li rel="panel3">Panel 3</li>
<li rel="panel4">Panel 4</li>
</ul>
<div id="panel1" class="panel active">
<p>Content 1</p>
</div>
<div id="panel2" class="panel" )>
<p>Content 2</p>
</div>
<div id="panel3" class="panel">
<p>Content 3</p>
</div>
<div id="panel4" class="panel">
<p>Content 4</p>
</div>
</div>
这是我在 Jquery 中看到的第一段代码,我遇到了一个问题。 HTML 在 fiddle.
问题
您会注意到 slideup 回调函数会等待 300 秒,然后才会删除活动 class。因此,如果您单击一个面板,然后在 0.3 秒内单击另一个面板,您将展开 2 个面板,因为在单击时有 2 个活动 classes。有办法解决这个问题吗?
JSfiddle测试
在此jsfiddle中通过单击任何面板进行测试,然后在 1 秒内快速单击另一个面板。
(显然我可以减少向上滑动所需的时间,但目前我的速度为 0.3 秒,我只是不希望它在有人快速点击它的情况下中断...)
$(function(){
$(".tab-panels .tabs li").on("click", function(){
//show panel with class="active"
var panelToShow = $(this).attr("rel");
$(".tab-panels .panel.active").slideUp(300, function(){
$(this).removeClass("active", function(){
$("#"+panelToShow).slideDown(300, function() {
$(this).addClass("active");
});
});
});
});
});
你可以把之前的动画停掉试试
$(function() {
$(".tab-panels .tabs li").on("click", function() {
//show panel with class="active"
var panelToShow = $(this).attr("rel");
$(".tab-panels .panel.active").stop().slideUp(1000, function() {
$(this).removeClass("active");
$("#" + panelToShow).slideDown(1000, function() {
$(this).addClass("active");
});
});
});
});
.tab-panels ul li {
list-style: none;
display: inline-block;
background: #999;
margin: 0;
padding: 3px 10px;
border-radius: 10px 10px 0 0;
color: #fff;
}
.tab-panels ul {
margin: 0;
padding: 0;
}
.tab-panels ul li:hover {
color: #fff;
background: #666;
}
.tab-panels ul li.active {
color: #fff;
background: #666;
}
.tab-panels .panel {
display: none;
background: #c9c9c9;
padding: 30px;
border-radius: 0 0 10px 10px;
width: 222px;
}
.tab-panels .panel {
display: none;
}
.tab-panels .panel.active {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="tab-panels">
<ul class="tabs">
<li rel="panel1">Panel 1</li>
<li rel="panel2">Panel 2</li>
<li rel="panel3">Panel 3</li>
<li rel="panel4">Panel 4</li>
</ul>
<div id="panel1" class="panel active">
<p>Content 1</p>
</div>
<div id="panel2" class="panel" )>
<p>Content 2</p>
</div>
<div id="panel3" class="panel">
<p>Content 3</p>
</div>
<div id="panel4" class="panel">
<p>Content 4</p>
</div>
</div>