Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript canvas在桌面上工作得很好,但在移动设备上却不行';行不通_Javascript_Jquery_Canvas - Fatal编程技术网

Javascript canvas在桌面上工作得很好,但在移动设备上却不行';行不通

Javascript canvas在桌面上工作得很好,但在移动设备上却不行';行不通,javascript,jquery,canvas,Javascript,Jquery,Canvas,我有画布功能,在桌面上工作得很好,但在移动设备上它工作得很奇怪或者不工作 在移动设备上,它每20秒工作一次,当你们触摸手指的开始50px时,只会画一条线 这是我的密码: var canvasDiv = document.getElementById('canvasDiv'); var canvas = document.createElement('canvas'); canvas.setAttribute('id', 'canvas'); canvasDiv.appendChild(canva

我有画布功能,在桌面上工作得很好,但在移动设备上它工作得很奇怪或者不工作

在移动设备上,它每20秒工作一次,当你们触摸手指的开始50px时,只会画一条线

这是我的密码:

var canvasDiv = document.getElementById('canvasDiv');
var canvas = document.createElement('canvas');
canvas.setAttribute('id', 'canvas');
canvasDiv.appendChild(canvas);
$("#canvas").attr('height', $("#canvasDiv").outerHeight());
$("#canvas").attr('width', $("#canvasDiv").width());
if (typeof G_vmlCanvasManager != 'undefined') {
    canvas = G_vmlCanvasManager.initElement(canvas);
}

context = canvas.getContext("2d");
var blueprint_background = new Image();
blueprint_background.src = srctesting;
blueprint_background.crossOrigin="anonymous";
blueprint_background.onload = function(){
    var pattern = context.createPattern(this, "no-repeat");
    context.fillStyle = pattern;
    context.rect(0,0,$("#canvasDiv").width(),$("#canvasDiv").outerHeight());
    context.fill();
};

// console.log(blueprint_background)
$('#canvas').mousedown(function(e) {
    var offset = $(this).offset()
    var mouseX = e.pageX - this.offsetLeft;
    var mouseY = e.pageY - this.offsetTop;

    paint = true;
    addClick(e.pageX - offset.left, e.pageY - offset.top);
    redraw();
});

$('#canvas').mousemove(function(e) {
    if (paint) {
        var offset = $(this).offset()
        //addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true);
        addClick(e.pageX - offset.left, e.pageY - offset.top, true);
        // console.log(e.pageX, offset.left, e.pageY, offset.top);
        redraw();
    }
});

$('#canvas').mouseup(function(e) {
    paint = false;
});

$('#canvas').mouseleave(function(e) {
    paint = false;
});

var clickX = new Array();
var clickY = new Array();
var clickDrag = new Array();
var paint;

function addClick(x, y, dragging) {
    clickX.push(x);
    clickY.push(y);
    clickDrag.push(dragging);
}

$("#reset-btn").click(function() {
    context.clearRect(0, 0, window.innerWidth, window.innerWidth);
    clickX = [];
    clickY = [];
    clickDrag = [];
});

$(document).on('click', '#btn-save', function() {
    var mycanvas = document.getElementById('canvas');
    var img = mycanvas.toDataURL("image/png");
    anchor = $("#signature");
    anchor.val(img);
    $("#signatureform").submit(); 
});


var drawing = false;
var mousePos = {
    x: 0,
    y: 0
};
var lastPos = mousePos;

canvas.addEventListener("touchstart", function(e) {
    mousePos = getTouchPos(canvas, e);
    var touch = e.touches[0];
    var mouseEvent = new MouseEvent("mousedown", {
        clientX: touch.clientX,
        clientY: touch.clientY
    });
    canvas.dispatchEvent(mouseEvent);
}, false);


canvas.addEventListener("touchend", function(e) {
    var mouseEvent = new MouseEvent("mouseup", {});
    canvas.dispatchEvent(mouseEvent);
}, false);


canvas.addEventListener("touchmove", function(e) {

    var touch = e.touches[0];
    var offset = $('#canvas').offset();
    var mouseEvent = new MouseEvent("mousemove", {
        clientX: touch.clientX,
        clientY: touch.clientY
    });
    canvas.dispatchEvent(mouseEvent);
}, false);



// Get the position of a touch relative to the canvas
function getTouchPos(canvasDiv, touchEvent) {
    var rect = canvasDiv.getBoundingClientRect();
    return {
        x: touchEvent.touches[0].clientX - rect.left,
        y: touchEvent.touches[0].clientY - rect.top
    };
}


var elem = document.getElementById("canvas");

var defaultPrevent = function(e) {
    e.preventDefault();
}
elem.addEventListener("touchstart", defaultPrevent);
elem.addEventListener("touchmove", defaultPrevent);


function redraw() {
    //
    lastPos = mousePos;
    for (var i = 0; i < clickX.length; i++) {
        context.beginPath();
        if (clickDrag[i] && i) {
            context.moveTo(clickX[i - 1], clickY[i - 1]);
        } else {
            context.moveTo(clickX[i] - 1, clickY[i]);
        }
        context.lineTo(clickX[i], clickY[i]);
        context.closePath();
        context.stroke();
    }
}       
var canvasDiv=document.getElementById('canvasDiv'); var canvas=document.createElement('canvas'); setAttribute('id','canvas'); canvasDiv.appendChild(canvas); $(“#canvas”).attr('height',$(“#canvasDiv”).outerHeight()); $(“#canvas”).attr('width',$(“#canvasDiv”).width(); if(G_vmlCanvasManager的类型!=“未定义”){ canvas=G_vmlCanvasManager.initElement(canvas); } context=canvas.getContext(“2d”); var blueprint_background=新图像(); blueprint_background.src=srctesting; blueprint_background.crossOrigin=“匿名”; blueprint_background.onload=函数(){ var pattern=context.createPattern(这是“无重复”); context.fillStyle=模式; context.rect(0,0,$(“#canvasDiv”).width(),$(“#canvasDiv”).outerHeight()); context.fill(); }; //console.log(蓝图\后台) $(“#画布”).mousedown(函数(e){ var offset=$(this.offset() var mouseX=e.pageX-this.offsetLeft; var mouseY=e.pageY-this.offsetTop; 油漆=真; addClick(e.pageX-offset.left,e.pageY-offset.top); 重画(); }); $('#canvas').mousemove(函数(e){ 如果(油漆){ var offset=$(this.offset() //addClick(e.pageX-this.offsetLeft,e.pageY-this.offsetTop,true); addClick(e.pageX-offset.left,e.pageY-offset.top,true); //日志(e.pageX,offset.left,e.pageY,offset.top); 重画(); } }); $('#canvas').mouseup(函数(e){ 油漆=假; }); $('#canvas').mouseleave(函数(e){ 油漆=假; }); var clickX=新数组(); var clickY=新数组(); var clickDrag=新数组(); var涂料; 功能添加单击(x、y、拖动){ 点击x,推送(x); clickY.push(y); 单击拖动。推送(拖动); } $(“#重置btn”)。单击(函数(){ clearRect(0,0,window.innerWidth,window.innerWidth); 点击X=[]; clickY=[]; 单击拖动=[]; }); $(文档)。在('单击','btn保存',函数()上){ var mycanvas=document.getElementById('canvas'); var img=mycanvas.toDataURL(“image/png”); anchor=$(“#签名”); anchor.val(img); $(“#签名表单”).submit(); }); var绘图=错误; var mousePos={ x:0,, y:0 }; var lastPos=鼠标点; canvas.addEventListener(“touchstart”,函数(e){ mousePos=getTouchPos(画布,e); var-touch=e.touch[0]; var mouseEvent=新的mouseEvent(“mousedown”{ clientX:touch.clientX, clientY:touch.clientY }); canvas.dispatchEvent(mouseEvent); },假); canvas.addEventListener(“touchend”,函数(e){ var mouseEvent=新的mouseEvent(“mouseup”,{}); canvas.dispatchEvent(mouseEvent); },假); canvas.addEventListener(“触摸移动”,函数(e){ var-touch=e.touch[0]; var offset=$('#canvas').offset(); var mouseEvent=新的mouseEvent(“mousemove”{ clientX:touch.clientX, clientY:touch.clientY }); canvas.dispatchEvent(mouseEvent); },假); //获取触摸相对于画布的位置 函数getTouchPos(canvasDiv、touchfevent){ var rect=canvasDiv.getBoundingClientRect(); 返回{ x:touchEvent.Touchs[0]。clientX-rect.left, y:touchEvent.Touchs[0]。clientY-rect.top }; } var elem=document.getElementById(“画布”); var defaultPrevent=函数(e){ e、 预防默认值(); } 元素addEventListener(“touchstart”,defaultPrevent); 元素addEventListener(“触摸移动”,defaultPrevent); 函数重画(){ // lastPos=鼠标垫; 对于(变量i=0;i
正如你所看到的,我为手机添加了活动。我遗漏了什么吗?

var touch=e.changedtouch[0]
可能会更好。。?您还应该在引用其属性之前检查对象是否存在。Hello@Teemu谢谢您的建议,但这并没有解决问题啊,我的错,您需要从
e.changedTouches
中获取最后一个索引,而不是第一个索引。miight在
e.touchs
@Teemu yes中添加了var touch=e.touch[e.touch.length-1],但仍然没有改进,在画布和触摸设备上从未使用过。在Android和Chrome的FF上,在Galaxy S6上都能很好地工作。