【NodeJS开发日记(9)】——关于js的addEventListener 和一些常用事件

【转自:https://www.cnblogs.com/isdom/p/webclips010.html】

element.addEventListener(<event-name>, <callback>, <use-capture>);
document.addEventListener("touchstart", function(){}, true)
el.addEventListener('click',function(){},false);

                addEventListener里最后一个参数决定该事件的响应顺序;


                如果为true事件执行顺序为 addEventListener ---- 标签的onclick事件 ---- document.onclick 

                如果为false事件的顺序为 标签的onclick事件 ---- document.onclick ---- addEventListener

分别解释:

event-name(string)
这是你想监听的事件的名称或类型。它可以是任何的标准DOM事件(click, mousedown, touchstart, transitionEnd,等等),当然也可以是你自己定义的事件名称

callback(function)(回调函数)
这个函数会在事件触发的时候被调用。相应的事件(event)对象,以及事件的数据,会被作为第一个参数传入这个函数

use-capture(boolean)
这个参数决定了回调函数(callback)是否在“捕获(capture)”阶段被触发

复制代码
var element = document.getElementById('element');
 
function callback() {
  alert('Hello');
}
 
// Add listener
element.addEventListener('click', callback);
复制代码

移除事件监听

element.removeEventListener(<event-name>, <callback>, <use-capture>);

注意:移除时必须要有这个被绑定的回调函数的引用。简单地调用element.removeEventListener('click');是不能达到想要的效果的

所以 如果(我们在长时间运行(long-lived)的应用中需要用到),那么我们就需要保留回调函数的句柄。意思就是说,我们不能使用匿名函数作为回调函数.

 

复制代码
//注意函数句柄执行的上下文, 否则很容易发生事件的回调函数不在你所期望的上下文中执行
//如:
<p id="el"> click me!! </p>

var el = document.getElementById('el');

var user = {
    name: 'tom',
    sayhi: function(){
        console.log(this.name);
    }   
}

el.addEventListener('click',user.sayhi);   //输出undefined

//why? 因为注意此时 this 实际指向的是el,而非user, 因为我们传递的只是一个函数句柄引用,而不是传过去整个函数上下文(user对象)

要改,很简单
el.addEventListener('click',function(){ user.sayhi(); });

但是这样改有一个缺点,因为我们实际上使用了一个匿名函数来引入需要的上下文,而这个匿名函数本身没有一个句柄引用可以在 removeEventListener中引用,
也就是说 不好在需要的时候移除监听事件

所以我们可以使用另一种方式 .bind()(ECMAScript 5标准内建函数对象的原型方法)
var user.sayhi = user.sayhi.bind(user);
el.addEventListener('click',user.sayhi);
//同时可以方便的移除对应的事件监听
el.removeEventListener('click',user.sayhi);

复制代码

 

鼠标事件
               

 document.addEventListener('mousedown', mouseDown);
 document.addEventListener('click', mouseClick);
 document.addEventListener('mouseup', mouseUp);

 


 touch事件
               

复制代码
document.addEventListener('touchstart', touchStart);
document.addEventListener('touchend', touchEnd);

       // touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发
       // touchmove事件:当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用preventDefault()事件可以阻止滚动

       // touchend事件:当手指从屏幕上离开的时候触发。
       // touchcancel事件:当系统停止跟踪触摸的时候触发。关于这个事件的确切出发时间,文档中并没有具体说明,只好去猜测
(在ios设备上的表现是常按着一段时间后自动结束touchstart事件的调用)
复制代码

    

复制代码
每个touch事件自带三个属性
     touches:表示当前跟踪的触摸操作的touch对象的数组。
     targetTouches:特定于事件目标的Touch对象的数组。
  changeTouches:表示自上次触摸以来发生了什么改变的Touch对象的数组
                
     每个touches 自带
         clientX:触摸目标在视口中的x坐标。
         clientY:触摸目标在视口中的y坐标。
         identifier:标识触摸的唯一ID。
         pageX:触摸目标在页面中的x坐标。
         pageY:触摸目标在页面中的y坐标。
         screenX:触摸目标在屏幕中的x坐标。
         screenY:触摸目标在屏幕中的y坐标。
         target:触目的DOM节点目标
复制代码

 支持:

                iOs版Safari、Android版WebKit、bada版Dolfin、OS6+中的BlackBerry WebKit、Opera Mobile 10.1+和LG专有OS中的Phantom浏览器。目前只有iOs版Safari支持多点触摸。PC版Firefox 6+ 和Chrome也支持触摸事件

     代码实例1
               

复制代码
var gotouch=function(){
       alert('touchstartok');
}

document.addEventListener("touchstart", gotouch);

//note: 第三个参数不写 默认为false 

public override function addEventListener(
type:String,
listener:Function,
useCapture:Boolean = false,
priority:int = 0,
useWeakReference:Boolean = false
):void
复制代码

                   

       代码实例2
                 

复制代码
 function Go(){   //...     }
 
document.getElementById("testButton").addEventListener("click", Go, false);

// 或者 listener 直接就是函数
document.getElementById("testButton").addEventListener("click", function () { ... }, false);
document.getElementById("testButton").removeEventListener("click", Go); // 删除监听事件
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript和Node.js都采用事件循环机制来处理异步操作。事件循环是一种执行模型,它允许JavaScript在单线程上运行,同时处理异步操作。下面是JavaScript和Node.js事件循环的简要介绍: JavaScript事件循环: JavaScript事件循环由一个事件队列和一个执行栈组成。当代码执行时,它会被添加到执行栈中。如果代码中包含异步操作,例如定时器或者事件监听器,那么这些操作会被添加到事件队列中。当执行栈为空时,事件队列中的下一个事件会被取出并添加到执行栈中执行。这个过程会一直重复,直到事件队列为空。 Node.js事件循环: Node.js事件循环与JavaScript事件循环类似,但是它包含了更多的阶段。Node.js事件循环包含了6个阶段,分别是timers、I/O callbacks、idle、prepare、poll和check。在每个阶段中,Node.js会执行相应的操作。例如,在timers阶段中,Node.js会执行所有的定时器回调函数。在poll阶段中,Node.js会等待I/O事件完成并执行相应的回调函数。如果事件队列为空并且没有被设置任何定时器,那么Node.js会在这个阶段等待新的事件被添加到事件队列中。 下面是一个简单的Node.js事件循环的例子: ```javascript // 输出结果:timer1 timer2 promise1 promise2 console.log('timer1'); setTimeout(() => { console.log('timer2'); }, 0); Promise.resolve().then(() => { console.log('promise1'); }).then(() => { console.log('promise2'); }); console.log('end'); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值