美文网首页
事件派发&事件监听

事件派发&事件监听

作者: bounsail | 来源:发表于2021-05-23 21:12 被阅读0次

派发事件 dispatchEvent

dispatchEvent 向指定目标事件派发一个事件;一般的事件触发是用户进行某些操作时才会触发,而使用dispatchEvent可以在代码中手动触发事件。

定义事件的目的就是为了执行某一方法,手动触发事件的目的也是执行该事件下的方法。

简单的创建并派发事件的例子

    <script type="text/javascript">
        window.onload = function(){
            var btn = document.querySelector('#click');
            btn.addEventListener('click', function(e){  //为元素绑定事件监听
                alert('okk!');
            }, false);
            var event = new Event('click');  //创建一个click事件
            btn.dispatchEvent(event);  //派发事件
        }
    </script>

使用场景

一、触发自定义事件:浏览器自带事件一般由浏览器接收某些操作之后触发,而自定义事件的触发需要使用dispatchEvent来进行手动触发。
二、触发浏览器标准事件:根据需求决定,某些操作如果正好与某个元素事件的触发一致,且该事件很好模拟,就可以触发该事件来达到某些需要的执行结果。

注意事项
ie9以下的版本不支持该方法,所以,有需求的话需要做好浏览器兼容。

使用Jquery来兼容浏览器
Jquery中的trigger方法就是用来触发事件的。

事件派发的作用:

1.派发数据:将封闭在模块中的数据传递给另一个封闭模块
2.完成较为复杂的解耦

事件和回调函数区别:

1.如果需要完成内容后执行函数,回调函数就只能在一个地方调用;而事件却可以在任何地方接收到数据。
2、回调函数与当前的代码紧密关联,如果修改一个地方,可能会造成错误;但事件机制通过事件的侦听获取,不管发送还是接收、删除、修改后都不会引起任何相关联的错误。

封装的js文件(实现加载图片为例)

回调函数版:

var Method=(function () {
    return {
        loadImage:function (arr,callback) {
            var img=new Image();
            img.arr=arr;
            img.list=[];
            img.num=0;
            img.callback=callback;
            img.addEventListener("load",this.loadHandler);
            img.self=this;
            img.src=arr[img.num];
        },
        loadHandler:function (e) {
            this.list.push(this.cloneNode(false));
            this.num++;
            if(this.num>this.arr.length-1){
                this.removeEventListener("load",this.self.loadHandler);
                //全部加载完成后通过回调函数将list返回到html文件
                this.callback(this.list);
                return;
            }
            this.src=this.arr[this.num];
        },
    }
})();

派发事件版:

var Method=(function () {
    return {
        EVENT_ID:"event_id",
        loadImage:function (arr) {
            var img=new Image();
            img.arr=arr;
            img.list=[];
            img.num=0;
//            如果DOM对象下的事件侦听没有被删除掉,将会常驻堆中
//            一旦触发了这个事件需要的条件,就会继续执行事件函数
            img.addEventListener("load",this.loadHandler);
            img.self=this;
            img.src=arr[img.num];
        },

        loadHandler:function (e) {
            this.list.push(this.cloneNode(false));
            this.num++;
            if(this.num>this.arr.length-1){
                this.removeEventListener("load",this.self.loadHandler);
                //事件派发类型必须与事件侦听接收类型一致,这样事件才会收到
                //创建一个事件对象
                var evt=new Event(Method.EVENT_ID)
                evt.list=this.list;        //将list作为事件对象的属性
                document.dispatchEvent(evt);     //派发事件
                return;
            }
            this.src=this.arr[this.num];
        },
    }
})();
<script>
        var arr=["img/a.jpeg","img/b.jpeg","img/c.jpeg","img/d.jpeg","img/e.jpeg"];
        //此处Method为上面封装的方法     将arr图片地址数组放入
        Method.loadImage(arr);
        document.addEventListener(Method.EVENT_ID,loadFinishHandler); //给document添加监听事件
        function loadFinishHandler(e) {
            console.log(e.list);   //图片加载完就可以获取到图片list
       }
</script>

事件监听 addEventListener

相关文章

  • 事件总线通信

    事件谁派发谁监听,这里事件都交给$bus派发和监听,在派发事件时调用回调函数 main.js 文件 跨越多层级的...

  • 事件派发&事件监听

    派发事件 dispatchEvent dispatchEvent 向指定目标事件派发一个事件;一般的事件触发是用户...

  • node 内置的模块 - 事件对象 events

    事件对象 events 通过事件监听、派发的方式来更加优化的管理代码,使代码更加简洁,高效 基本使用 自定义事件对...

  • 简单的CocosCreator自定义全局事件

    creator 中的事件:监听和发射事件但是这样并不能完全满足我们的需求,我们通常希望在各个地方自由的派发事件,同...

  • vue 子组件触发父级的函数

    ``` //父级监听子组件触发事件,然后派发父级的事件,子集接收然后执行 父级: //在子组件上绑定 @name=...

  • 使用原生 JS 实现事件委托

    在实现事件委托之前,首先必须先了解事件的绑定、监听和派发的含义。 事件的绑定 这是最直接简单的绑定在DOM元素上的...

  • Android之常用Listener监听器

    常用Listener监听器 ListView事件监听: EditText事件监听: RadioGroup事件监听:...

  • AS/TS的send()异步请求的原生代码

    直接上代码~~~ 注意:想了解后续事件派发和监听,更新前端数据参考https://www.jianshu.com/...

  • 2021-09-22 GUI(事件监听机制)

    事件监听机制组成事件源(组件)事件(Event)监听器(Listener)事件处理(引发事件后处理方式) 事件监听...

  • unity 委托事件

    定义委托及事件 实现事件监听+=(事件取消监听为-=)

网友评论

      本文标题:事件派发&事件监听

      本文链接:https://www.haomeiwen.com/subject/hfpgjltx.html