Javascript 为什么这个代码笔不适用于Android?

Javascript 为什么这个代码笔不适用于Android?,javascript,css,html,Javascript,Css,Html,它在台式机、iPhone和Windows phone上工作得很好,但在Android手机上却不起作用。我对Androids不太熟悉,但我认为它与javascript有关。我怎样才能解决这个问题 HTML 5: (函数(){ var image={//前后图像 '返回':{'url':'http://lorempixel.com/600/400/nature/2“,”img“:null}, 'front':{'url':'http://lorempixel.com/600/400/nature

它在台式机、iPhone和Windows phone上工作得很好,但在Android手机上却不起作用。我对Androids不太熟悉,但我认为它与javascript有关。我怎样才能解决这个问题

HTML 5:

(函数(){
var image={//前后图像
'返回':{'url':'http://lorempixel.com/600/400/nature/2“,”img“:null},
'front':{'url':'http://lorempixel.com/600/400/nature/5“,”img“:null}
};
var canvas={'temp':null,'draw':null};//temp和draw canvas
var mouseDown=false;
/**
*Helper函数获取元素中事件的本地坐标,
*因为offsetX/offsetY显然不完全受支持,但是
*offsetLeft/offsetTop/pageX/pageY是!
*
*@param元素有问题
*@param ev事件
*/
函数getLocalCoords(elem,ev){
var ox=0,
oy=0;
var优先;
变量pageX,pageY;
//返回树以计算
//currentTarget元素。我不能告诉你这让我有多高兴。
//真的。
while(elem!=null){
ox+=元素偏移量left;
oy+=元素偏移量;
elem=elem.offsetParent;
}
if(ev.hasOwnProperty('changedTouches')){
first=ev.changedTouches[0];
pageX=first.pageX;
pageY=first.pageY;
}否则{
pageX=ev.pageX;
pageY=ev.pageY;
}
返回{'x':pageX-ox,'y':pageY-oy};
}
/**
*将画布重新组合到屏幕上
*
*请注意我的首选方法(放下背景,然后
*蒙版前景)在带有“源输出”的FF中似乎不起作用
*合成模式(它只是将目标画布留空。)I
*喜欢这种方法,因为在心理上,拥有
*在背景之上绘制前景。
*
*相反,为了获得相同的效果,我们绘制了整个前景图像,
*然后遮罩背景(上面有“source Top”,看起来像
*很高兴)并在上面盖章。最终结果是一样的,但是
*这有点奇怪,因为我们要在背景上盖章
*前景。
*
*优化:这会天真地重新绘制整个画布,其中包括
*四个全尺寸图像光点。一个优化是跟踪
*scratchLine()中的脏矩形,并且仅重新绘制该部分(即。
*在每个drawImage()调用中,也传递脏矩形——签出
*详细信息请参阅drawImage()文档。)这将扩展到
*任意大小的图像,而在其当前形式下,它将
*如果图像很大。
*/
函数recompositeCanvases(){
var main=document.getElementById('maincavas');
var tempctx=canvas.temp.getContext('2d');
var mainctx=main.getContext('2d');
//步骤1:清除温度传感器
canvas.temp.width=canvas.temp.width;//调整大小清除
//第2步:在温度上盖章(电源结束)
tempctx.drawImage(canvas.draw,0,0);
/*!!这种方式对FF不起作用:
//第3步:在temp上标记前景(!!源输出模式!!)
tempctx.globalCompositeOperation='source out';
tempctx.drawImage(image.front.img,0,0);
//步骤4:在显示画布上标记背景(源代码结束)
//mainctx.drawImage(image.back.img,0,0);
//步骤5:在显示画布上标记temp(源代码结束)
mainctx.drawImage(canvas.temp,0,0);
*/
//第3步:在温度上标记背景(!!源模式!!)
tempctx.globalCompositeOperation='source-top';
tempctx.drawImage(image.back.img,0,0);
//步骤4:在显示画布上标记前景(源代码结束)
mainctx.drawImage(image.front.img,0,0);
//步骤5:在显示画布上标记temp(源代码结束)
mainctx.drawImage(canvas.temp,0,0);
}
/**
*划一条底线
* 
*@param可以在画布上显示
*@param x,y表示坐标
*@param fresh如果为true,则启动新行
*/
功能划痕线(can、x、y、新鲜){
var ctx=can.getContext('2d');
ctx.lineWidth=50;
ctx.lineCap=ctx.lineJoin='round';
ctx.strokeStyle='#f00';//可以是任何不透明颜色
如果(新鲜){
ctx.beginPath();
//这+0.01恶意地导致Linux Chrome绘制一个
//“零”-长度线(一个点),否则不会
//单击鼠标但不移动鼠标时绘制:
ctx.moveTo(x+0.01,y);
}
ctx.lineTo(x,y);
ctx.stroke();
}
/**
*设置主画布和侦听器
*/
功能设置画布(){
var c=document.getElementById('maincavas');
//从第一个图像设置主画布的宽度和高度
//(假设两个图像的尺寸相同)
c、 宽度=image.back.img.width;
c、 高度=image.back.img.height;
//创建临时画布和绘制画布,并设置其尺寸
//与主画布相同:
canvas.temp=document.createElement('canvas');
canvas.draw=document.createElement('canvas');
canvas.temp.width=canvas.draw.width=c.width;
canvas.temp.height=canvas.draw.height=c.height;
//画东西开始
重组病毒();
/**
*按下鼠标,从新开始画一条线
*/
函数mousedown\u处理程序(e){
var local=getLocalCoords(c,e);
mouseDown=true;
草稿行(canvas.draw,local.x,local.y,true);
重组病毒();
如果(e.cancelable){e.preventDefault();}
返回false;
};
/**
*在鼠标移动时,如果鼠标向下,则画一条线
*
*我们在窗口上执行此操作,以顺利处理外部鼠标
*画布
*/
函数mousemove\u处理程序(e){
如果(!mouseDown){return true;}
var local=getLocalCoords(c,e);
草稿行(canvas.draw,local.x,local.y,false);
重组病毒();
如果(e.cancelable){e.pre