我已经使用画布标签完成了一个小的全屏背景覆盖,但已经碰到了性能墙。我所做的是创建一个名为#OverlayPic 的容器并将其设置为100% x 100%,显示:无。这个容器里面是我的画布元素。
触发时,jQuery 将图像加载到画布上并将像素信息作为数组获取。switch 语句接受用户为他们想要的过滤效果设置的选项。代码一切正常,但速度非常慢(我认为这主要是由于我的结构方式,但我不确定更好的方法)。
updateCanvas:function(onResize){
var img=new Image(); img.src=Main.ConSRC,
img.onload=function(){
var canvas=document.getElementById('Box_Canvas'),
ctx=canvas.getContext("2d"),
winW=$(window).width(), winH=$(window).height(),
imgW=this.width, imgH=this.height, smallestSide=Math.min(imgW,imgH);
// SETUP IMAGE PROPORTIONS
switch(smallestSide){
case imgW:
var width=winW,height=width*(imgW/imgH);
if(height < winH){ var height=winH, width=height*(imgW/imgH); };
break;
case imgH:
var height=winH,width=height*(imgW/imgH);
if(width < winW){ var width=winW, height=width*(imgH/imgW); };
break;
};
// DRAW IMAGE ON THE CANVAS
ctx.clearRect(0, 0, width*1.3, height*1.3 );
ctx.drawImage(img,0,0,width*1.3,height*1.3);
// IMAGE FILTERS
var imgdata=ctx.getImageData(0, 0, width, height), pix=imgdata.data, l=pix.length;
switch($this.data.bg_pic_filter){
// all filter code cases are here...
};
// APPLY THE FILER
ctx.putImageData(imgdata, 0, 0);
// FADE IN OVERLAY
if(!onResize){
Main.OBJ.$OverlayPic.fadeTo( $this.data.bg_pic_speed, $this.data.bg_pic_opacity);
};
};
},
这个函数在 2 个地方被调用。
当用户单击分配的元素时,叠加层会淡入,并且画布会加载过滤后的图像。
在窗口调整大小事件(onResize arg)上,为了保持所应用的过滤器,否则它只是默认返回原始图像?
有人有任何优化建议吗?谢谢!