繁体   English   中英

用画布绘制应用程序

[英]Paint app with canvas

我正在尝试按照本教程http://www.williammalone.com/articles/create-html5-canvas-javascript-drawing-app/为朋友的网站制作一个非常简单的绘画应用程序。

这是我写的; 我认为它会起作用,但它没有:

<head>
    <script>
        window.onload = function()
        {
            var canvasDiv = document.getElementById('canvasDiv');
            canvas = document.createElement('canvas');
            canvas.setAttribute('width', canvasWidth);
            canvas.setAttribute('height', canvasHeight);
            canvas.setAttribute('id', 'canvas');
            canvasDiv.appendChild(canvas);
            if(typeof G_vmlCanvasManager != 'undefined') {
                canvas = G_vmlCanvasManager.initElement(canvas);
            }
            context = canvas.getContext("2d");

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

              paint = true;
              addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);
              redraw();
            });

            $('#canvas').mousemove(function(e){
              if(paint){
                addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true);
                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);
            }

            function redraw(){
              context.clearRect(0, 0, context.canvas.width, context.canvas.height); // Clears the canvas

              context.strokeStyle = "#df4b26";
              context.lineJoin = "round";
              context.lineWidth = 5;

              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();
              }
            }
        }
    </script>
</head>

<body>
    <div id="canvasDiv">        
    </div>
</body>

有人能帮助我吗? 我可能错过了一些东西..谢谢!

你在哪里定义

canvasWidth和canvasHeight?

如果你设置它们就可以了: JSFIDDLE

例如

canvas.setAttribute('width', "500");
canvas.setAttribute('height', "200");

在Chrome中测试..(当你使用jQuery时,你可能应该在$(document).ready()而不是onload上“执行”以确保已经渲染了“canvasDiv”)

这是我改变的:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
   <head>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script>
        var canvasDiv = document.getElementById('canvasDiv');
        var canvas = document.createElement('canvas');
        canvas.setAttribute('width', "500");
        canvas.setAttribute('height', "200");
        canvas.setAttribute('id', 'canvas');
        canvasDiv.appendChild(canvas);
        if(typeof G_vmlCanvasManager != 'undefined') {
            canvas = G_vmlCanvasManager.initElement(canvas);
        }
        context = canvas.getContext("2d");

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

            paint = true;
            addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);
            redraw();
        });

        $('#canvas').mousemove(function(e){
            if(paint){
                addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true);
                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);
        }

        function redraw(){
            context.clearRect(0, 0, context.canvas.width,                       
            context.canvas.height); // Clears the canvas

            context.strokeStyle = "#df4b26";
            context.lineJoin = "round";
            context.lineWidth = 5;

            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();
            }
        }
        </script>
   </head>
   <body>
        <div id="canvasDiv"></div>      
   </body>  
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM