javascript - jQuery禁用多次点击
问题描述
我正在尝试创建一个简单的 JQuery 滑块,并且我在使用 .on('click') 函数时遇到问题,如果我单击下一个或上一个按钮太快,它会超出我预期的值。
var currentSlide = 1;
var $slider = $(".slides");
var slideCount = $slider.children().length;
var slideSpeed = 500;
var slideMarginLeft = -900;
var slideMarginRight = 0;
$(".prev").on('click',function(){
if(currentSlide > 1){
$slider.animate({marginLeft : slideMarginLeft + 1800} , slideSpeed, function(){
slideMarginLeft +=900;
currentSlide--;
console.log(currentSlide);
});
}
});
$(".next").on('click',function(){
if(currentSlide < 5){
$slider.animate({marginLeft : slideMarginLeft} , slideSpeed, function(){
slideMarginLeft -=900;
currentSlide++;
console.log(currentSlide);
});
}
});
解决方案
var currentSlide = 1;
var $slider = $(".slides");
var slideCount = $slider.children().length;
var slideSpeed = 500;
var slideMarginLeft = -900;
var slideMarginRight = 0;
function previousClickCallback(animationCallback){
return function(){
if(currentSlide > 1){
$slider.animate({marginLeft : slideMarginLeft + 1800} , slideSpeed, () => {
slideMarginLeft +=900;
currentSlide--;
console.log(currentSlide);
$(".prev").once('click',previousClickCallback);
});
} else {
$(".prev").one('click',previousClickCallback);
}
}
}
function nextClickCallback(){
return function(){
if(currentSlide < 5){
$slider.animate({marginLeft : slideMarginLeft} , slideSpeed, () => {
slideMarginLeft -=900;
currentSlide++;
console.log(currentSlide);
$(".next").once('click',nextClickCallback);
});
} else {
$(".next").one('click',nextClickCallback);
}
}
}
$(".prev").one('click',previousClickCallback);
$(".next").one('click',nextClickCallback)
应该这样做,单击事件仅注册一次,一旦动画回调完成,则仅再次注册单击事件,并且将停止连续触发事件
推荐阅读
- javascript - 如何使用 date-fns 或 moment 来区分两个日期 ionic3
- vba - VBA,将工作表复制并粘贴到工作表,复制不需要的标题
- angular5 - Angular5表单数组验证动态创建的字段
- c++ - 应用观察者模式时发生错误
- javascript - 如何为一个对象显示部分单词一行,将鼠标指针移动到文本字段上显示全文
- python - Biopython 成对对齐在循环运行时导致分段错误
- android - 以编程方式切换 TargetActivity
- c++ - OpenGL:零活动制服
- laravel - 表单没有从 Laravel 的数组中获取变量
- android - Android Gradle 支持库必须使用相同的版本