错误:对象在Javascript中不支持此方法

错误:对象在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()

以下代码在除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() {
    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元素。

我看不出这有什么用处。即