2016-05-03 12 views
1

mein problem ist einfach, ich habe ein reißbrett in html canvas gemacht. Alles funktioniert gut, außer wenn ich die ganze Leinwand klemmen möchte.clearing leinwand in html nicht erfrischend ohne scroll in elektron

Ich benutze diese Funktion context.clearRect(0, 0, context.canvas.width, context.canvas.height); und es funktioniert gut, außer dass die Leinwand die meiste Zeit nicht gelöscht wird, bis ich eine kleine Rolle oder eine Aktion im Browser (ich habe sogar versucht, einen Hack zum scrollen machen programmgesteuert nach dem Scrollen und es hat nicht funktioniert)

Es scheint mir wie die Leinwand nur nach einem bestimmten Ereignis im Browser aktualisiert, aber ich weiß nicht, wie diese Aktualisierung erzwingen.

Irgendeine Idee von was passiert und wie man es löst?

Mein Code unten:

<span><input type="image" src="img/clear1.png" name="clear1" width="50" height="50" onclick="clear1()"></span> 

$(document).ready(function(){ 
    var canvasDiv = document.getElementById('canvasDiv1'); 
    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"); 
});  

function clear1(){ 
    context.clearRect(0, 0, context.canvas.width, context.canvas.height); 
} 

Ich fand, dass dieses Problem tritt nur bei Elektronen

+0

Wie rufst du die Funktion an? Können Sie uns ein Beispiel-Snippet zeigen, das den Fehler reproduziert? – user3297291

+0

Ich habe die Frage bearbeitet, um die Teile des Codes hinzuzufügen –

+0

Erhalten Sie einen Fehler "clearRect ist keine Funktion"? Aus diesem Snippet kann ich nicht sagen, ob Sie Ihre 'context'-Variable tatsächlich außerhalb der On-Ready-Funktion definiert haben. Kann 'clear1' korrekt auf' context' zugreifen? – user3297291

Antwort

0

Die Kontextvariablen sind nur in $ definiert (document) .ready() Umfang, versuchen Sie es:

$(document).ready(function(){ 
    var canvasDiv = document.getElementById('canvasDiv1'); 
    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"); 
    window.clear1 = function(){ 
     context.clearRect(0, 0, context.canvas.width, context.canvas.height); 
    } 
});  

Oder:

// global declaration 
var context = null; 
$(document).ready(function(){ 
//keep your logic here 

}); 
function clear1(){ 
    context.clearRect(0, 0, context.canvas.width, context.canvas.height); 
} 
+0

Ja, tatsächlich wird es als globale Variable deklariert. Der Fehler, den ich habe, ist kein Syntaxfehler, weil eventuell der Canvas gelöscht wird. Es ist nur nach einem Bildlauf gemacht, Größe ändern ... jede Änderung im Browser oder nach mehreren Klicks auf die Schaltfläche Löschen –

+0

OK, ich werde sehen, ob ich den Fehler replizieren kann, aber es wäre interessant, Sie Details Ihres Codes hinzufügen B. die Bibliothek, mit der Sie die Zeichenfläche bearbeiten. –