jQuery odpowiednik pobierania kontekstu Canvas


155

Mam następujący działający kod:

ctx = document.getElementById("canvas").getContext('2d');

Czy jest jakiś sposób, aby ponownie napisać go do użytku $? Nie udaje się to:

ctx = $("#canvas").getContext('2d');

Odpowiedzi:


282

Próbować:

$("#canvas")[0].getContext('2d');

jQuery ujawnia rzeczywisty element DOM w indeksach numerycznych, w których można wykonywać normalne funkcje JavaScript / DOM.


13

Zauważyłem również, że często preferowane jest użycie .get (0) do odniesienia do celu jquery jako elementu HTML:

var myCanvasElem = $("#canvas").get(0);

Być może w celu uniknięcia potencjalnych odwołań do obiektów o wartości null, ponieważ jquery zwraca wartość null jako obiekt, ale praca z elementem z .get (0) może nie zawieść tak cicho ... Możesz łatwo sprawdzić, czy płótno zostało znalezione najpierw przed .get (0 ) lubić

if( $("#canvas").length ) ctx = $("#canvas").get(0).getContext('2d');
else console.log('Error: Canvas not found with selector #canvas');

1
try{ 
   ctx = $('#canvas').get(0).getContext('2d');
}catch(e){ 
    console.log('We have encountered an error: ' + e);
}

lub...

if( typeof $('#canvas') === 'undefined'){ 
    var canvas = '<canvas id="canvas"><\/canvas>';
    $('body').append(canvas);
}
setTimeout( function(){ ctx = $('#canvas').get(0).getContext('2d'); }, 500);

Użycie setTimeout to łatwy sposób na upewnienie się, że nie próbujesz wywoływać elementu canvas, zanim zostanie w pełni utworzony i zarejestrowany w DOM.


To pytanie zostało zadane 8 lat przed odpowiedzią. Zanim odpowiesz, sprawdź datę pytania!
Rojo

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.