0

我有一个简单的 html5 画布绘图应用程序的以下代码(来自这里的代码)。但是,我无法让画布在鼠标按下时进行绘制。有任何想法吗?

在 Firefox 中尝试过,而不是 IE。

任何帮助表示赞赏。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>   
<script type="text/javascript">  
    var canvas = document.querySelector('#paint');
    var ctx = canvas.getContext('2d');  
    var sketch = document.querySelector('#sketch');
    var sketch_style = getComputedStyle(sketch);
    canvas.width = parseInt(sketch_style.getPropertyValue('width'));
    canvas.height = parseInt(sketch_style.getPropertyValue('height')); 
    var mouse = {x: 0, y: 0};
    var last_mouse = {x: 0, y: 0};  

    /* Mouse Capturing Work */
    canvas.addEventListener('mousemove', function(e) {
        last_mouse.x = mouse.x;
        last_mouse.y = mouse.y;

        mouse.x = e.pageX - this.offsetLeft;
        mouse.y = e.pageY - this.offsetTop;
    }, false);


    /* Drawing on Paint App */
    ctx.lineWidth = 5;
    ctx.lineJoin = 'round';
    ctx.lineCap = 'round';
    ctx.strokeStyle = 'blue';       
    canvas.addEventListener('mousedown', function(e) {
        canvas.addEventListener('mousemove', onPaint, false);
    }, false);

    canvas.addEventListener('mouseup', function() {
        canvas.removeEventListener('mousemove', onPaint, false);
    }, false);

    var onPaint = function() {
        ctx.beginPath();
        ctx.moveTo(last_mouse.x, last_mouse.y);
        ctx.lineTo(mouse.x, mouse.y);
        ctx.closePath();
        ctx.stroke();
    };

    </script>
<style type="text/css">
html, body {
    width: 100%;
    height: 100%;
}
#sketch {
    border: 10px solid gray;
    height: 100%;
}
</style>
</head>
<body>
<div id="sketch">
  <canvas id="paint"></canvas>
</div>
</body>
</html>
4

1 回答 1

2

问题是您正在尝试访问var canvas = document.querySelector('#paint');尚未加载的标签 ( )。

将整个 JavaScript 标记放在</canvas>.

于 2013-03-14T06:57:33.010 回答