【求助】关于轮播图中节流阀的问题`
这是轮播图的一部分——右侧按钮点击事件
在我没有添加节流阀flag之前,这组代码是没有问题的,可以正常运行
`var num = 0;
// 控制小圆圈的播放
var circle = 0;
// 节流阀
var flag = true;
arrowr.addEventListener("click", function() {
if (flag) {
flag = false; // 关闭节流阀
// 如果走到了最后复制的一张图,此时ul要快速复原left为0
if (num == ul.children.length - 1) {
ul.style.left = 0;
num = 0;
}
num++;
animate(ul, -num * boxWidth, function() {
flag = true;
// 为什么这里不会返回flag的值????
console.log(flag);
});
// 点击右侧按钮,小圆圈也会跟随变化,可以再声明一个变量circle控制小圆圈的变化
circle++;
if (circle == ol.children.length) {
circle = 0;
}
// 调用函数
circleChange();
}
});
问题出现在了这里,我给anmiate多添加了一个函数,想要打开节流阀,运行程序后发现log不出来flag的值,而且点击图片右侧按钮,图片也不会进行轮播了,说明flag的值并没有变成true
animate(ul, -num * boxWidth, function() {
flag = true;
// 为什么这里不会返回flag的值????
console.log(flag);
});
这是animate函数,我没有发现什么问题。
function animate(obj, target, callback) {
// 先清除以前的定时器,只保留当前的一个定时器,就不会使元素速度越来越快了
clearInterval(obj.timer);
// 给不同元素指定了不同的定时器
obj.timer = setInterval(function() {
// 缓动效果
var step = (target - obj.offsetLeft) / 10;
// Math.ceil向上取整,Math.floor向下取整
// 当动画函数从800移动到500时,需要用Math.floor往小取整
step = step > 0 ? Math.ceil(step) : Math.floor(step);
if (obj.offsetLeft == target) {
clearInterval(obj.timer);
// 回调函数写到定时器结束里面
// if (callback) {
// // 调用函数
// callback();
// }
// 还有下面这种高级写法
callback && callback();
}
obj.style.left = obj.offsetLeft + step + "px";
}, 15);
}
有没有大神可以帮忙解决一下吗?我被这个问题困了好久,诚心求解555555