1.canvas图片预加载及进度条的完成
/*star
*loading模块
*完成图片的预加载,并显现进度条
*参数:图片数组对象,加载完成的回调函数
*/
function loadImages(sources,callback){
var loadedImages = 0;
var numImages = 0;
ctx.font='14px bold';
ctx.lineWidth=5;
var clearWidth=canvas.width;
var clearHeight=canvas.height;
// get num of sources
for (var src in sources) {
numImages++;
}
for (var src in sources) {
images[src] = new Image();
//当一张图片加载完成时实行
images[src].onload = function(){
//重绘一个进度条
ctx.clearRect(0,0,clearWidth,clearHeight);
ctx.fillText('Loading:'+loadedImages+'/'+numImages,200,280);
ctx.save();
ctx.strokeStyle='#555';
ctx.beginPath();
ctx.moveTo(200,300);
ctx.lineTo(600,300);
ctx.stroke();
ctx.beginPath();
ctx.restore();
ctx.moveTo(200,300);
ctx.lineTo(loadedImages/numImages*400+200,300);
ctx.stroke();
//当一切图片加载完成时,实行回调函数callback
if (++loadedImages >= numImages) {
callback();
}
};
//把sources中的图片信息导入images数组
images[src].src = sources[src];
}
}
//定义预加载图片数组对象,实行loading模块
window.onload = function(){
var sources = {
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: "images/run/PaperBoy7.png",
PaperBoy8: "images/run/PaperBoy8.png",
PaperBoy9: "images/run/PaperBoy9.png",
PaperBoy10: "images/run/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",
_Street:'images/_Street.png',
AD:'images/AD.png',
building:'images/building.png',
cloud:'images/cloud.png'
};
//实行图片预加载,加载完成后实行main
loadImages(sources,main);
};
/*end*/
2.JS完成跨浏览器增加事宜与移除事宜如何做才最优?
平常的兼容做法,以下:
跨浏览器增加事宜
//跨浏览器增加事宜
function addEvent(obj,type,fn){
if(obj.addEventListener){
obj.addEventListener(type,fn,false);
}else if(obj.attachEvent){//IE
obj.attchEvent('on'+type,fn);
}
}
跨浏览器移除事宜
//跨浏览器移除事宜
function removeEvent(obj,type,fn){
if(obj.removeEventListener){
obj.removeEventListener(type,fn,false);
}else if(obj.detachEvent){//兼容IE
obj.detachEvent('on'+type,fn);
}
}
引荐写法
function addEvent( 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] );
} else
obj.addEventListener( type, fn, false );
}
function removeEvent( obj, type, fn ) {
if ( obj.detachEvent ) {
obj.detachEvent( 'on'+type, obj[type+fn] );
obj[type+fn] = null;
} else
obj.removeEventListener( type, fn, false );
}
参考地点
addEvent() recoding contest entry
addEvent() – Follow Up
3.Ajax用jsonp体式格局跨域发送要求小实例
尽人皆知,Ajax是经由过程建立XMLHttpRequest对象或ActiveXObject来衔接效劳器、发送要求以及相应数据,但它却不能跨域。而在分布式体系中我们又须要跨域发送接收数据,因而jsonp涌现了…
它是一种跨域要求体式格局,重要利用了script标签里的src属性,该属性能够跨域发送要求,然后效劳器返回js代码,网页端便相应其信息,然后我们能够对其传过来的js代码做处置惩罚提取个中的信息。
jsonp发送要求只需在src背面增加“?callback=函数名”就能够,比方“http://www.item.com/list?callback=myfunction
“,则只需在效劳端接收参数myfunction
并将函数名与想要返回的数据拼接就能够比方在java中相应当要求,能够猎取参数callback的值myfunction,再拼接成myfunction+”(“+data+”)”花样返回就行,在前端写同名函数接收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的函数名即getMessage
jsonpCallback:"getMessage", //这里定义了jsonp的回调函数
success:function(data){
alert("success:"+data);
},
error:function(){
alert("发作非常");
}
});
function getMessage(jsonp){
alert("message:"+jsonp);
}
如许发出的要求为:http://localhost:8081/rest/itemcat/message?callback=getMessage
jsonp:”callback”,
jsonpCallback:”getMessage”,
这两个参数的值会自动拼接在url背面,所以用jquery的$.ajax要领发出的url能够不必在背面增加callback=getMessag,返回函数则变为了success而不是getMessage
4.运用高德舆图API建立舆图以及猎取当前地点经纬度
建立API舆图带有点标记
<script src="http://webapi.amap.com/maps?v=1.4.1&key=bcf87f3263f98cc37309298bca20c622"></script>
<script type="text/javascript">
// 实例化点标记
function addMarker() {
marker = new AMap.Marker({
icon: "http://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",
position: [116.41, 39.91]
});
marker.setMap(map);
}
var map = new AMap.Map('container', {
resizeEnable: true,
center: [116.40, 39.91],
zoom: 13
});
addMarker();
</script>
依据浏览器定位猎取当前经纬度
<div id="container_display"></div>
<script src="https://webapi.amap.com/maps?v=1.4.1&key=bcf87f3263f98cc37309298bca20c622"></script>
<script>
function loadingCurrentPosition(callback){
document.getElementById('container_display').innerHTML = '';
//加载舆图,挪用浏览器定位效劳
map = new AMap.Map('container_display', {
resizeEnable: true
});
map.plugin('AMap.Geolocation', function() {
geolocation = new AMap.Geolocation({
enableHighAccuracy: true,//是不是运用高精度定位,默许:true
timeout: 10000, //凌驾10秒后住手定位,默许:无穷大
buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默许:Pixel(10, 20)
zoomToAccuracy: true, //定位胜利后调解舆图视野局限使定位位置及精度局限视野内可见,默许:false
buttonPosition:'RB'
});
map.addControl(geolocation);
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
AMap.event.addListener(geolocation, 'error', onError); //返回定位失足信息
});
//剖析定位效果
function onComplete(data) {
var getLngdata = data.position.getLng();
var getLatdata = data.position.getLat();
if(callback){
callback(getLngdata,getLatdata); //回调参数中通报经度与纬度
}
}
//剖析定位错误信息
function onError(data) {
alert('定位失利');
}
}
$(function(){
var getLng = ''; //存经度
var getLat = ''; //存纬度
//默许加载一次自动猎取当前人的位置
loadingCurrentPosition(function(lngdata,Latdata){
getLng = lngdata;
getLat = Latdata;
});
$(".getCurrentPosition").on('click',function(){
loadingCurrentPosition(function(lngdata,Latdata){
getLng = lngdata;
getLat = Latdata;
});
});
})
</script>
高德舆图依据浏览器定位猎取当前经纬度API案例地点:http://lbs.amap.com/api/javascript-api/example/location/browser-location
高德开放平台:http://lbs.amap.com/api
5.JS建立canvas进修小例代码
1.HTML5中的Canvas标签的建立
window.onload = function(){
createCanvas();
}
function createCanvas(){
var canvas_width= 200, canvas_height = 200;
document.body.innerHTML = "<canvas id=\"canvas\" width=\""+canvas_width+"\" height=\""+canvas_height+"\"></canvas>";
}
2.HTML5Canvas标签绘制图形
var canvas_width= 500, canvas_height = 500;
var mycanvas, context;
window.onload = function(){
createCanvas();
drawRect();
}
function createCanvas(){
document.body.innerHTML = "<canvas id=\"mycanvas\" width=\""+canvas_width+"\" height=\""+canvas_height+"\"></canvas>";
mycanvas = document.getElementById("mycanvas");
context = mycanvas.getContext("2d");
}
function drawRect(){
context.fillStyle ="#FF0000";
//context.rotate(45);//扭转45度
//context.translate(200,200);//挪动
//context.scale(2,0.5);//缩放
context.fillRect(0,0,200,200);
}
3.HTML5Canvas标签绘制图片
var canvas_width= 500, canvas_height = 500;
var mycanvas, context;
window.onload = function(){
createCanvas();
drawImage();
}
function createCanvas(){
document.body.innerHTML = "<canvas id=\"mycanvas\" width=\""+canvas_width+"\" height=\""+canvas_height+"\"></canvas>";
mycanvas = document.getElementById("mycanvas");
context = mycanvas.getContext("2d");
}
function drawImage(){
var img = new Image();
img.onload = function(){
context.drawImage(img,0,0);
}
img.src = "1.png";
}