1.canvas图片预加载和进度条的实现/*star*loadingmodule*实现图片预加载和显示进度条*参数:图片数组对象,loaded回调函数*/functionloadImages(sources,callback){varloadedImages=0;varnumImages=0;ctx.font='14px粗体';ctx.lineWidth=5;varclearWidth=canvas.width;varclearHeight=canvas.height;//获取源的数量(varsrcinsources){numImages++;}for(varsrcinsources){images[src]=newImage();//图片加载时执行images[src].onload=function(){//重绘进度条ctx.clearRect(0,0,clearWidth,clearHeight);ctx.fillText('加载中:'+loadedImages+'/'+numImages,200,280);ctx.保存();ctx.strokeStyle='#555';ctx.beginPath();ctx.moveTo(200,300);ctx.lineTo(600,300);ctx.stroke();.moveTo(200,300);ctx.lineTo(loadedImages/numImages*400+200,300);ctx.stroke();//当所有图片加载完成后,执行回调函数callbackif(++loadedImages>=numImages){callback();}};//将sources中的图片信息导入images数组images[src].src=sources[src];}}//定义预加载图片数组对象并执行加载模块window.onload=function(){varsources={PaperBoy1:"images/run/PaperBoy1.png",PaperBoy2:"images/run/PaperBoy2.png",PaperBoy3:"images/run/PaperBoy3.png",PaperBoy4:"images/run/PaperBoy4.png",PaperBoy5:"images/run/PaperBoy5.png",PaperBoy6:"images/run/PaperBoy6.png",PaperBoy7:“图像/运行/PaperBoy7.png”,PaperBoy8:“图像/运行/PaperBoy8.png”,PaperBoy9:“图像/运行/PaperBoy9.png”,PaperBoy10:“图像/运行/PaperBoy10.png”,PaperBoy11:“images/run/PaperBoy11.png",PaperBoy12:"images/run/PaperBoy12.png",PaperBoy13:"images/run/PaperBoy13.png",PaperBoy14:"images/run/PaperBoy14.png",PaperBoy15:"images/run/PaperBoy15.png",PaperBoy16:"images/run/PaperBoy16.png",PaperBoy17:"images/run/PaperBoy17.png",PaperBoy18:"images/run/PaperBoy18.png",PaperBoy19:"images/run/PaperBoy19.png",PaperBoy20:"images/run/PaperBoy20.png",PaperBoy21:"images/run/PaperBoy21.png",PaperBoy22:"images/run/PaperBoy22.png",PaperBoy23:"images/run/PaperBoy23.png",PaperBoy24:"images/run/PaperBoy24.png"png",_Street:'images/_Street.png',AD:'images/AD.png',building:'images/building.png',cloud:'images/cloud.png'};//进行图片预加载,加载完成后,执行mainloadImages(sources,main);};/*end*/2.JS中实现跨浏览器添加和删除事件的最佳方式是什么?一般的兼容方法如下:cross-browseraddEvent//跨浏览器添加事件函数addEvent(obj,type,fn){if(obj.addEventListener){obj.addEventListener(type,fn,false);}elseif(obj.attachEvent){//IEobj.attchEvent('on'+type,fn);}}跨浏览器移除事件//跨浏览器浏览器移除事件函数removeEvent(obj,type,fn){if(obj.removeEventListener){obj.removeEventListener(type,fn,false);}elseif(obj.detachEvent){//兼容IEobj.detachEvent('on'+type,fn);}}推荐写法functionaddEvent(obj,type,fn){if(obj.attachEvent){obj['e'+type+fn]=fn;obj[type+fn]=function(){obj['e'+type+fn](window.event);}obj.attachEvent('on'+type,obj[type+fn]);}elseobj.addEventListener(type,fn,false);}functionremoveEvent(obj,type,fn){if(obj.detachEvent){obj.detachEvent('on'+type,obj[type+fn]);obj[类型+fn]=null;}elseobj.removeEventListener(type,fn,false);}参考地址addEvent()重新编码竞赛入口addEvent()–跟进3.Ajax使用jsonp跨域发送请求小例子众所周知大家知道,Ajax通过创建XMLHttpRequest对象或者ActiveXObjects来连接服务器,发送请求,响应数据,但是不能跨域。在分布式系统中,我们需要跨域收发数据,于是jsonp出现了……它是一种跨域请求方式,主要是利用script标签中的src属性,可以跨域发送请求,然后服务器返回js代码,网页响应它的信息,然后我们就可以处理它传过来的js代码,从中提取信息。发送jsonp请求,只需要在src后面加上“?callback=functionname”,比如“http://www.item.com/list?callback=myfunction”,那么只需要接受参数myfunction在服务端传入函数名和你要返回的数据可以进行拼接,比如在java中响应请求,可以获取参数回调myfunction的值,然后拼接成myfunction+"("+data+")"并返回。在前端写一个同名函数,接受数据并处理即可。但是jquery封装了jsonp,返回函数是success,数据也是success接受的。例如:前端代码://发送请求$.ajax({//url:"http://localhost:8081/rest/itemcat/list?callback=getMessage",url:"http://localhost:8081/rest/itemcat/message",type:"get",cache:false,dataType:"jsonp",jsonp:"callback",//这里定义callback的参数名,以便服务获取函数callback的名字,getMessagejsonpCallback:"getMessage",//这里定义了jsonp的回调函数success:function(data){alert("success:"+data);},error:function(){alert("发生异常");}});functiongetMessage(jsonp){alert("消息:"+jsonp);}这样发出的请求是:http://localhost:8081/rest/itemcat/message?callback=getMessagejsonp:"callback",jsonpCallback:"getMessage",这两个参数的值会自动拼接在url后面,所以jquery的$.ajax方法发送的url不需要在最后加上callback=getMessag,返回函数变成success而不是getMessage4。使用高德地图API创建地图并获取当前地址的经纬度创建带点标记的API地图根据浏览器Position并获取当前经纬度
