Google Maps API的库JS文件分析(2)

        在Google Maps API提供的JS文件中,引用了一个后台的JS库文件,该文件针对不同的浏览器有三个版本,这几天因为我想给我的Google Map扩展一些功能,所以研究了这个文件,我现在正打算陆续将我注释过的该文件放在网上,该文件一共有7000多行,我会分段渐渐的注释出来,我是按照分类注释的,所以并不会按照该JS文件顺序。

        该文件Google作了处理,所有的变量名都被处理成了简单的a,b,c,d之类,所以理解起来比较费劲。

        该JS文件是以IE版本的http://maps.google.com/mapfiles/maps.21.js来分析的,其他的几个我觉得基本的架构也应该差不多,所以我没有仔细看,实际上,这个文件Google也会不停的更新(在我写这个文章的时候,我发现Google已经更新到maps.25.js了),不过我想架构上也不会有太大的变动吧。

        由于该文件是在比较复杂,所以难免会出现理解错误的情况,请谅解!

        下面是第二个(这个主要是文件最开始的时候的一些公用函数的定义):

  1 None.gif // 用来记录浏览器型号、版本和操作系统类型的对象
  2 None.gif      function  Jb(a,b,c)
  3 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
  4InBlock.gif        this.type=a;
  5InBlock.gif        this.version=b;
  6InBlock.gif        this.os=c
  7ExpandedBlockEnd.gif    }
;
  8 None.gif // 下面的代码生成一个浏览器信息的实例
  9 None.gif      var  t = new  Jb( 0 , 0 , null );
 10 None.gif     var  fa = navigator.userAgent.toLowerCase();
 11 None.gif     if (fa.indexOf( " opera " ) !=- 1 )
 12 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 13InBlock.gif        t.type=4;
 14InBlock.gif        if(fa.indexOf("opera/7")!=-1||fa.indexOf("opera 7")!=-1)
 15ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 16InBlock.gif            t.version=7
 17ExpandedSubBlockEnd.gif        }

 18InBlock.gif        else if(fa.indexOf("opera/8")!=-1||fa.indexOf("opera 8")!=-1)
 19ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 20InBlock.gif            t.version=8
 21ExpandedSubBlockEnd.gif        }

 22ExpandedBlockEnd.gif    }

 23 None.gif     else   if (fa.indexOf( " msie " ) !=- 1 && document.all)
 24 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 25InBlock.gif        t.type=1;
 26InBlock.gif        if(fa.indexOf("msie 5"))
 27ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 28InBlock.gif            t.version=5
 29ExpandedSubBlockEnd.gif        }

 30ExpandedBlockEnd.gif    }

 31 None.gif     else   if (fa.indexOf( " safari " ) !=- 1 )
 32 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 33InBlock.gif        t.type=3
 34ExpandedBlockEnd.gif    }

 35 None.gif     else   if (fa.indexOf( " mozilla " ) !=- 1 )
 36 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 37InBlock.gif        t.type=2
 38ExpandedBlockEnd.gif    }

 39 None.gif     if (fa.indexOf( " x11; " ) !=- 1 )
 40 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 41InBlock.gif        t.os=1
 42ExpandedBlockEnd.gif    }

 43 None.gif     else   if (fa.indexOf( " macintosh " ) !=- 1 )
 44 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 45InBlock.gif        t.os=2
 46ExpandedBlockEnd.gif    }
;
 47 None.gif     var  aa = Number.MAX_VALUE;
 48 None.gif // 在C毫秒之后,以a为对象的实例执行方法b,返回对象句柄
 49 None.gif      function  qa(a,b,c)
 50 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 51ExpandedSubBlockStart.gifContractedSubBlock.gif        var d=window.setTimeout(function()dot.gif{b.apply(a)},c);
 52InBlock.gif        return d
 53ExpandedBlockEnd.gif    }

 54 None.gif // 每隔c毫秒,以a为对象的实例执行方法b,返回对象句柄
 55 None.gif      function  Cb(a,b,c)
 56 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 57ExpandedSubBlockStart.gifContractedSubBlock.gif        var d=window.setInterval(function()dot.gif{b.apply(a)},c);
 58InBlock.gif        return d
 59ExpandedBlockEnd.gif    }

 60 None.gif // 将html转化为文本
 61 None.gif      function  ra(a)
 62 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 63InBlock.gif        return a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")
 64ExpandedBlockEnd.gif    }

 65 None.gif // 将"替换为&quot;
 66 None.gif      function  qd(a)
 67 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 68InBlock.gif        return ra(a).replace(/\"/g,"&quot;")
 69InBlock.gif    }
 70InBlock.gif//清空数组a
 71InBlock.gif    function Zc(a)
 72InBlock.gif    {
 73InBlock.gif        a.length=0
 74InBlock.gif    }
 75InBlock.gif//将控件a的鼠标样式设置为b
 76InBlock.gif    function G(a,b)
 77InBlock.gif    {
 78InBlock.gif        try
 79InBlock.gif        {
 80InBlock.gif            a.style.cursor=b
 81InBlock.gif        }
 82InBlock.gif        catch(c)
 83InBlock.gif        {
 84InBlock.gif            if(b=="pointer")
 85InBlock.gif            {
 86InBlock.gif                G(a,"hand")
 87InBlock.gif            }
 88InBlock.gif        }
 89InBlock.gif    }
 90InBlock.gif//中止事件a的执行,并返回false
 91InBlock.gif    function B(a)
 92InBlock.gif    {
 93InBlock.gif        if(t.type==1)
 94InBlock.gif        {
 95InBlock.gif            window.event.cancelBubble=true;
 96InBlock.gif            window.event.returnValue=false
 97InBlock.gif        }
 98InBlock.gif        else
 99InBlock.gif        {
100InBlock.gif            a.cancelBubble=true;
101InBlock.gif            a.preventDefault();
102InBlock.gif            a.stopPropagation()
103InBlock.gif        }
104InBlock.gif    }
105InBlock.gif//终止事件的执行
106InBlock.gif    function $a(a)
107InBlock.gif    {
108InBlock.gif        if(t.type==1)
109InBlock.gif        {
110InBlock.gif            window.event.cancelBubble=true
111InBlock.gif        }
112InBlock.gif        else
113InBlock.gif        {
114InBlock.gif            a.stopPropagation()
115InBlock.gif        }
116InBlock.gif    }
117InBlock.gif//如果浏览器JS不支持数组的push方法,则使用自定义的Push方法
118InBlock.gif    if(!Array.prototype.push)
119InBlock.gif    {
120InBlock.gif        Array.prototype.push=function(a)
121InBlock.gif        {
122InBlock.gif            this[this.length]=a
123InBlock.gif        }
124InBlock.gif    }
125InBlock.gif//返回id为a的对象
126InBlock.gif    function vb(a)
127InBlock.gif    {
128InBlock.gif        return document.getElementById(a)
129InBlock.gif    }
130InBlock.gif//将数字a转化为一个象素值
131InBlock.gif    function k(a)
132InBlock.gif    {
133InBlock.gif        return Math.round(a)+"px"
134InBlock.gif    }
135InBlock.gif//返回a对象左上角相对于页面左上角的距离
136InBlock.gif    function Na(a)
137InBlock.gif    {
138InBlock.gif        var b=
139InBlock.gif        {
140InBlock.gif            "x":0,"y":0
141InBlock.gif        };
142InBlock.gif        while(a)
143InBlock.gif        {
144InBlock.gif            b.x+=a.offsetLeft;
145InBlock.gif            b.y+=a.offsetTop;
146InBlock.gif            a=a.offsetParent
147InBlock.gif        }
148InBlock.gif        return b
149InBlock.gif    }
150InBlock.gif//返回双击事件a的发生点相对控件b左上角的距离
151InBlock.gif    function za(a,b)
152InBlock.gif    {
153InBlock.gif        if(typeof a.offsetX!="undefined")
154InBlock.gif        {
155InBlock.gif            var c=a.target||a.srcElement;
156InBlock.gif            var d=jd(c,b);
157InBlock.gif            return new r(a.offsetX+d.x,a.offsetY+d.y)
158InBlock.gif        }
159InBlock.gif        else if(typeof a.pageX!="undefined")
160InBlock.gif        {
161InBlock.gif            var e=Na(b);
162InBlock.gif            return new r(a.pageX-e.x,a.pageY-e.y)
163InBlock.gif        }
164InBlock.gif        else
165InBlock.gif        {
166InBlock.gif            z.incompatible("dblclick");    //返回浏览器不兼容双击的提示
167InBlock.gif            return new r()
168InBlock.gif        }
169InBlock.gif    }
170InBlock.gif//返回控件a左上角相对于控件b左上角的距离
171InBlock.gif    function jd(a,b)
172InBlock.gif    {
173InBlock.gif        var c={"x":0,"y":0};
174InBlock.gif        while(a&&a!=b)
175InBlock.gif        {
176InBlock.gif            c.x+=a.offsetLeft;
177InBlock.gif            c.y+=a.offsetTop;
178InBlock.gif            a=a.offsetParent
179InBlock.gif        }
180InBlock.gif        return c
181InBlock.gif    }
182InBlock.gif//空函数,用来置空事件处理过程
183InBlock.gif    function _nullFunction()
184InBlock.gif    {
185InBlock.gif    }
186InBlock.gif//删除a节点
187InBlock.gif    function Ma(a)
188InBlock.gif    {
189InBlock.gif        if(a&&a.parentNode)
190InBlock.gif        {
191InBlock.gif            a.parentNode.removeChild(a)
192InBlock.gif        }
193InBlock.gif    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值