2017-04-01 5 views
0

Hier ist der code. Oben können Sie sehen, dass Canvas und Bühne als globale Variablen deklariert sind. Dann wird die Funktion initializeCanvas() beim Laden der Seite ausgeführt und weist diese Variablen zu und lädt ein Hintergrundbild.leinwand und bühne verlieren globalen umfang in staffelei.js

Seltsamerweise enden Bühne und Leinwand jedoch undefiniert.

Warum? Und was kann ich dagegen tun?

Roger

var canvas, stage 

function initializeCanvas() { 
    canvas = document.getElementById("starCanvas") 
    canvas.width = window.innerWidth 
    canvas.height = 720 

    stage = new createjs.Stage("starCanvas") 

    background = new createjs.Bitmap("background1.jpg"); 
    background.image.onload = handleBackgroundImage_Loaded 
} 

function handleBackgroundImage_Loaded(evt) { 
    background.x = 0 
    background.y = 0 
    stage.addChildAt(background,0); 
    stage.update() 
} 

alert(canvas) 
alert(stage) 

Antwort

0

initializeCanvas machen, eine sofort aufgerufen Funktion. Verwenden Sie außerdem immer console.log, um ein Objekt zur Prüfung auszugeben.

var canvas, stage; 
 

 
(function initializeCanvas() { 
 
    canvas = document.getElementById("starCanvas"); 
 
    canvas.width = window.innerWidth; 
 
    canvas.height = 720; 
 
    stage = new createjs.Stage("starCanvas"); 
 
    background = new createjs.Bitmap("background1.jpg"); 
 
    background.image.onload = handleBackgroundImage_Loaded; 
 
})(); 
 

 
function handleBackgroundImage_Loaded(evt) { 
 
    background.x = 0; 
 
    background.y = 0; 
 
    stage.addChildAt(background, 0); 
 
    stage.update(); 
 
} 
 
console.log(canvas); 
 
console.log(stage);
<script src="https://code.createjs.com/createjs-2015.11.26.min.js"></script> 
 
<canvas id="starCanvas"></canvas>

+0

Das funktioniert, wenn Sie den Canvas-Kram entfernen ... Ansonsten scheint der Code vor dem Ereignis window.load zu laufen. Mindestens Stufe endet definiert, so ist es definitiv eine Verbesserung. – user3055135

+1

@ user3055135 wie Sie deutlich in dem Snippet sehen können, funktioniert der Code perfekt. Sie müssen nur Ihr * Skript * vor dem Schließen des 'body'-Tags platzieren. –

+0

Okay, großartig ... Vielen Dank! – user3055135

1

Sie haben vergessen, die Funktion Ich denke, zu nennen. Irgendwo einfügen:

initializeCanvas(); 
+0

Nein, ich habe das ... ich einfach nicht, dass ein Teil sind: – user3055135

+0

@ user3055135 Dies ist die richtige Antwort. Das Onload-Ereignis wird ausgelöst, nachdem der Code geladen und ausgeführt wurde. Die zwei Zeilen mit Alert werden vor dem Onload-Ereignis ausgeführt, und daher sind die Zeichenfläche und die Bühne nicht definiert. – Blindman67

Verwandte Themen