【问题标题】:How to change the style size of a canvas dynamically by JavaScript? [duplicate]如何通过 JavaScript 动态更改画布的样式大小? [复制]
【发布时间】:2016-05-18 01:12:11
【问题描述】:

画布的大小(宽高)可以改变,但画布的样式大小不能动态改变。

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 动态改变画布样式大小的方法是什么?

【问题讨论】:

  • 对不起,我的意思是:stackoverflow.com/questions/13779429/…
  • 您是否尝试过指定 CSS 长度单位,例如“px”? canvas.style.width = "1000px"
  • 我尝试使用“canvas.setAttribute('width', '500');”和“canvas.setAttribute('height', '500');”,在定义没有样式的canvas标签时不起作用,在定义带样式的canvas标签时,Chrome会报信息:“[Report Only] Refused to apply inline样式,因为它违反了以下内容安全策略指令:“style-src 'self'”。'unsafe-inline' 关键字、哈希('sha256-8qEYHk4WwsvJKgLquQfLnw2DRoaMh4sWGNj24adrRLQ=')或随机数('nonce-... ') 是启用内联执行所必需的。"
  • 所以...您忽略了我的建议,并忽略了下面说同样事情的答案,相反,您现在正在评论一些没有的 other 事情不行吗?
  • canvas.style.width 和 canvas.style.height 在指定 CSS 长度单位“px”时有效。 nnnnnn:谢谢!

标签: javascript css canvas


【解决方案1】:

样式属性的宽度和高度需要测量其值,而 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/height是css的无效规则。

【讨论】:

  • 感谢您的回答!尼泊尔博金德拉。
  • @Calvin 不客气!
【解决方案2】:

我使用了 jQuery,它使用 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>

【讨论】:

  • abhay vyas:我尝试使用 jquery 作为您的方式,发现它有效。谢谢!
  • 如果你使用fabric.js,我发现你可以这样做:canvas.setDimensions({width:800, height:200},{backstoreOnly:true}); canvas.setDimensions({width:'800px', height:'200px'},{cssOnly:true});
  • widthheight 设置为css`只会拉伸画布图像。该画布仍然应该是一个 200x200 像素的区域,拉伸到 500x500 像素
猜你喜欢
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多