js 节流函数 2

本文详细介绍了JavaScript中节流函数的原理与应用,通过实际案例解释如何利用定时器实现窗口空闲自动关闭功能,有效避免操作过于频繁导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js 节流函数的核心思想:

防止频繁的执行,

最后的操作(的影响)覆盖掉之前的操作(的影响).

 

实现方式:延迟执行(有点像"推迟满足感")

这种实现方式让我想到了之前我做的swing窗口空闲多久就自动关闭的功能

具体思路:

(1)swing不是当前窗口时,开始启动定时器,

protected void windowDeactivated2(GenericFrame frame){
		if (isLocked) {// over three times and is still locked,meanwhile use
			// try to log in
			if (task != null) {
//				System.out.println("取消任务");
				task.cancel();
				task = null;
			}
		} else {// first into this if clause(if (timesFail >=
				// LoginUtil.MAX_LOGIN_FAIL_TIMES ))
			task = null;
		}
		if (timer == null) {
			timer = new Timer();
		}
	
		if (task == null) {
			task = new MyTask(frame);
		}
		timer.schedule(task, MILLISECONDS_WAIT_WHEN_BLUR*1000);
//		System.out.println("开始计时(second):"+TimeHWUtil.formatDateZhAll(TimeHWUtil.getCurrentTimestamp()));
//		System.out.println("定时时间(second):"+MILLISECONDS_WAIT_WHEN_BLUR);
		isLocked = true;
	}

public void windowDeactivated(WindowEvent e) {

setActived22(false);

//System.out.println("window Deactivated");

if(isTiming){

windowDeactivated2(frame);

}

super.windowDeactivated(e);

}

 

(2)在定时器等待的过程中,如果激活了swing窗口,那么取消定时器,

public void windowActivated(WindowEvent e) {
				setActived22(true);
				System.out.println("window Activated");
				if (task != null) {
//					System.out.println("取消任务");
					task.cancel();
					task = null;
				}
				GenericFrame.this.setTiming(true);//恢复,不然后面就不会定时了.
				
				super.windowActivated(e);
			}

 (3)如果不是当前窗口,则先取消定时器,再执行(1),即重新定时.

说明:swing窗口是当前窗口时,执行windowActivated 方法

 

参考:http://hw1287789687.iteye.com/blog/2311976

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值