zoukankan      html  css  js  c++  java
  • 提取jQuery的ready方法

    这次的onDOMReady更有吸引力了

    先说明一下,为什么要提取jQuery的ready方法?

    因为在很多时候大家做前端时,需要在DOM树载入时马上执行一些函数,比如对导航条进行初始化。
    但又不愿意仅为了这一个需求而引入整个jQuery库,于是就把jQuery的ready方法提取出来,单独使用了。

    另外你也可以在构建自己的js框架时使用此函数。

    重复一遍,我们的口号是什么?
    彪悍的应用,没有一行代码是多余的!!!

    ready-from-jQuery

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        
    <title>提取自jQuery的ready方法</title>

        
    <script type="text/javascript">


            (
    function () {
                
    var isReady = false//判断onDOMReady方法是否已经被执行过  
                var readyList = []; //把需要执行的方法先暂存在这个数组里  
                var timer; //定时器句柄  
                ready = function (fn) {
                    
    if (isReady)
                        fn.call(document);
                    
    else
                        readyList.push(
    function () { return fn.call(this); });
                    
    return this;
                }
                
    var onDOMReady = function () {
                    
    for (var i = 0; i < readyList.length; i++) {
                        readyList[i].apply(document);
                    }
                    readyList 
    = null;
                }
                
    var bindReady = function (evt) {
                    
    if (isReady) return;
                    isReady 
    = true;
                    onDOMReady.call(window);
                    
    if (document.removeEventListener) {
                        document.removeEventListener(
    "DOMContentLoaded", bindReady, false);
                    } 
    else if (document.attachEvent) {
                        document.detachEvent(
    "onreadystatechange", bindReady);
                        
    if (window == window.top) {
                            clearInterval(timer);
                            timer 
    = null;
                        }
                    }
                };

                
    if (document.addEventListener) {
                    document.addEventListener(
    "DOMContentLoaded", bindReady, false);
                } 
    else if (document.attachEvent) {
                    document.attachEvent(
    "onreadystatechange"function () {
                        
    if ((/loaded|complete/).test(document.readyState))
                            bindReady();
                    });
                    
    if (window == window.top) {
                        timer 
    = setInterval(function () {
                            
    try {
                                isReady 
    || document.documentElement.doScroll('left'); //在IE下用能否执行doScroll判断dom是否加载完毕  
                            } catch (e) {
                                
    return;
                            }
                            bindReady();
                        }, 
    5);
                    }
                }
            })();

            
            
    //使用方法
            ready(navInit); //navInit为已存在的函数  

            
    //或  
            ready(function () {
                navInit();  
            }); 

            
    function navInit() {
                document.getElementById(
    "info").innerHTML = "document.getElementById(“info”).innerHTML = ok";
            }

        
    </script>
    </head>
    <body>

    <div id="info"></div>

    </body>
    </html>

     

     

  • 相关阅读:
    Java JVM启动参数
    使用Navicat连接MySQL8.0版本报1251错误
    安装MySQL和出现的问题解决
    跨域问题:解决跨域的三种方案
    Java8 新特性lambda表达式(一)初始
    搭建docker私有仓库
    crontab定时任务
    CentOS610 php环境安装
    Docker常用命令
    PHP调用python脚本执行时报错
  • 原文地址:https://www.cnblogs.com/didi/p/1753281.html
Copyright © 2011-2022 走看看