• Notes:DOM的事件模拟


    首先使用document对象的createEvent方法创建一个事件对象,然后初始化该事件对象,接着使用支持事件DOM节点的dispatchEvent方法触发事件。

    DOM2级事件和DOM3级事件有些不同,如下图所示,DOM2传给createEvent方法的字符串为英文复数,而DOM3则为单数。

    下面为一个模拟点击事件的代码

    show.addEventListener('click',function(e){
        console.log('click');
    },!1);
    show.addEventListener('keydown',function(e){
        console.log('keydown');
    },!1)
    var event = document.createEvent('MouseEvents');
    event.initMouseEvent('click',!0,!0,document.defaultView);
    show.dispatchEvent(event);
    

    var keyEvent = document.createEvent('KeyboardEvent'); keyEvent.initKeyboardEvent('keydown',!0,!0,document.defaultView); show.dispatchEvent(keyEvent);

    也可以使用各种事件的构造函数来做,例如使用CustomEvent构造函数自定义事件,如下所示

    var customEvent = new CustomEvent('test',{detail:"hello world"});
    show.dispatchEvent(customEvent);

    在ie9及以上不能使用构造函数来做,但是可以通过pollfill来做,如下所示

    (function(){
        function CustomEvent(type,optional){
            optional = optional || { bubbles: false, cancelable: false, detail: undefined };
            var evt = document.createEvent('CustomEvent');
            evt.initCustomEvent(type,optional);
            return evt;
        }
        CustomEvent.prototype = window.Event.prototype;
        window.CustomEvent = CustomEvent;
    })();

     IE8及以下模拟事件

    同样,首先创建一个event对象(document.createEventObject),然后初始化该对象,再触发该事件(fireEvent),下面为一个点击事件的例子

    var event = document.createEventObject();
    //初始化事件对象
    event.screenX = 100;
    event.screenY = 0;
    event.clientX = 0;
    event.clientY = 0;
    event.ctrlKey = false;
    event.altKey = false;
    show.fireEvent('onclick',event);
  • 相关阅读:
    [20181130]hash冲突导致查询缓慢.txt
    [20181130]control file sequential read.txt
    [20181124]关于降序索引问题3.txt
    [20181124]关于降序索引问题2.txt
    [20181122]模拟ORA-08103错误.txt
    [20181116]18c DML 日志优化.txt
    [20181109]12c sqlplus rowprefetch参数5
    [20181109]12cR2 的pre_page_sga参数
    [20181108]12c sqlplus rowfetch参数4.txt
    ubuntu15.10 给解压版的eclipse安装桌面快捷方式
  • 原文地址:https://www.cnblogs.com/zmxmumu/p/6023226.html
Copyright © 2020-2023  润新知