2016-02-08 6 views
5

Le dimensioni (larghezza e altezza) di una tela possono essere modificate, ma la dimensione dello stile della tela non può essere modificata dinamicamente.Come modificare dinamicamente la dimensione dello stile di una tela da JavaScript?

canvas = document.getElementById('test_fabric'); 
ctx = this.canvas.getContext('2d'); 
canvas.style.width = 1000; // does not work. 
canvas.style.height = 260; // does not work. 
canvas.width = 100; // works. 
canvas.height = 100; // works. 

Sia canvas.width e canvas.height lavorare bene, ma entrambi canvas.style.width e canvas.style.height non funzionano.

Nel mio caso, le dimensioni dello stile della tela possono essere modificate solo da un file css o dallo stile in linea della tela.

canvas#test_fabric { 
    width:400px; 
    height:400px; 
    background:gold; 
} 

o

<div><canvas id="test_fabric" width="200" height="200" 
style="width:200px; height:200px"></canvas></div> 

Nota: il file CSS diventa inefficace quando esiste lo stile in linea.

Qual è il modo di modificare dinamicamente le dimensioni dello stile di una tela con JavaScript?

Grazie in anticipo!

+0

dispiace, volevo dire: http://stackoverflow.com/questions/13779429/canvas-inline-height-and-width- attributes-overridden-with-css-styles-is-this-is – Gavriel

+1

Hai provato a specificare unità di lunghezza CSS, ad es., "px"? 'canvas.style.width =" 1000px "' – nnnnnn

+0

Provo ad usare "canvas.setAttribute ('width', '500');" e "canvas.setAttribute ('height', '500');", non funzionano quando si definisce il tag canvas senza stile e quando si definisce il tag canvas con stile, Chrome riporta un messaggio: "[Solo report] Rifiutato applica lo stile inline perché viola la seguente direttiva di Content Security Policy: "style-src 'self'". O la parola chiave 'unssafe-inline', un hash ('sha256-8qEYHk4WwsvJKgLquQfLnw2DRoaMh4sWGNj24adrRLQ =') o un nonce ('nonce-. .. ') è necessario per abilitare l'esecuzione in linea. " – Calvin

risposta

5

La larghezza e l'altezza delle proprietà di stile richiedono la misurazione dei relativi valori, mentre la larghezza e l'altezza degli attributi HTML non richiedono. Quindi, è necessario impostare px, em or % ecc in modo esplicito nel codice:

canvas = document.getElementById('test_fabric'); 
ctx = canvas.getContext('2d'); 
canvas.style.width = '1000px'; // explicitly setting its unit 'px' 
canvas.style.height = '260px'; 

style.width/altezza senza unità è regola valida per i CSS.

+0

Grazie della tua risposta! Bhojendra Nepal. – Calvin

+0

@Calvin Prego! –

3

ho usato jQuery che utilizzano il metodo CSS per altezza e larghezza impostazione

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
     $("#test_fabric").css({"border-color": "#C1E0FF", 
       "border-width":"1px", 
       "border-style":"solid","height":"500px","width":"500px"}); 
     }); 
    </script> 
    <div class="col-md-12"> 
     <div><canvas id="test_fabric" width="200" height="200"></canvas></div> 
    </div> 
+0

abhay vyas: Ho provato a usare jquery come a modo tuo e ho trovato che funzionava. Grazie! – Calvin

+0

Se usi fabric.js, ho trovato che puoi farlo da: canvas.setDimensions ({width: 800, height: 200}, {backstoreOnly: true}); canvas.setDimensions ({width: '800px', height: '200px'}, {cssOnly: true}); – Calvin

+1

impostando 'width' e' height' come css' si estenderà solo l'immagine della tela. quella tela dovrebbe comunque essere un'area di 200x200 px tesa a 500x500 px – Saba