执行animate时不执行scroll里的操作

做了一个联动页面:右侧每个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 阻止这一事件,直到在延时中页面滑动事件不在触发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值