错误:对象在Javascript中不支持此方法
以下代码在除IE之外的其他浏览器中正常工作。我的代码是:错误:对象在Javascript中不支持此方法,javascript,html5-canvas,Javascript,Html5 Canvas,以下代码在除IE之外的其他浏览器中正常工作。我的代码是: <script lang="javascript" type="text/javascript"> alert("fdgdfgdfg"); var canvas; var ctx; var canX; var canY; var rltvX; var rltvY; var x = "black"; var flag = false; var w, h; function init()
<script lang="javascript" type="text/javascript">
alert("fdgdfgdfg");
var canvas;
var ctx;
var canX;
var canY;
var rltvX;
var rltvY;
var x = "black";
var flag = false;
var w, h;
function init() {
alert("aaaaaaaaaaa");
alert("bbbbbbbbbbb");
canvas = document.getElementById("canvas");
ctx = canvas.getContext("2d");
w = canvas.width;
h = canvas.height;
canvas.addEventListener("mousemove", function(e) {findxy('move', e);}, false);
canvas.addEventListener("mousedown", function(e) {findxy('down', e);}, false);
canvas.addEventListener("mouseup", function(e) {findxy('up', e);}, false);
canvas.addEventListener("mouseout", function(e) {findxy('out', e);}, false);
canvas.addEventListener("touchstart", touchDown, false);
canvas.addEventListener("touchmove", move, true);
canvas.addEventListener("touchend", touchUp, false);
document.body.addEventListener("mouseup", mouseUp, false);
document.body.addEventListener("touchcancel", touchUp, false);
}
function findxy(res, e) {
if (res == 'down') {
canX = e.clientX - canvas.offsetLeft-5;
canY = e.clientY - canvas.offsetTop-25;
flag = true;
dot_flag = true;
if (dot_flag) {
ctx.beginPath();
ctx.fillStyle = x;
ctx.fillRect(canX, canY, 2, 2);
ctx.closePath();
dot_flag = false;
}
}
if (res == 'up' || res == "out") {
flag = false;
}
if (res == 'move') {
if (flag) {
rltvX = canX;
rltvY = canY;
canX = e.clientX - canvas.offsetLeft-5;
canY = e.clientY - canvas.offsetTop-25;
ctx.beginPath();
ctx.moveTo(rltvX, rltvY);
ctx.lineTo(canX, canY);
ctx.strokeStyle = x;
ctx.lineWidth = 2;
ctx.stroke();
ctx.closePath();
}
}
}
function touchDown(e) {
if (!e)
var e = event;
e.preventDefault();
canX = e.targetTouches[0].pageX - canvas.offsetLeft-5;
canY = e.targetTouches[0].pageY - canvas.offsetTop-25;
ctx.beginPath();
ctx.fillStyle = x;
ctx.fillRect(canX, canY, 2, 2);
ctx.closePath();
}
function move(e) {
if (!e)
var e = event;
e.preventDefault();
rltvX = canX;
rltvY = canY;
canX = e.targetTouches[0].pageX - canvas.offsetLeft-5;
canY = e.targetTouches[0].pageY - canvas.offsetTop-25;
ctx.beginPath();
ctx.strokeStyle = x;
ctx.lineWidth = 2;
ctx.moveTo(rltvX, rltvY);
ctx.lineTo(canX, canY);
ctx.stroke();
}
</script>
警报(“fdgdfgdfg”);
var帆布;
var-ctx;
var-canX;
var canY;
var-rltvX;
var-rltvY;
var x=“黑色”;
var标志=假;
var w,h;
函数init(){
警报(“AAAAAAAA”);
警报(“BBBBBBBBB”);
canvas=document.getElementById(“canvas”);
ctx=canvas.getContext(“2d”);
w=画布宽度;
h=画布高度;
addEventListener(“mousemove”,函数(e){findxy('move',e);},false);
addEventListener(“mousedown”,函数(e){findxy('down',e);},false);
addEventListener(“mouseup”,函数(e){findxy('up',e);},false);
addEventListener(“mouseout”,函数(e){findxy('out',e);},false);
canvas.addEventListener(“touchstart”,触地,错误);
canvas.addEventListener(“touchmove”,move,true);
canvas.addEventListener(“touchend”,touchUp,false);
document.body.addEventListener(“mouseup”,mouseup,false);
document.body.addEventListener(“touchcancel”,touchUp,false);
}
函数findxy(res,e){
如果(res=='down'){
canX=e.clientX-canvas.offsetLeft-5;
canY=e.clientY-canvas.offsetTop-25;
flag=true;
dot_flag=true;
if(dot_标志){
ctx.beginPath();
ctx.fillStyle=x;
ctx.fillRect(canX,canY,2,2);
ctx.closePath();
dot_标志=假;
}
}
如果(res==“向上”| res==“向外”){
flag=false;
}
如果(res=='move'){
国际单项体育联合会(旗){
rltvX=canX;
rltvY=canY;
canX=e.clientX-canvas.offsetLeft-5;
canY=e.clientY-canvas.offsetTop-25;
ctx.beginPath();
ctx.moveTo(rltvX,rltvY);
ctx.lineTo(canX,canY);
ctx.strokeStyle=x;
ctx.lineWidth=2;
ctx.stroke();
ctx.closePath();
}
}
}
功能接地(e){
如果(!e)
var e=事件;
e、 预防默认值();
canX=e.targetTouches[0].pageX-canvas.offsetLeft-5;
canY=e.targetTouches[0].pageY-canvas.offsetTop-25;
ctx.beginPath();
ctx.fillStyle=x;
ctx.fillRect(canX,canY,2,2);
ctx.closePath();
}
功能移动(e){
如果(!e)
var e=事件;
e、 预防默认值();
rltvX=canX;
rltvY=canY;
canX=e.targetTouches[0].pageX-canvas.offsetLeft-5;
canY=e.targetTouches[0].pageY-canvas.offsetTop-25;
ctx.beginPath();
ctx.strokeStyle=x;
ctx.lineWidth=2;
ctx.moveTo(rltvX,rltvY);
ctx.lineTo(canX,canY);
ctx.stroke();
}
错误是,对象“canvas”不支持方法
addEventListener()
。这在除IE之外的所有浏览器中都能正常工作。是否有其他选择?如果使用IE8,则应使用attachEvent()
方法,而不是addEventListener()
。这意味着您必须首先检查用户使用的浏览器,然后对元素调用正确的方法
编辑以了解如何检查要使用的方法:
if (el.addEventListener){
el.addEventListener(...);
} else if (el.attachEvent){
el.attachEvent(...);
}
其中,
el
是DOM元素。我看不出这有什么用处。即