`
yiminghe
  • 浏览: 1465525 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javascript与用户空闲

阅读更多

利用用户空闲时间

一般的聊天软件都会有一个很方便的功能,当用户长时间不操作时会自动设置状态为离开,这样其他人就不会因为对方迟迟不回复而胡乱猜想。
以前也做过web聊天系统,那么加入这个功能应该会锦上添花 ,当你空闲时候告诉你的好友我可能离开了。

那么关键是怎么判断当前用户是否空闲,一般网页接受两种输入设备的信号:鼠标,键盘,会触发相应的事件 keydown mousemove,那么我们只要 全局监控这两种事件就可以了。

具体逻辑:

初始设置空闲
当用户有动作
   如果有定时器设置就清空,进入繁忙了
   如果当前是空闲,就设置为繁忙,通知繁忙处理程序
   否则就设置定时器,一段时间后设置当前状态为空闲,并通知空闲处理程序
 

 

效果图:

 




写段代码测试一下: (附件示例)

 

<script type="text/javascript" src="ext-core-min.js"></script>
<div id="test">
	
	<input id="testInput" />

</div>
	
<script type="text/javascript">
	Ext.ns("Ext.ux");
	Ext.ux.IdleJudger=(function(){
		//private:当前是否空闲
		var idle=true;
		var idleTimer;
		
		
		var pub = {
			//多长时间没操作会被通知idle,可 Ext.ux.IdleJudger.idleDuration 自己设置
			//for override
			idleDuration:5000,
			
			//状态查询
			//readonly
			isIdle:function(){return idle;},
			
			//是否启用该功能,自己设置
			//for override
			enable:true,
			
			//用户开始空闲通知,自己设置
			//for override
			idleHandler:function(){console.log("i start idle !");},
			
			//用户开始繁忙通知,自己设置
			//for override
			busyHandler:function(){console.log("i start busy !");},
			start:start
		};
		
		
		function setIdle(){
			idle=true;
			if(pub.idleHandler) pub.idleHandler();
		}
		
		
		function check(){
			if(!pub.enable) return;
			//前段设置的空闲取消
			clearTimeout(idleTimer);
			if(idle) {
				idle=false;
				if(pub.busyHandler)pub.busyHandler();
			}
			//pub.idleDuration 后设置空闲			
			idleTimer=setIdle.defer(pub.idleDuration);
		}
		
		function start() {
			//两种输入设备触动了
			Ext.getDoc().on("keydown",check);
			Ext.getDoc().on("mousemove",check);
		}
		
		return pub;
		
	})();
</script>



<script type="text/javascript">
	Ext.onReady(function(){
		//set up config 
		Ext.ux.IdleJudger.idleDuration=5000;
		var logger=Ext.getDom("test");
		Ext.ux.IdleJudger.idleHandler = function(){
			logger.innerHTML+=new Date()+" : i start idle <br/>";
		};
		Ext.ux.IdleJudger.busyHandler = function(){
			logger.innerHTML+=new Date()+" : i start busy <br/>";
		};
		
		/*
		 can not stop it ,that's good
		*/
		Ext.get("testInput").on("mouseover",function(evt){
			evt.stopEvent();
		});
		
		Ext.get("testInput").on("keydown",function(evt){
			evt.stopEvent();
		});
		//... other config
		
		//start monitor
		Ext.ux.IdleJudger.start();
	});
</script>

 

 

 

 

  • 大小: 8.5 KB
2
0
分享到:
评论
4 楼 yiminghe 2009-09-10  
kalin001 写道
你的网页不让他得到焦点,他怎么知道我忙还是闲啊!


得不到焦点对这个网页来说就是闲,没焦点表示你不注意这个网页了,就表示你离开这个应用了
3 楼 kalin001 2009-09-10  
你的网页不让他得到焦点,他怎么知道我忙还是闲啊!
2 楼 yiminghe 2009-09-10  
atian25 写道
呵呵,再加个QQ的输入状态:"对方正在输入文字..."


这个在聊天输入窗口监控keydown就行了,不过毕竟要服务器中转,要处理好消息发送的频率程度,过犹不及
1 楼 atian25 2009-09-10  
呵呵,再加个QQ的输入状态:"对方正在输入文字..."

相关推荐

    空闲时间执行ifvisible插件.zip

    在配合`ifvisible.js`使用时,这些特性可以更好地与用户交互状态结合,例如在用户空闲时加载预缓存的数据或播放背景音乐。 `css`(层叠样式表)用于定义网页的布局和样式。当配合ifvisible插件,可以实现根据用户...

    idle-state-listener:JavaScript助手在浏览器上添加用户空闲状态侦听器

    用户代理空闲状态回调此库/ npm帮助程序可在浏览器上添加用户空闲状态侦听器设置安装idle-state-listener : npm install idle-state-listener --save-dev演示版网址: : 例子var stateManager = require ( 'idle-...

    Idle.js:浏览器的 Javascript 活动库。 (离开,空闲等)

    描述用于报告用户在浏览器中的活动(离开、空闲、不看网页等)的微型 javascript 库。 它独立于任何其他 javascript 库,例如 jquery。 您可以在查看演示变更日志0.0.2 (19-11-14) - 凉亭支撑0.0.2 (7-03-12) - 为...

    quicklink通过在空闲时间预先获取viewport内的链接加快后续页面加载速度

    它利用了浏览器的空闲时间,智能地预加载用户视口(viewport)内可能点击的链接,从而减少用户在浏览网站时等待新页面加载的时间,提供更流畅的用户体验。这个工具尤其适用于内容丰富的网站,如博客、新闻门户或电子...

    JavaScript 机柜绘制,U位管理

    在这个项目中,我们可以利用JavaScript库如D3.js或Three.js来绘制三维机柜模型,显示每个U位的状态,比如空闲、已占用或者即将过热。这些库提供了强大的数据绑定和图形渲染能力,使得动态更新和用户交互变得简单。 ...

    使用JavaScript的电影座位预订应用程序.zip

    3. **数据管理**:应用可能使用JavaScript对象或者数组来存储座位的状态(如已预订、空闲等)和用户的预订信息。这允许程序快速地查找和修改座位状态。 4. **用户反馈**:JavaScript还可以用于提供实时的用户反馈,...

    如何使用JavaScript检测空闲的浏览器选项卡

    这种情况下,为了优化性能和减少不必要的资源消耗,开发者可以利用浏览器提供的页面可见性API来检测用户是否与当前页面交互。 页面可见性API是一个标准化的接口,允许开发者检测浏览器选项卡的状态——是可见的...

    监视JS应用程序,以了解用户何时空闲并触发事件。-JavaScript开发

    setIdle()监视JS应用程序,以了解用户何时空闲并触发事件。 var idle = setIdle(()=&gt; doSomething('awesome')); 安装NPM&gt; npm install setidle Bower&gt; setIdle()监视JS应用程序中用户何时空闲并触发事件。...

    Javascript定时器 一 单线程

    JavaScript最初设计时为了确保用户界面的响应性,选择了单线程执行模型。这意味着在同一时间只能执行一个任务,其他任务则需要排队等待。这种模型避免了多线程可能导致的竞态条件和死锁问题,但同时也带来了挑战,...

    Simple Ludo Game using JavaScript with Free Source Code.zip

    1. 初始化棋盘:使用JavaScript创建棋盘数组,存储每个格子的状态,如空闲、己方棋子、对方棋子等。 2. 掷骰子:使用Math.random()函数生成1~6的随机数,模拟骰子的点数。 3. 棋子移动:根据掷出的点数,更新棋盘...

    JavaScript单线程还是多线程

    本文将深入探讨JavaScript的单线程模型以及与之相关的并发机制。 在计算机编程中,线程是程序执行的基本单元,一个进程可以包含多个线程。多线程意味着程序可以在同一时间执行多个不同的任务,而单线程则表示只有一...

    JavaScript树状结构和时间操作

    JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它在构建动态、交互式的用户界面方面扮演着重要角色。在JavaScript中,理解树状结构和时间操作是提升编程能力的关键。 树状结构是一种数据结构,它模拟了...

    JavaScript的时间消耗共9页.pdf.zip

    本文将深入探讨JavaScript中的时间消耗,理解这些概念对于优化代码性能、提高用户体验至关重要。我们先从基础开始,逐步剖析JavaScript执行过程中涉及的时间消耗。 1. **解析与编译阶段**:当JavaScript引擎加载...

    停车场管理应用程序JavaScript源代码.zip

    这个停车场管理应用程序JavaScript源代码提供了从用户界面交互、数据处理到后台逻辑的完整解决方案,对于学习Web开发,尤其是JavaScript全栈开发的开发者来说,是一个宝贵的资源。通过研究和理解这个项目,你可以...

    空闲时间执行ifvisible.js

    综合以上,`ifvisible.js`是一个强大的JavaScript库,用于在用户空闲时触发特定行为,提高网页的交互性和效率。它通过监控用户活动并提供事件绑定,使开发者能够创建响应用户活动状态的应用。同时,结合`js特效`和`...

    宿舍洗衣机空闲提醒小程序

    【宿舍洗衣机空闲提醒小程序】是一款专为学生宿舍设计的小程序,它利用现代信息技术,为用户提供实时的洗衣机使用状态查询和空闲提醒功能,极大地方便了学生在宿舍内安排洗衣时间,避免了等待和冲突。这款小程序的...

Global site tag (gtag.js) - Google Analytics