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

📄 event.js

📁 这是YUI的源码及相关示例。里面有很多很炫的Javascript效果。
💻 JS
📖 第 1 页 / 共 5 页
字号:
            /**             * Executes the supplied callback when the item with the supplied             * id is found.  This is meant to be used to execute behavior as             * soon as possible as the page loads.  If you use this after the             * initial page load it will poll for a fixed time for the element.             * The number of times it will poll and the frequency are             * configurable.  By default it will poll for 10 seconds.             *             * <p>The callback is executed with a single parameter:             * the custom object parameter, if provided.</p>             *             * @method onAvailable             *             * @param {string||string[]}   p_id the id of the element, or an array             * of ids to look for.             * @param {function} p_fn what to execute when the element is found.             * @param {object}   p_obj an optional object to be passed back as             *                   a parameter to p_fn.             * @param {boolean|object}  p_override If set to true, p_fn will execute             *                   in the scope of p_obj, if set to an object it             *                   will execute in the scope of that object             * @param checkContent {boolean} check child node readiness (onContentReady)             * @static             */            onAvailable: function(p_id, p_fn, p_obj, p_override, checkContent) {                var a = (YAHOO.lang.isString(p_id)) ? [p_id] : p_id;                for (var i=0; i<a.length; i=i+1) {                    onAvailStack.push({id:         a[i],                                        fn:         p_fn,                                        obj:        p_obj,                                        override:   p_override,                                        checkReady: checkContent });                }                retryCount = this.POLL_RETRYS;                this.startInterval();            },            /**             * Works the same way as onAvailable, but additionally checks the             * state of sibling elements to determine if the content of the             * available element is safe to modify.             *             * <p>The callback is executed with a single parameter:             * the custom object parameter, if provided.</p>             *             * @method onContentReady             *             * @param {string}   p_id the id of the element to look for.             * @param {function} p_fn what to execute when the element is ready.             * @param {object}   p_obj an optional object to be passed back as             *                   a parameter to p_fn.             * @param {boolean|object}  p_override If set to true, p_fn will execute             *                   in the scope of p_obj.  If an object, p_fn will             *                   exectute in the scope of that object             *             * @static             */            onContentReady: function(p_id, p_fn, p_obj, p_override) {                this.onAvailable(p_id, p_fn, p_obj, p_override, true);            },            /**             * Executes the supplied callback when the DOM is first usable.  This             * will execute immediately if called after the DOMReady event has             * fired.   @todo the DOMContentReady event does not fire when the             * script is dynamically injected into the page.  This means the             * DOMReady custom event will never fire in FireFox or Opera when the             * library is injected.  It _will_ fire in Safari, and the IE              * implementation would allow for us to fire it if the defered script             * is not available.  We want this to behave the same in all browsers.             * Is there a way to identify when the script has been injected              * instead of included inline?  Is there a way to know whether the              * window onload event has fired without having had a listener attached              * to it when it did so?             *             * <p>The callback is a CustomEvent, so the signature is:</p>             * <p>type &lt;string&gt;, args &lt;array&gt;, customobject &lt;object&gt;</p>             * <p>For DOMReady events, there are no fire argments, so the             * signature is:</p>             * <p>"DOMReady", [], obj</p>             *             *             * @method onDOMReady             *             * @param {function} p_fn what to execute when the element is found.             * @param {object}   p_obj an optional object to be passed back as             *                   a parameter to p_fn.             * @param {boolean|object}  p_scope If set to true, p_fn will execute             *                   in the scope of p_obj, if set to an object it             *                   will execute in the scope of that object             *             * @static             */            onDOMReady: function(p_fn, p_obj, p_override) {                if (this.DOMReady) {                    setTimeout(function() {                        var s = window;                        if (p_override) {                            if (p_override === true) {                                s = p_obj;                            } else {                                s = p_override;                            }                        }                        p_fn.call(s, "DOMReady", [], p_obj);                    }, 0);                } else {                    this.DOMReadyEvent.subscribe(p_fn, p_obj, p_override);                }            },            /**             * Appends an event handler             *             * @method _addListener             *             * @param {String|HTMLElement|Array|NodeList} el An id, an element              *  reference, or a collection of ids and/or elements to assign the              *  listener to.             * @param {String}   sType     The type of event to append             * @param {Function} fn        The method the event invokes             * @param {Object}   obj    An arbitrary object that will be              *                             passed as a parameter to the handler             * @param {Boolean|object}  override  If true, the obj passed in becomes             *                             the execution scope of the listener. If an             *                             object, this object becomes the execution             *                             scope.             * @param {boolen}      capture capture or bubble phase             * @return {Boolean} True if the action was successful or defered,             *                        false if one or more of the elements              *                        could not have the listener attached,             *                        or if the operation throws an exception.             * @private             * @static             */            _addListener: function(el, sType, fn, obj, override, capture) {                if (!fn || !fn.call) {                    return false;                }                // The el argument can be an array of elements or element ids.                if ( this._isValidCollection(el)) {                    var ok = true;                    for (var i=0,len=el.length; i<len; ++i) {                        ok = this._addListener(el[i],                                        sType,                                        fn,                                        obj,                                        override,                                        capture) && ok;                    }                    return ok;                } else if (YAHOO.lang.isString(el)) {                    var oEl = this.getEl(el);                    // If the el argument is a string, we assume it is                     // actually the id of the element.  If the page is loaded                    // we convert el to the actual element, otherwise we                     // defer attaching the event until onload event fires                    // check to see if we need to delay hooking up the event                     // until after the page loads.                    if (oEl) {                        el = oEl;                    } else {                        // defer adding the event until the element is available                        this.onAvailable(el, function() {                           YAHOO.util.Event._addListener(el, sType, fn, obj, override, capture);                        });                        return true;                    }                }                // Element should be an html element or an array if we get                 // here.                if (!el) {                    return false;                }                // we need to make sure we fire registered unload events                 // prior to automatically unhooking them.  So we hang on to                 // these instead of attaching them to the window and fire the                // handles explicitly during our one unload event.                if ("unload" == sType && obj !== this) {                    unloadListeners[unloadListeners.length] =                            [el, sType, fn, obj, override, capture];                    return true;                }                // if the user chooses to override the scope, we use the custom                // object passed in, otherwise the executing scope will be the                // HTML element that the event is registered on                var scope = el;                if (override) {                    if (override === true) {                        scope = obj;                    } else {                        scope = override;                    }                }                // wrap the function so we can return the obj object when                // the event fires;                var wrappedFn = function(e) {                        return fn.call(scope, YAHOO.util.Event.getEvent(e, el),                                 obj);                    };                var li = [el, sType, fn, wrappedFn, scope, obj, override, capture];                var index = listeners.length;                // cache the listener so we can try to automatically unload                listeners[index] = li;                if (this.useLegacyEvent(el, sType)) {                    var legacyIndex = this.getLegacyIndex(el, sType);                    // Add a new dom0 wrapper if one is not detected for this                    // element                    if ( legacyIndex == -1 ||                                 el != legacyEvents[legacyIndex][0] ) {                        legacyIndex = legacyEvents.length;                        legacyMap[el.id + sType] = legacyIndex;                        // cache the signature for the DOM0 event, and                         // include the existing handler for the event, if any                        legacyEvents[legacyIndex] =                             [el, sType, el["on" + sType]];                        legacyHandlers[legacyIndex] = [];                        el["on" + sType] =                             function(e) {                                YAHOO.util.Event.fireLegacyEvent(                                    YAHOO.util.Event.getEvent(e), legacyIndex);                            };                    }                    // add a reference to the wrapped listener to our custom                    // stack of events                    //legacyHandlers[legacyIndex].push(index);                    legacyHandlers[legacyIndex].push(li);                } else {                    try {                        this._simpleAdd(el, sType, wrappedFn, capture);                    } catch(ex) {                        // handle an error trying to attach an event.  If it fails                        // we need to clean up the cache                        this.lastError = ex;                        this._removeListener(el, sType, fn, capture);                        return false;                    }                }                return true;                            },            /**             * Appends an event handler             *             * @method addListener             *             * @param {String|HTMLElement|Array|NodeList} el An id, an element              *  reference, or a collection of ids and/or elements to assign the              *  listener to.             * @param {String}   sType     The type of event to append             * @param {Function} fn        The method the event invokes             * @param {Object}   obj    An arbitrary object that will be              *                             passed as a parameter to the handler             * @param {Boolean|object}  override  If true, the obj passed in becomes             *                             the execution scope of the listener. If an             *                             object, this object becomes the execution             *                             scope.             * @return {Boolean} True if the action was successful or defered,             *                        false if one or more of the elements              *                        could not have the listener attached,             *                        or if the operation throws an exception.             * @static             */            addListener: function (el, sType, fn, obj, override) {                return this._addListener(el, sType, fn, obj, override, false);            },            /**             * Appends a focus event handler.  (The focusin event is used for Internet Explorer,              * the focus, capture-event for Opera, WebKit, and Gecko.)             *             * @method addFocusListener             *             * @param {String|HTMLElement|Array|NodeList} el An id, an element              *  reference, or a collection of ids and/or elements to assign the              *  listener to.             * @param {Function} fn        The method the event invokes             * @param {Object}   obj    An arbitrary object that will be              *                             passed as a parameter to the handler             * @param {Boolean|object}  override  If true, the obj passed in becomes             *                             the execution scope of the listener. If an             *                             object, this object becomes the execution             *                             scope.             * @return {Boolean} True if the action was successful or defered,             *                        false if one or more of the elements              *                        could not have the listener attached,             *                        or if the operation throws an exception.             * @static             */            addFocusListener: function (el, fn, obj, override) {                return this._addListener(el, _FOCUS, fn, obj, override, true);            },                      /**             * Removes a focus event listener             *             * @method removeFocusListener             *             * @param {String|HTMLElement|Array|NodeList} el An id, an element              *  reference, or a collection of ids and/or elements to remove             *  the listener from.             * @param {Function} fn the method the event invokes.  If fn is             *  undefined, then all event handlers for the type of event are              *  removed.             * @return {boolean} true if the unbind was successful, false              *  otherwise.             * @static             */            removeFocusListener: function (el, fn) {                 return this._removeListener(el, _FOCUS, fn, true);            },            /**             * Appends a blur event handler.  (The focusout event is used for Internet Explorer,              * the focusout, capture-event for Opera, WebKit, and Gecko.)             *             * @method addBlurListener             *             * @param {String|HTMLElement|Array|NodeList} el An id, an element              *  reference, or a collection of ids and/or elements to assign the              *  listener to.             * @param {Function} fn        The method the event invokes             * @param {Object}   obj    An arbitrary object that will be              *                             passed as a parameter to the handler             * @param {Boolean|object}  override  If true, the obj passed in becomes             *                             the execution scope of the listener. If an             *                             object, this object becomes the execution             *                             scope.             * @return {Boolean} True if the action was successful or defered,             *                        false if one or more of the elements              *                        could not have the listener attached,             *                        or if the operation throws an exception.             * @static             */            addBlurListener: function (el, fn, obj, override) {                return this._addListener(el, _BLUR, fn, obj, override, true);            },          

⌨️ 快捷键说明

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