⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eventmanager.js

📁 ajax框架extjs是一套完整的富客户端解决方案
💻 JS
📖 第 1 页 / 共 3 页
字号:
/*
 * Ext JS Library 2.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */

/** * @class Ext.EventManager * Registers event handlers that want to receive a normalized EventObject instead of the standard browser event and provides * several useful events directly. * See {@link Ext.EventObject} for more details on normalized event objects. * @singleton */Ext.EventManager = function(){    var docReadyEvent, docReadyProcId, docReadyState = false;    var resizeEvent, resizeTask, textEvent, textSize;    var E = Ext.lib.Event;    var D = Ext.lib.Dom;    // fix parser confusion    var xname = 'Ex' + 't';    var elHash = {};    var addListener = function(el, ename, fn, wrap, scope){        var id = Ext.id(el);        if(!elHash[id]){            elHash[id] = {};        }        var es = elHash[id];        if(!es[ename]){            es[ename] = [];        }        var ls = es[ename];        ls.push({            id: id,            ename: ename,            fn: fn,            wrap: wrap,            scope: scope        });         E.on(el, ename, wrap);        if(ename == "mousewheel" && el.addEventListener){ // workaround for jQuery            el.addEventListener("DOMMouseScroll", wrap, false);            E.on(window, 'unload', function(){                el.removeEventListener("DOMMouseScroll", wrap, false);            });        }        if(ename == "mousedown" && el == document){ // fix stopped mousedowns on the document            Ext.EventManager.stoppedMouseDownEvent.addListener(wrap);        }    }    var removeListener = function(el, ename, fn, scope){        el = Ext.getDom(el);        var id = Ext.id(el), es = elHash[id], wrap;        if(es){            var ls = es[ename], l;            if(ls){                for(var i = 0, len = ls.length; i < len; i++){                    l = ls[i];                    if(l.fn == fn && (!scope || l.scope == scope)){                        wrap = l.wrap;                        E.un(el, ename, wrap);                        ls.splice(i, 1);                        break;                    }                }            }        }        if(ename == "mousewheel" && el.addEventListener && wrap){            el.removeEventListener("DOMMouseScroll", wrap, false);        }        if(ename == "mousedown" && el == document && wrap){ // fix stopped mousedowns on the document            Ext.EventManager.stoppedMouseDownEvent.removeListener(wrap);        }    }    var removeAll = function(el){        el = Ext.getDom(el);        var id = Ext.id(el), es = elHash[id], ls;        if(es){            for(var ename in es){                if(es.hasOwnProperty(ename)){                    ls = es[ename];                    for(var i = 0, len = ls.length; i < len; i++){                        E.un(el, ename, ls[i].wrap);                        ls[i] = null;                    }                }                es[ename] = null;            }            delete elHash[id];        }    }     var fireDocReady = function(){        if(!docReadyState){            docReadyState = Ext.isReady = true;            if(Ext.isGecko || Ext.isOpera) {                document.removeEventListener("DOMContentLoaded", fireDocReady, false);            }        }        if(docReadyProcId){            clearInterval(docReadyProcId);            docReadyProcId = null;        }        if(docReadyEvent){            docReadyEvent.fire();            docReadyEvent.clearListeners();       }    };    var initDocReady = function(){        docReadyEvent = new Ext.util.Event();        if(Ext.isReady){            return;        }        // no matter what, make sure it fires on load        E.on(window, 'load', fireDocReady);        if(Ext.isGecko || Ext.isOpera) {            document.addEventListener('DOMContentLoaded', fireDocReady, false);        }        else if(Ext.isIE){            docReadyProcId = setInterval(function(){                try{                    // throws errors until DOM is ready                    Ext.isReady || (document.documentElement.doScroll('left'));                }catch(e){                    return;                }                fireDocReady();  // no errors, fire            }, 5);			document.onreadystatechange = function(){				if(document.readyState == 'complete'){					document.onreadystatechange = null;					fireDocReady();				}            };        }        else if(Ext.isSafari){            docReadyProcId = setInterval(function(){                var rs = document.readyState;                if(rs == 'complete') {                    fireDocReady();                 }            }, 10);        }    };    var createBuffered = function(h, o){        var task = new Ext.util.DelayedTask(h);        return function(e){            // create new event object impl so new events don't wipe out properties            e = new Ext.EventObjectImpl(e);            task.delay(o.buffer, h, null, [e]);        };    };    var createSingle = function(h, el, ename, fn, scope){        return function(e){            Ext.EventManager.removeListener(el, ename, fn, scope);            h(e);        };    };    var createDelayed = function(h, o){        return function(e){            // create new event object impl so new events don't wipe out properties            e = new Ext.EventObjectImpl(e);            setTimeout(function(){                h(e);            }, o.delay || 10);        };    };    var listen = function(element, ename, opt, fn, scope){        var o = (!opt || typeof opt == "boolean") ? {} : opt;        fn = fn || o.fn; scope = scope || o.scope;        var el = Ext.getDom(element);        if(!el){            throw "Error listening for \"" + ename + '\". Element "' + element + '" doesn\'t exist.';        }        var h = function(e){            // prevent errors while unload occurring            if(!window[xname]){                return;            }            e = Ext.EventObject.setEvent(e);            var t;            if(o.delegate){                t = e.getTarget(o.delegate, el);                if(!t){                    return;                }            }else{                t = e.target;            }            if(o.stopEvent === true){                e.stopEvent();            }            if(o.preventDefault === true){               e.preventDefault();            }            if(o.stopPropagation === true){                e.stopPropagation();            }            if(o.normalized === false){                e = e.browserEvent;            }            fn.call(scope || el, e, t, o);        };        if(o.delay){            h = createDelayed(h, o);        }        if(o.single){            h = createSingle(h, el, ename, fn, scope);        }        if(o.buffer){            h = createBuffered(h, o);        }        addListener(el, ename, fn, h, scope);        return h;    };    var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;    var pub = {    /**     * Appends an event handler to an element.  The shorthand version {@link #on} is equivalent.  Typically you will     * use {@link Ext.Element#addListener} directly on an Element in favor of calling this version.     * @param {String/HTMLElement} el The html element or id to assign the event handler to     * @param {String} eventName The type of event to listen for     * @param {Function} handler The handler function the event invokes This function is passed     * the following parameters:<ul>     * <li>evt : EventObject<div class="sub-desc">The {@link Ext.EventObject EventObject} describing the event.</div></li>     * <li>t : Element<div class="sub-desc">The {@link Ext.Element Element} which was the target of the event.     * Note that this may be filtered by using the <tt>delegate</tt> option.</div></li>     * <li>o : Object<div class="sub-desc">The options object from the addListener call.</div></li>     * </ul>     * @param {Object} scope (optional) The scope in which to execute the handler     * function (the handler function's "this" context)     * @param {Object} options (optional) An object containing handler configuration properties.     * This may contain any of the following properties:<ul>     * <li>scope {Object} : The scope in which to execute the handler function. The handler function's "this" context.</li>     * <li>delegate {String} : A simple selector to filter the target or look for a descendant of the target</li>     * <li>stopEvent {Boolean} : True to stop the event. That is stop propagation, and prevent the default action.</li>     * <li>preventDefault {Boolean} : True to prevent the default action</li>     * <li>stopPropagation {Boolean} : True to prevent event propagation</li>     * <li>normalized {Boolean} : False to pass a browser event to the handler function instead of an Ext.EventObject</li>     * <li>delay {Number} : The number of milliseconds to delay the invocation of the handler after te event fires.</li>     * <li>single {Boolean} : True to add a handler to handle just the next firing of the event, and then remove itself.</li>     * <li>buffer {Number} : Causes the handler to be scheduled to run in an {@link Ext.util.DelayedTask} delayed     * by the specified number of milliseconds. If the event fires again within that time, the original     * handler is <em>not</em> invoked, but the new handler is scheduled in its place.</li>     * </ul><br>     * <p>See {@link Ext.Element#addListener} for examples of how to use these options.</p>     */        addListener : function(element, eventName, fn, scope, options){            if(typeof eventName == "object"){                var o = eventName;                for(var e in o){                    if(propRe.test(e)){                        continue;                    }                    if(typeof o[e] == "function"){                        // shared options                        listen(element, e, o, o[e], o.scope);                    }else{                        // individual options                        listen(element, e, o[e]);                    }                }                return;            }            return listen(element, eventName, options, fn, scope);        },        /**         * Removes an event handler from an element.  The shorthand version {@link #un} is equivalent.  Typically         * you will use {@link Ext.Element#removeListener} directly on an Element in favor of calling this version.         * @param {String/HTMLElement} el The id or html element from which to remove the event         * @param {String} eventName The type of event         * @param {Function} fn The handler function to remove         */        removeListener : function(element, eventName, fn, scope){            return removeListener(element, eventName, fn, scope);        },        /**         * Removes all event handers from an element.  Typically you will use {@link Ext.Element#removeAllListeners}         * directly on an Element in favor of calling this version.         * @param {String/HTMLElement} el The id or html element from which to remove the event         */        removeAll : function(element){            return removeAll(element);        },        /**         * Fires when the document is ready (before onload and before images are loaded). Can be         * accessed shorthanded as Ext.onReady().

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -