2016-02-08 64 views
5

畫布的大小(寬度和高度)可以更改,但畫布的樣式大小不能動態更改。如何通過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. 

canvas.width和canvas.height都能正常工作,但canvas.style.width和canvas.style.height都不起作用。

在我的情況下,畫布的樣式大小隻能通過畫布的css文件或內聯樣式進行更改。

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

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

注:當內聯樣式存在CSS文件就失效了。

如何通過JavaScript動態更改畫布的樣式大小?

在此先感謝!

+0

對不起jquery的,我的意思是:http://stackoverflow.com/questions/13779429/canvas-inline-height-and-width-屬性覆蓋與CSS樣式是這是 – Gavriel

+1

您是否嘗試過指定CSS長度單位,例如「px」? 'canvas.style.width =「1000px」' – nnnnnn

+0

我嘗試使用「canvas.setAttribute('width','500');」 和「canvas.setAttribute('height','500');」,當定義沒有樣式的canvas標籤時它們不起作用,並且在使用樣式定義canvas標籤時,Chrome報告消息: 「[Report Only] Reflected to應用內聯樣式,因爲它違反了以下內容安全策略指令:「style-src'self'」。'unsafe-inline'關鍵字,一個散列('sha256-8qEYHk4WwsvJKgLquQfLnw2DRoaMh4sWGNj24adrRLQ =')或一個隨機數('nonce-。 ..')需要啓用內聯執行。「 – Calvin

回答

5

樣式屬性的寬度和高度需要測量其值,而html屬性的寬度和高度不需要。所以,你需要設置px, em or %等直接在您的代碼:

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

style.width /身高沒有單位是CSS規則無效。

+0

謝謝你的回答! Bhojendra尼泊爾。 – Calvin

+0

@Calvin不客氣! –

3

我已經使用的是使用CSS方法的高度和寬度設置

<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:我試圖按照你的方式使用jquery,並發現它工作。謝謝! – Calvin

+0

如果你使用fabric.js,我發現你可以通過:canvas.setDimensions({width:800,height:200},{backstoreOnly:true}); canvas.setDimensions({width:'800px',height:'200px'},{cssOnly:true}); – Calvin

+1

將'width'和'height'設置爲css'只會拉伸畫布圖像。該畫布仍然應該是200x200像素區域,拉伸至500x500像素 – Saba