灵感源于一个投射展示型项目,代码很简单并包含注释就不做累述了。
/*
* nobody.js
* @author Yimo
* @version v1.0
*/
(function(){
// 人为操作事件支持,以下事件触发将被认定为当前页面存在人为操作
var events = ['mousemove','keypress','mousedown','mousewheel'];
// 添加事件
function addEvent(type,handler){
if (window.addEventListener){
window.addEventListener(type, handler, false);
} else if (window.attachEvent){
window.attachEvent("on" + type, handler);
} else {
window["on" + type] = handler;
}
}
// 移除事件
function removeEvent(type,handler){
if (window.removeEventListener){
window.removeEventListener(type, handler, false);
} else if (window.detachEvent){
window.detachEvent("on" + type, handler);
} else {
window["on" + type] = null;
}
}
// 按ID缓存对应nobody事件的内部对象用于后续事件销毁
var cache = {};
/*
* 无人操作事件
*
* @param func 事件触发时的回调函数
* @param timeout 无人操作事件触发延迟时间
* @param onlyonce 是否仅触发一次
*
* @return 事件定时器ID
*/
window.onNobody = function(func,timeout,onlyonce){
// 域内独立对象,保证onNobody每次调用都有一个属于自己的detail对象
var detail = {
counter : 0,
lastTime : new Date().getTime(),
reset : function(){
detail.counter = 0;
}
}
for(var i = 0; i < events.length; i++){
addEvent(events[i],detail.reset);
};
var id = setInterval(function(){
if(detail.counter >= timeout){
func();
if(!onlyonce){
detail.counter = 0;
}else{
window.clearNobody(id);
}
}
var time = new Date().getTime();
detail.counter += time - detail.lastTime;
detail.lastTime = time;
},1);
cache[id] = detail;
return id;
}
/*
* 移除无人操作事件
*
* @param id 添加无人操作事件时返回的ID
*/
window.offNobody = function(id){
clearInterval(id);
for(var i = 0; i < events.length; i++){
removeEvent(events[i],cache[id].reset);
};
}
})();
分享到:
相关推荐
基于OE无人船的动态事件触发非线性模型预测控制研究,OE无人船:事件触发机制下的非线性模型预测控制研究,OE 无人船 事件触发 非线性模型预测控制 ,核心关键词:OE无人船; 事件触发; 非线性模型预测控制;,非线性模型...
OE无人船:事件触发机制下的非线性模型预测控制研究,OE 无人船 事件触发 非线性模型预测控制 ,核心关键词:OE无人船; 事件触发; 非线性模型预测控制;,非线性模型预测控制下的OE无人船事件触发机制
事件(event)是一个非常重要的概念,我们的程序时刻都在触发和接收着各种事件:鼠标点击事件,键盘事件,以及处理操作系统的各种事件。所谓事件就是由某个对象发出的消息。比如用户按下了某个按钮,某个文件发生了...
常见的如`MouseDown`、`MouseMove`和`MouseUp`,这些事件在鼠标操作时会被触发。在拖动控件时,`MouseDown`通常用于开始拖动,`MouseMove`处理拖动过程,而`MouseUp`则结束拖动。如果我们希望在拖动时不触发任何事件...
`DataGridViewCheckBoxColumn`允许用户通过点击来选择或取消选择一个条目,而实时触发事件则可以让你在用户做出这些改变时立即执行相应的操作。 标题中的“DataGridView DataGridViewCheckBoxColumn编辑时实时触发...
在Visual Basic (VB)编程环境中,Load事件是窗体(Form)生命周期中的一个重要阶段,它在窗体被创建或显示时被触发。当一个窗体被加载到内存中或者首次显示时,VB会自动调用该窗体的Load事件过程。这个事件允许...
- 当用户释放按键时触发 `onkeyup` 事件,当按下按键时触发 `onkeydown` 事件。 2. **延时定时器 (setTimeout)** - `setTimeout` 函数用于设置一个延时定时器,在指定的毫秒数之后执行一次函数。 - 本例中,`...
但是在某些特定的业务场景下,我们可能需要在用户没有直接操作时,程序性地触发这些事件。 在旧版本的Internet Explorer(IE)浏览器中,可以使用`fireEvent`方法来触发事件。例如: ```javascript var obj = ...
web前端小问题,select 选择事件,当选择select同一值触发onchange事件
6. **设置EnableRaisingEvents属性**:在不必要时,可以临时禁用事件的触发,比如在进行批量操作时,然后在操作完成后重新启用。 在实际应用中,应根据具体需求选择合适的方法,或者结合多种策略来优化事件处理,...
在IT领域,Windows服务(Windows Service)是一种在后台运行的应用程序,它不依赖于用户界面,可以在操作系统启动后自动执行任务。C#是.NET框架下的主要编程语言,它提供了丰富的库来创建和管理Windows服务。本篇...
在本实验中,我们将深入探讨如何构建一个基于WEB的登录界面,使用的技术栈包括JSP(JavaServer Pages)、Servlet和Bean,以及可能涉及到的COM组件。这个实验旨在帮助你理解和实践WEB开发的基本流程,以及这些技术...
在计算机编程领域,尤其是涉及到用户界面(UI)的开发时,鼠标事件扮演着至关重要的角色。这些事件使得程序能够响应用户的鼠标操作,如点击、移动、拖拽等,从而实现与用户的交互。在这个名为“鼠标事件演示鼠标的...
基于事件触发的模型预测控制方法及其MATLAB代码实现与参考文献分析","水下无人艇智能路径跟踪与事件触发模型预测控制研究:基于MATLAB代码与参考文献的实践探索",水下无人艇三维路径跟踪+事件触发+模型预测控制 ...
点击子元素,触发子元素事件的同时不触发父元素的时间
c# treeview 添加节点后面button触发事件
本文将详细介绍如何在.NET框架中使用C#编程语言实现当用户按下Enter键时触发特定事件的功能。此功能常见于Web应用程序和桌面应用程序中,尤其适用于表单提交、按钮点击等交互场景。我们将探讨几种不同的实现方法,并...
4. UI设计:易语言源码中的Web界面可能使用了自定义的控件和布局管理,以便在Windows操作系统上模拟Web页面的布局。这些控件可以模拟浏览器的一些功能,如前进、后退、刷新等。 5. 数据绑定:易语言源码可能实现了...
在Java Swing库中,用户界面(UI)组件是事件的源,它们能够触发多种类型的事件,这些事件通常与用户的交互、组件的状态变化或应用程序的内部操作相关。以下是对标题和描述中提到的Swing组件及其可能触发的事件的...
在web页面开发时,我们经常会遇到下列情况: 1.一个标签仅仅是要触发onclick行为; 2.表现上要有鼠标的pointer指针显示,或者其他类似a标签的视觉效果。 比如执行删除操作时,为了避免误操作,我们要弹出对话框让用户...