Javascript 无法读取属性';beginPath';空的

Javascript 无法读取属性';beginPath';空的,javascript,html5-canvas,typeerror,Javascript,Html5 Canvas,Typeerror,我有一个问题,我有一个画布,它可以工作,但当我开始绘图时,它返回一个错误,我不知道如何修复它。 这是我的画布代码: //对象签名==>Le画布 var签名={ //归因于 ecriture:false,//属性d'activation de l'écriter canvas:document.getElementById(“签名”),//Séselection du canvas dans le HTML 上下文:null,//Définira le contexte D'use du can

我有一个问题,我有一个画布,它可以工作,但当我开始绘图时,它返回一个错误,我不知道如何修复它。 这是我的画布代码:

//对象签名==>Le画布
var签名={
//归因于
ecriture:false,//属性d'activation de l'écriter
canvas:document.getElementById(“签名”),//Séselection du canvas dans le HTML
上下文:null,//Définira le contexte D'use du canvas
signatureImg:null,
位置X:null,
位置y:null,
//在画布上画一幅美丽的图画
dessin:功能(位置X、位置Y){
this.context=this.canvas.getContext(“2d”);//画布上的Contexte
this.context.lineWidth=5;//Largeur du tracer
如果(本秘籍){
this.context.lineTo(positionX,positionY);//Désigne le point D'arrivédu tracer
this.context.stroke();//效应跟踪器
}
},
activationDessin:function(){
this.ecriture=true;//画布上的活动l’é准则
this.context.beginPath();//开始新化学
this.context.moveTo(positionX,positionY);//Désigne le Début du tracer
},
//点时代合作(souris,doigt…)
getMousePos:函数(事件){
Rct=这个.Cuavas.Get Boin Cclipse Stand(;)//Revay-LaTalle Dun'LeEnEdSet位置相对PAR关系
返回{
x:event.clientX-rect.left,
y:event.clientY-rect.top
};
},
//终点位置的Méthode qui détermine de lélément de pointage
替换SOURIS:功能(事件){
SoistIsP=这个。GouMousPOS(事件);// Coordonn EDE的Le'E'DeLede Load Lead Lead Lead Lead Lead Lead Lead RealPaer-Pa La Meththod“GeMouthPOS”
位置x=sourisPosition.x;
位置y=sourisPosition.y;
这一点。德辛(位置X,位置Y);
},
//这是一个很好的评价标准
desactivationDessin:function(){
this.ecriture=false;//Désactive lécriter dans le canvas
},
convertTouchEvent:功能(ev){
var-touch,ev_类型,鼠标_-ev;
触摸=电动目标触摸[0];
ev.preventDefault();
开关(电动型){
案例“touchstart”:
//请确保您在城市附近
如果(ev.targetTouches.length!=1){
返回;
}
触摸=电动目标触摸[0];
ev_类型='mousedown';
打破
“触摸移动”案例:
//请确保您在城市附近
如果(ev.targetTouches.length!=1){
返回;
}
触摸=电动目标触摸[0];
ev_类型='mousemove';
打破
“touchend”案例:
//在城市生活中,你可以做些什么
如果(ev.changedTouches.length!=1){
返回;
}
触摸=电动可变触摸[0];
ev_类型='mouseup';
打破
违约:
返回;
}
mouse_ev=document.createEvent(“MouseEvents”);
mouse_ev.initMouseEvent(
ev_类型,//lévénement流派
是的,
是的,
窗口,//Vue de lévénement
0,//Compte de clic de souris
touch.screenX,//Coordonnée X de lécran
touch.screenY,//Coordonnée Y de lécran
touch.clientX,//Coordonnée X du client
touch.clientY,//Coordonnée Y du client
ev.ctrlKey,//Vérifie si la touch contrôle aétéappuyée
ev.altKey,//Vérifie si la touch alt aétéappuyée
ev.shiftKey,//Vérifie si la touche majuscule aétéappuyée
ev.metaKey,//Vérifie si la touch meta aétéappuyée
0,//Bouton de la souris
null//Cible
);
此.dispatchEvent(鼠标\电动车辆);
},
//我的方法是用帆布做的
clearCanvas:function(){
this.context.clearRect(0,0800200);//Ré初始化画布
}
}
//佩尔德斯梅多斯苏尔PC酒店
Signature.canvas.addEventListener(“mousedown”,Signature.activationDessin.bind(Signature));
Signature.canvas.addEventListener(“mousemove”,Signature.deplacementSouris.bind(Signature));
Signature.canvas.addEventListener(“mouseup”,Signature.desactivationDessin.bind(Signature));
//触觉上的方法上诉
Signature.canvas.addEventListener(“touchstart”,Signature.convertTouchEvent);
Signature.canvas.addEventListener(“touchmove”,Signature.convertTouchEvent);
Signature.canvas.addEventListener(“touchend”,Signature.convertTouchEvent);
//在布顿河畔用帆布抹平的方法
document.getElementById(“boutonEffacer”).addEventListener(“单击”,函数(){
Signature.clearCanvas();

});您的逻辑错误。在此之前,您需要调用
dessin()
。上下文不再为空

显示的调用
dessin()
的唯一位置是
deplacementSouris()

并且
deplacementSouris()
绑定到
mousemove
事件

因此,用户在画布内移动鼠标之前不能单击任何内容,以便上下文不再为空


找到更好的逻辑来更新
this.context
。如果不在HTML中删除或重新加载canvas元素,当定义
this.canvas
时,您可能可以立即设置
this.context

在哪里调用
dessin
函数来设置