2016-04-03 1 views
0

Ich zeichnete verschiedene Formen und Text auf meiner Leinwand, aber im Browser wird nichts angezeigt. In der Chrome-Konsole sind keine Fehler aufgetreten. Ich öffnete es in einem anderen Browser und dachte, dass es ein Problem mit dem Cache gewesen sein könnte, aber immer noch nichts außer dem "Draw Canvas" Knopf zeigt. Hier ist es in jsfiddle: https://jsfiddle.net/0Lakv2do/Warum zeigt meine Zeichnung nicht auf Leinwand?

 <!DOCTYPE html> 
<html lang="en"> 
<head> 


    <meta charset="UTF-8"> 
     <title></title> 
     <style type="text/css"> 
      #content-wrapper { 
       width: 600px; 
       margin: 0 auto; 
       text-align: center; 
      } 
      #canvasRun { 
       background-color: #c00; 
       border: 0; 
       color: #fff; 
      } 

     </style> 

</head> 
<body> 
    <div id="content-wrapper"> 
     <button id="canvasRun">Draw Canvas</button><br><br> 
     <canvas id="myCanvas" width="600" height="450"></canvas> 
    </div> 
    <script type="text/javascript"> 

     var contentWrapper = document.getElementById('contentWrapper'); 
     var runButton = document.getElementById('canvasRun'); 
     var canvas = document.getElementById('myCanvas'); 
     myCanvas.style.visibility="hidden"; 

     runButton.addEventListener('click', showCanvas, false); 

     function showCanvas() { 

      myCanvas.style.visibility = "visible"; 
      if (myCanvas.getContext){ 

      var logo = new Image(); 
      logo.src = 'IIT_SAT_stack_186_white.png'; 

      function renderMyCanvas() { 
       var ctx = canvas.getContext('2d'); 


       var linearGrad = ctx.createLinearGradient(0,0,0,450); 

       linearGrad.addColorStop(0, 'white'); 
       linearGrad.addColorStop(1, 'black'); 

       ctx.fillStyle=linearGrad; 
       ctx.fillRect(0,20,600,450); 

       ctx.font = "32px sans-serif"; 
       ctx.fillStyle = 'red'; 
       ctx.fillText("ITMD 565 Canvas Lab", 135, 75); 

       ctx.beginPath(); 
       ctx.moveTo(15, 90); 
       ctx.lineTo(580, 90); 
       ctx.lineWidth = 3; 
       ctx.strokeStyle = 'red'; 
       ctx.closePath(); 
       ctx.stroke(); 

       ctx.font = "14px sans-serif"; 
       ctx.fillStyle = 'white'; 
       ctx.fillText("", 15, 410); 
       ctx.fillText("", 15, 430); 

       ctx.drawImage(logo, 300, 360, 250, 60); 

       ctx.fillStyle= 'white'; 
       ctx.fillRect(250, 250, 310, 100); 

        var x = canvas.width/2; 
        var y = canvas.height/2; 
        var radius = 75; 
        var startAngle = 1.1 * Math.PI; 
        var endAngle = 1.9 * Math.PI; 
        var counterClockwise = false; 

        ctx.beginPath(); 
        ctx.arc(x, y, radius, startAngle, endAngle, counterClockwise); 
        ctx.lineWidth = 15; 

        ctx.arc.strokeStyle = 'yellow'; 
       ctx.stroke(); 

       ctx.setLineDash([10, 10]); 
       ctx.beginPath(); 
       ctx.moveTo(270,300); 
       ctx.quadraticCurveTo(330, 220, 395, 300, 395, 300); 
       ctx.strokeStyle = 'black'; 
       ctx.stroke(); 

       ctx.beginPath(); 
       ctx.moveTo(395, 300); 
       ctx.quadraticCurveTo(450, 375, 540, 300); 
       ctx.strokeStyle = 'black'; 
       ctx.stroke(); 

      } 

     } 

     } 

    </script> 
</body> 
</html> 
+0

Ich sehe keinen Aufruf an 'renderMyCancas' irgendwo –

Antwort

0

Sie haben einfach kopieren/Einfügen eine Funktion in Ihrer anderen Funktion und Sie nicht immer es nennen. Sie haben auch eine andere Variable canvas dort, während in der äußeren Sie myCanvas haben.

Beim Kopieren/Einfügen sicherstellen, dass Sie tatsächlich wissen, was Sie kopieren und wie es funktioniert.

Siehe Fiddle mit der entfernten Funktionsdefinition und dem festgelegten Variablennamen.

+0

Eigentlich, da myCanvas die ID der Zeichenfläche ist und die Variable'canvas 'auf document.getElementById (" myCanvas ") verweist, beziehen sich beide Variablen auf dasselbe DOM-Objekt. – Kaiido

+0

@Kalido Oh, es scheint noch mehr gemischte Verwendung dieser beiden Variablennamen zu geben. Hauptproblem ist sowieso die Funktionsdefinition. –

+0

@Sami Kuhomen, danke. – Grafics