滑块在多次单击时忽略“如果有条件”
Slider Ignoring If Conditional When Clicked Multiple Times
我有一个jQuery滑块,它通过将左侧属性设置1400px的动画,每5秒在容器div中滑动一次项目。一旦left属性达到-2800px,if条件将开始重置left属性,同时从行的前面删除项目并将其附加到列表的后面,这样滑动循环将无限继续。这个滑块还有左右按钮,如果用户愿意,可以循环浏览图像
我遇到的问题是,如果您连续快速多次单击滑块,则左侧属性将超出if条件中设置的-2800px边界。我认为这是因为在左侧属性达到-2800px之前,多次单击事件都会被触发。我该如何阻止这种情况的发生?有没有一个功能可以在第一个功能完成之前阻止多个功能启动?这是一个jsFiddle(我为了显示而更改了宽度):
http://jsfiddle.net/25tt5vmp/
我的jQuery:
$(document).ready(function () {
var myTimer = setInterval(slide, 5000);
function slide() {
var left = $('#sliderList').css('left');
left = left.substring(0, left.length - 2);
if (left <= -2800) {
$('#sliderList').css('left', '-1400px');
var slide = $('#sliderList li:first');
$('#sliderList').children('li:first').remove();
$('#sliderList').append(slide);
$('#sliderList').animate({ left: "-=1400px" }, "slow", "swing");
}
else {
$('#sliderList').animate({ left: "-=1400" }, "slow", "swing");
}
}
$('#sliderLeft').click(function () {
var left = $('#sliderList').css('left');
left = left.substring(0, left.length - 2);
if (left <= -2800) {
$('#sliderList').css('left', '-1400px');
var slide = $('#sliderList li:first');
$('#sliderList').children('li:first').remove();
$('#sliderList').append(slide);
$('#sliderList').animate({ left: "-=1400px" }, "slow", "swing");
clearInterval(myTimer);
myTimer = setInterval(slide, 5000);
}
else {
$('#sliderList').animate({ left: "-=1400" }, "slow", "swing");
clearInterval(myTimer);
myTimer = setInterval(slide, 5000);
}
});
$('#sliderRight').click(function () {
var left = $('#sliderList').css('left');
left = left.substring(0, left.length - 2);
if (left >= 0) {
$('#sliderList').css('left', '-1400px');
var slide = $('#sliderList li:last');
$('#sliderList').children('li:last').remove();
$('#sliderList').prepend(slide);
$('#sliderList').animate({ left: "+=1400px" }, "slow", "swing");
clearInterval(myTimer);
myTimer = setInterval(slide, 5000);
}
else {
$('#sliderList').animate({ left: "+=1400" }, "slow", "swing");
clearInterval(myTimer);
myTimer = setInterval(slide, 5000);
}
});
});
有一个简单的解决方案。使用阻塞变量。生成变量:
var blockedSlider = false;
然后,在启动动画时将其设置为true。每次单击时,都会检查blockedSlider是true还是false,并且仅在false时激发动画
动画完成后,再次将blockedSlider设置为false。就是这样。
相关文章:
- 通过js在新选项卡中有条件地打开url
- jQuery-有条件地附加HTML
- 有条件更新d3.js力图中节点的最佳方法
- Woocommerce产品选项有条件
- 有条件地在选项标记中应用布尔属性
- ADF:有条件地加载javascript资源
- 如何有条件地更改角度中的orderBy参数
- 无法在有条件呈现的富:面板上提交h:form
- 有条件地与react路由器链接
- 用于编写与我作为客户端查看的网页交互的脚本的术语(如果有的话)是什么
- 正在对已提取的文档进行填充.有可能吗?如果有,怎么做
- 如果只有一次有条件,如何执行
- Rails,有条件的,包括Javascript(如果未加载)
- jquery:如果第一个选择器返回为空,有没有一种简明的方法可以有条件地使用第二个选择器
- 如果文本字段中未输入任何数据,如何有条件地阻止表单提交
- 如果登录成功,则有条件地关闭引导模式面板
- 滑块在多次单击时忽略“如果有条件”
- 如果MVC模型为空,有条件地执行javascript
- 如果有条件,在JsonResult中返回一个模态确认框
- 如果变量存在,则有条件地调用函数或脚本