如何防止多次点击触发多个动画
How to prevent multiple clicks triggering multiple animations
我想知道如何防止多次点击或一个事件因多次点击而被多次触发。
假设我必须为一个对象设置动画。
一个按钮将触发动画,另一个按钮将重置动画。
<div class="div">
Animate Me!
</div>
<div class="nav">
<div class="start">start</div>
<div class="reset">reset</div>
</div>
我不在乎用户点击 "star" 按钮多少次,动画必须只触发一次。
这并不意味着将来不能再触发动画。动画重置时,可以再触发一次,依此类推。
$( '.start' ).click(function(){
$('.div').animate({
left: '+=' + 100});
});
$( '.reset' ).click(function(){
$('.div').animate({
left: 50});
});
这是我愿意做的一个例子:fiddle
尝试尽可能多地点击"start"按钮,动画将根据点击次数触发。
我在网上查了一下,发现有两种方法可以防止多次点击。然而他们似乎不适合我。
1) 使用.unbind() found here:
$( '.reset' ).unbind().click(function(){
$('.div').animate({
left: 50});
});
但它不起作用:fiddle;
2) 使用 event.stopImmediatePropagation found here:
$( '.reset' ).click(function(event){
event.stopImmediatePropagation()
$('.div').animate({
left: 50});
});
也不行。 fiddle;
如何防止"start"按钮多次触发动画?但在单击 "reset" 按钮时被单击?
使用jqueryone
方法http://api.jquery.com/one/。
$( '.start' ).click(function(){
var div = $('.div:not(.animated)');
div.animate({
left: '+=' + 100}).addClass('animated');
});
$( '.reset' ).click(function(event){
var animated = $('.div.animated');
animated.animate({
left: 50}).removeClass('animated');
});
.div {
position: absolute;
top: 150px;
left: 50px;
height: 100;
width: 100;
background-color: blue;
}
.start, .reset {
display: table-cell;
width:50%;
}
.start {
background-color:green;
}
.reset{
background-color:red;
}
}
.nav {
position: absolute;
width: 100%;
top: 0;
right: 0;
left: 0;
height: 60px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="div">
Animate Me!
</div>
<div class="nav">
<div class="start">start</div>
<div class="reset">reset</div>
</div>
您可以向开始按钮添加帮助 class,并在单击重置按钮时将其删除。
$('.start').click(function () {
if(!$(this).hasClass('move')){
$(this).addClass('move');
$('.div').animate({
left: '+=' + 100
});
}
});
$('.reset').click(function () {
$('.start').removeClass('move');
$('.div').animate({
left: 50
});
});
更好:
$('.nav').on('click', '.start:not(.move)', function () {
$(this).addClass('move');
$('.div').animate({
left: '+=' + 100
});
});
$('.reset').click(function () {
$('.start').removeClass('move');
$('.div').animate({
left: 50
});
});
我想知道如何防止多次点击或一个事件因多次点击而被多次触发。
假设我必须为一个对象设置动画。 一个按钮将触发动画,另一个按钮将重置动画。
<div class="div">
Animate Me!
</div>
<div class="nav">
<div class="start">start</div>
<div class="reset">reset</div>
</div>
我不在乎用户点击 "star" 按钮多少次,动画必须只触发一次。 这并不意味着将来不能再触发动画。动画重置时,可以再触发一次,依此类推。
$( '.start' ).click(function(){
$('.div').animate({
left: '+=' + 100});
});
$( '.reset' ).click(function(){
$('.div').animate({
left: 50});
});
这是我愿意做的一个例子:fiddle
尝试尽可能多地点击"start"按钮,动画将根据点击次数触发。
我在网上查了一下,发现有两种方法可以防止多次点击。然而他们似乎不适合我。
1) 使用.unbind() found here:
$( '.reset' ).unbind().click(function(){
$('.div').animate({
left: 50});
});
但它不起作用:fiddle;
2) 使用 event.stopImmediatePropagation found here:
$( '.reset' ).click(function(event){
event.stopImmediatePropagation()
$('.div').animate({
left: 50});
});
也不行。 fiddle;
如何防止"start"按钮多次触发动画?但在单击 "reset" 按钮时被单击?
使用jqueryone
方法http://api.jquery.com/one/。
$( '.start' ).click(function(){
var div = $('.div:not(.animated)');
div.animate({
left: '+=' + 100}).addClass('animated');
});
$( '.reset' ).click(function(event){
var animated = $('.div.animated');
animated.animate({
left: 50}).removeClass('animated');
});
.div {
position: absolute;
top: 150px;
left: 50px;
height: 100;
width: 100;
background-color: blue;
}
.start, .reset {
display: table-cell;
width:50%;
}
.start {
background-color:green;
}
.reset{
background-color:red;
}
}
.nav {
position: absolute;
width: 100%;
top: 0;
right: 0;
left: 0;
height: 60px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="div">
Animate Me!
</div>
<div class="nav">
<div class="start">start</div>
<div class="reset">reset</div>
</div>
您可以向开始按钮添加帮助 class,并在单击重置按钮时将其删除。
$('.start').click(function () {
if(!$(this).hasClass('move')){
$(this).addClass('move');
$('.div').animate({
left: '+=' + 100
});
}
});
$('.reset').click(function () {
$('.start').removeClass('move');
$('.div').animate({
left: 50
});
});
更好:
$('.nav').on('click', '.start:not(.move)', function () {
$(this).addClass('move');
$('.div').animate({
left: '+=' + 100
});
});
$('.reset').click(function () {
$('.start').removeClass('move');
$('.div').animate({
left: 50
});
});