2016-02-08 67 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