javascript - HTML Canvas 意外改变颜色

标签 javascript html firefox canvas html5-canvas

我正在尝试使用 HTML Canvas 制作网格。我编写了以下代码。一开始一切正常,但一旦调整窗口大小,网格线的颜色就会因某种原因改变颜色。

如果您无法重现该行为,here is a video of the behavior

var canvas = document.querySelector('canvas');

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

var ctx = canvas.getContext('2d');

window.addEventListener('resize', function() {
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
});

var xOffset = 0;
var yOffset = 0;
var gridSize = 75;

ctx.lineWidth = 2;

function draw() {

  ctx.fillStyle = '#e8e8e8';
  ctx.fillRect(0, 0, window.innerWidth, window.innerHeight);

  ctx.strokeStyle = '#7a7f7e';
  ctx.beginPath();
  ctx.moveTo(0, 0);
  for (var i = 0; i < window.innerWidth + gridSize; i += gridSize) {

    ctx.moveTo(i + xOffset % gridSize, 0);


    ctx.lineTo(i + xOffset % gridSize, window.innerHeight);
  }

  for (var i = 0; i < window.innerHeight + gridSize; i += gridSize) {


    ctx.moveTo(0, i + yOffset % gridSize);

    ctx.lineTo(window.innerWidth, i + yOffset % gridSize);
  }
  ctx.stroke();

  window.requestAnimationFrame(draw);
}

window.requestAnimationFrame(draw);
<canvas></canvas>

最佳答案

我认为解决方案是将 ctx.lineWidth = 2 移动到 requestAnimationFrame 内。当我手动更改宽度时,我看到相同的行为,线宽默认。所以这里是解决您问题的工作 fiddle :

https://jsfiddle.net/ibowankenobi/skgn9q51/2/

function draw() {

  ctx.fillStyle = '#e8e8e8';
  ctx.fillRect(0, 0, window.innerWidth, window.innerHeight);
 ctx.lineWidth = 2;
......

我认为这种行为是有意为之的。因此,要获取 lineWidth,您可能需要求助于 save() Restore();

关于javascript - HTML Canvas 意外改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50070353/

相关文章:

javascript - 如何从本地存储中删除以特定数字结尾的项目?

html - 当分辨率改变时使面板进入新行

javascript - 如何使用 Javascript 和 Firebase 从数据库中删除 child_object

表格单元格内的 CSS 绝对定位在 Firefox 中不起作用

firefox - 是否有 Gecko 等同于 -webkit-mask 或 Gecko 浏览器降级的奇特方式?

javascript - 更改 jquery 对象的 'name' 属性

通过将函数放在变量中来获得 JavaScript 的优势?

ssl - Firefox Quantum - SSLKEYLOGFILE - Wireshark

javascript - 如何检测 Controller 中 ng-change 中的 null 值

javascript - 如何将样式应用于类的单个元素,同时从同一类的前一个元素中删除样式?