做了一个联动页面:右侧每个div滑动到指定位置时,改变左侧相应div目录的选中样式(下称事件一);并且当点击左侧div目录时右侧相应的div滑动到指定位置(下称事件二)。效果类似于美团、饿了么等点餐页面。
两个事件做出来后发现,当点击目录,右侧进行滑动时会触发“事件一”,使“事件二”中 .animate()滑动事件异常卡顿。感觉去掉这种现象应该很简单,但怎么也想不来怎么实现。
后来各种在网上查资料,并查看JavaScript手册找到了 Window setTimeout() 方法,问题也顺势解决:
大概代码如下
var flag = true;//控制页面发生滑动时是否执行相应操作
var timer = null; // 定时器
/* 页面滑动 */
$(window).scroll(function scrolls() {
if (flag) { //判断flag的状态,如果为true执行需要的操作,否则不执行
/* 要在页面滑动时执行的操作 */
}
clearTimeout(timer);//如果页面依然在滑动则删除改变flag事件
timer = setTimeout(isScrollEnd, 1000);//创建定时器,执行重置flag为true的方法
});
/* 改变a的状态 */
function isScrollEnd() {
flag = true;
}
/* 分类按钮 */
function but_click() {
/* 点击目录要触发本事件 */
flag = false;//执行本事件时,改变flag为 否
}
因为创建的定时器有延时,当在这一延时中如果页面还在滑动,继续出发当前事件,便会clearTimeout 阻止这一事件,直到在延时中页面滑动事件不在触发。