Javascript <;帆布>;Firefox Mobile、华为Mediapad 10、Android 4.1.2上的图形损坏

Javascript <;帆布>;Firefox Mobile、华为Mediapad 10、Android 4.1.2上的图形损坏,javascript,android,firefox,html5-canvas,Javascript,Android,Firefox,Html5 Canvas,我在android版firefox和html5画布上遇到了一个奇怪的问题 我有一张允许客户签名的表格。该表单将在say chrome(屏幕截图1)上完美运行,但在用户尝试登录android版Firefox时会出现混乱 签名板的JS代码来自 js代码如下所示: // JavaScript Document function signatureCapture() { //Actual Code starts here var parent=document.getElement

我在android版firefox和html5画布上遇到了一个奇怪的问题

我有一张允许客户签名的表格。该表单将在say chrome(屏幕截图1)上完美运行,但在用户尝试登录android版Firefox时会出现混乱

签名板的JS代码来自

js代码如下所示:

// JavaScript Document

function signatureCapture() {

    //Actual Code starts here

    var parent=document.getElementById("canvas");
    parent.childNodes[0].nodeValue = "";

    var canvasArea=document.createElement("canvas");
    canvasArea.setAttribute("id", "newSignature");
    parent.appendChild(canvasArea);

    var canvas = document.getElementById("newSignature");
    var context = canvas.getContext("2d");

    if (!context) {
        throw new Error("Failed to get canvas' 2d context");
    }

    screenwidth = screen.width;

    //if (screenwidth < 480){
    //  canvas.width = screenwidth - 8 ;
    //  canvas.height = (screenwidth * 0.63) ;
    //}
    //else {
        canvas.width = 460 ;
        canvas.height = 300 ;
    //}

    context.fillStyle = "#fff";
    context.strokeStyle = "#444";
    context.lineWidth = 1.2;
    context.lineCap = "round";

    context.fillRect(0, 0, canvas.width, canvas.height);

    context.fillStyle = "#3a87ad";
    context.strokeStyle = "#3a87ad";
    context.lineWidth = 1;
    context.moveTo((canvas.width*0.042),(canvas.height * 0.7));
    context.lineTo((canvas.width*0.958),(canvas.height * 0.7));
    context.stroke();

    context.fillStyle = "#fff";
    context.strokeStyle = "#444";


    var disableSave = true;
    var pixels = [];
    var cpixels = [];
    var xyLast = {};
    var xyAddLast = {};
    var calculate = false;

    //functions
    {
        function remove_event_listeners() {
            canvas.removeEventListener('mousemove', on_mousemove, false);
            canvas.removeEventListener('mouseup', on_mouseup, false);
            canvas.removeEventListener('touchmove', on_mousemove, false);
            canvas.removeEventListener('touchend', on_mouseup, false);

            document.body.removeEventListener('mouseup', on_mouseup, false);
            document.body.removeEventListener('touchend', on_mouseup, false);
        }

        function get_board_coords(e) {
            var x, y;

            if (e.changedTouches && e.changedTouches[0]) {
                var offsety = canvas.offsetTop || 0;
                var offsetx = canvas.offsetLeft || 0;

                x = e.changedTouches[0].pageX - offsetx;
                y = e.changedTouches[0].pageY - offsety;
            } else if (e.layerX || 0 == e.layerX) {
                x = e.layerX;
                y = e.layerY;
            } else if (e.offsetX || 0 == e.offsetX) {
                x = e.offsetX;
                y = e.offsetY;
            }

            return {
                x : x,
                y : y
            };
        };

        function on_mousedown(e) {
            e.preventDefault();
            e.stopPropagation();

            canvas.addEventListener('mousemove', on_mousemove, false);
            canvas.addEventListener('mouseup', on_mouseup, false);
            canvas.addEventListener('touchmove', on_mousemove, false);
            canvas.addEventListener('touchend', on_mouseup, false);

            document.body.addEventListener('mouseup', on_mouseup, false);
            document.body.addEventListener('touchend', on_mouseup, false);

            empty = false;
            var xy = get_board_coords(e);
            context.beginPath();
            pixels.push('moveStart');
            context.moveTo(xy.x, xy.y);
            pixels.push(xy.x, xy.y);
            xyLast = xy;
        };

        function on_mousemove(e, finish) {
            e.preventDefault();
            e.stopPropagation();

            var xy = get_board_coords(e);
            var xyAdd = {
                x : (xyLast.x + xy.x) / 2,
                y : (xyLast.y + xy.y) / 2
            };

            if (calculate) {
                var xLast = (xyAddLast.x + xyLast.x + xyAdd.x) / 3;
                var yLast = (xyAddLast.y + xyLast.y + xyAdd.y) / 3;
                pixels.push(xLast, yLast);
            } else {
                calculate = true;
            }

            context.quadraticCurveTo(xyLast.x, xyLast.y, xyAdd.x, xyAdd.y);
            pixels.push(xyAdd.x, xyAdd.y);
            context.stroke();
            context.beginPath();
            context.moveTo(xyAdd.x, xyAdd.y);
            xyAddLast = xyAdd;
            xyLast = xy;

        };

        function on_mouseup(e) {
            remove_event_listeners();
            disableSave = false;
            context.stroke();
            pixels.push('e');
            calculate = false;
        };

    }//end

    canvas.addEventListener('mousedown', on_mousedown, false);
    canvas.addEventListener('touchstart', on_mousedown, false);
}

function signatureSave() {

    var canvas = document.getElementById("newSignature");
    // save canvas image as data url (png format by default)
    var dataURL = canvas.toDataURL("image/png");
    document.getElementById("saveSignature").src = dataURL;


};
function signaturePost() {
    var canvas = document.getElementById("newSignature");
    // save canvas image as data url (png format by default)
    document.getElementById('postSignature').value = canvas.toDataURL('image/png');
    document.forms["submit_signature"].submit()

}

/*
Reload page instead of this function:

function signatureClear() {


    var parent=document.getElementById("canvas");
    var child=document.getElementById("newSignature");
    parent.removeChild(child);

    signatureCapture();


}
*/

// http://stackoverflow.com/questions/11385471/save-canvas-image-post-the-data-string-to-php


function signatureSend() {
    var canvas = document.getElementById("newSignature");
    var dataURL = canvas.toDataURL("image/png");
    document.getElementById("saveSignature").src = dataURL;
    var sendemail = document.getElementById('sendemail').value;
    var replyemail = document.getElementById('replyemail').value;

var form = document.createElement("form");
form.setAttribute("action","upload_file.php");
form.setAttribute("enctype","multipart/form-data");
form.setAttribute("method","POST");
form.setAttribute("target","_self");
form.innerHTML = '<input type="text" name="image" value="'+dataURL+'"/>'+'<input type="email" name="email" value="'+sendemail+'"/>'+'<input type="email" name="replyemail" value="'+replyemail+'"/>';
form.submit();
}
//JavaScript文档
函数signatureCapture(){
//实际代码从这里开始
var parent=document.getElementById(“画布”);
parent.childNodes[0].nodeValue=“”;
var canvasArea=document.createElement(“canvas”);
canvasArea.setAttribute(“id”,“newSignature”);
父母、子女(拉票区);
var canvas=document.getElementById(“新闻签名”);
var context=canvas.getContext(“2d”);
如果(!上下文){
抛出新错误(“未能获取画布的2d上下文”);
}
屏幕宽度=屏幕宽度;
//如果(屏幕宽度<480){
//canvas.width=屏幕宽度-8;
//canvas.height=(屏幕宽度*0.63);
//}
//否则{
画布宽度=460;
帆布高度=300;
//}
context.fillStyle=“#fff”;
context.strokeStyle=“#444”;
context.lineWidth=1.2;
context.lineCap=“round”;
context.fillRect(0,0,canvas.width,canvas.height);
context.fillStyle=“#3a87ad”;
context.strokeStyle=“#3a87ad”;
context.lineWidth=1;
context.moveTo((canvas.width*0.042),(canvas.height*0.7));
context.lineTo((canvas.width*0.958),(canvas.height*0.7));
stroke();
context.fillStyle=“#fff”;
context.strokeStyle=“#444”;
var disableSave=true;
var像素=[];
var-cpixels=[];
var xyLast={};
var xyAddLast={};
var计算=假;
//功能
{
函数remove_event_listeners(){
canvas.removeEventListener('mousemove',on_mousemove,false);
canvas.removeEventListener('mouseup',on_mouseup,false);
canvas.removeEventListener('touchmove',在鼠标移动上,false);
canvas.removeEventListener('touchend',在鼠标上,false);
document.body.removeEventListener('mouseup',on_mouseup,false);
document.body.removeEventListener('touchend',在鼠标上,假);
}
功能获取板协调(e){
变量x,y;
if(e.changedTouches&&e.changedTouches[0]){
var offsety=canvas.offsetTop | | 0;
var offsetx=canvas.offsetLeft | | 0;
x=e.changedTouches[0].pageX-offsetx;
y=e.changedTouches[0].pageY-offsety;
}else if(e.layerX | | 0==e.layerX){
x=e.rx;
y=e.分层;
}else if(e.offsetX | | 0==e.offsetX){
x=e.offsetX;
y=e.offsetY;
}
返回{
x:x,
y:y
};
};
鼠标向下(e)时的函数{
e、 预防默认值();
e、 停止传播();
canvas.addEventListener('mousemove',on_mousemove,false);
canvas.addEventListener('mouseup',on_mouseup,false);
canvas.addEventListener('touchmove',在鼠标移动上,false);
canvas.addEventListener('touchend',在鼠标上,false);
document.body.addEventListener('mouseup',on_mouseup,false);
document.body.addEventListener('touchend',在鼠标上,假);
空=假;
var xy=获取板坐标(e);
context.beginPath();
push('moveStart');
context.moveTo(xy.x,xy.y);
像素推送(xy.x,xy.y);
xyLast=xy;
};
_mousemove上的函数(e,finish){
e、 预防默认值();
e、 停止传播();
var xy=获取板坐标(e);
变量xyAdd={
x:(xyLast.x+xy.x)/2,
y:(xyLast.y+xy.y)/2
};
如果(计算){
var xLast=(xyAddLast.x+xyLast.x+xyAdd.x)/3;
变量yLast=(xyAddLast.y+xyadst.y+xyAdd.y)/3;
像素推送(xLast,yLast);
}否则{
计算=真;
}
context.quadraticCurveTo(xyLast.x,xyLast.y,xyAdd.x,xyAdd.y);
像素推送(xyAdd.x,xyAdd.y);
stroke();
context.beginPath();
moveTo(xyAdd.x,xyAdd.y);
xyAddLast=xyAdd;
xyLast=xy;
};
鼠标上的函数(e){
删除事件侦听器();
disableSave=false;
stroke();
像素。推('e');
计算=假;
};
}//结束
canvas.addEventListener('mousedown',on_mousedown,false);
canvas.addEventListener(“touchstart”,鼠标向下,假);
}
函数signatureSave(){
var canvas=document.getElementById(“新闻签名”);
//将画布图像另存为数据url(默认为png格式)
var dataURL=canvas.toDataURL(“image/png”);
document.getElementById(“saveSignature”).src=dataURL;
};
函数signaturePost(){
var canvas=document.getElementById(“新闻签名”);
//将画布图像另存为数据url(默认为png格式)
document.getElementById('postSignature')。value=canvas.toDataURL('image/png');
文件。表格[“提交\签名”]。提交()
}
/*
重新加载页面而不是此功能:
函数SignatureLear(){
var parent=document.getElementById(“画布”);
var child=document.getElementById(“新闻签名”);
父母。removeChild(子女);
signatureCapture();
}
*/
// http://stackoverflow.com/questions/11385471/save-canvas-image-post-the-data-string-to-php
函数signatureSend(){
var canvas=document.getElementById(“新闻签名”);
var dataURL=canvas.toDataURL(“image/png”);
做