【问题标题】:Canvas issues with Chrome on MacMac 上 Chrome 的画布问题
【发布时间】:2012-09-26 09:28:59
【问题描述】:

我一直在寻找为什么在画布元素上绘制、擦除和重绘旋转矩形在 mac 上的 google chrome 中不起作用的原因。

我需要这个,因为我想在画布上呈现悬停覆盖。

我创建了一个代表我的代码的 Fiddle:link

HTML:

<canvas id="canvas"  width="400" height="165" style="left: 0px; top: 0px; background-color:red;"></canvas>

Javascript:

var canvas =null;
var ctx;
var target;

$(function() {
        canvas=document.getElementById('canvas');
        ctx = canvas.getContext('2d');
        target = { h:81, id:"i1_2", isempty:false, r:-11.64, w:60, x:143, y:19, zindex:2};
});

function drawRectangle() {
        ctx.save();
        ctx.translate(target.x, target.y);
        ctx.fillStyle = "green";
        ctx.strokeStyle = "blue";
        ctx.globalAlpha = 0.40;
        ctx.rotate(target.r / 180 * Math.PI); //NO Rotation => It works!
        ctx.fillRect(0,0,target.w,target.h);
        ctx.restore();   
}

function clearRectangle() {
    ctx.clearRect(0,0,400,165);
}    

这适用于 Windows 和 Mac 上的所有浏览器,Mac 上的 Chrome 除外。

当我注释掉这一行时

// ctx.rotate(angle);

矩形被绘制在画布上。 (当然没有旋转)

我做错了吗?或者这可能是 Chrome 中的一个错误?

编辑:可能不是 Chrome 中的错误,因为此测试页面可以在 Mac 上的 chrome 中运行:

http://www.html5canvastutorials.com/demos/advanced/html5_canvas_transform_rotate/

编辑 2:我一直在对此进行更多研究,发现此问题已记录:link

我在那里测试小提琴并添加了一些旋转画布元素的测试:link 阅读那里的信息,当您在较小的画布上绘图时,问题就“解决了”。

在这里查看我的小提琴结果:

当我在上面的小提琴中更改画布的大小时,使它们仅小 1 像素。那么结果就ok了。

最终结论:看来我可以画一次旋转的矩形。但是当我使用 clearRect 方法擦除画布时,我无法再次绘制矩形。只有当画布的大小足够大时才会发生这种情况。 (大于 65600px)

你们中有人知道这个解决方案,以便我可以在 Mac 上使用 chrome 在画布上绘制和重绘矩形吗?

我快疯了。

【问题讨论】:

  • 创建jsfiddle.net,您可能会得到更多帮助。
  • 这是我目前的小提琴,它还不是我想要的,因为它在其他浏览器中也有一些奇怪的行为。我会尽快做更多的工作。
  • 什么是? (您没有发布链接...)
  • 更新了更多信息的问题。是的,我忘记了周五的链接:s
  • 请看:stackoverflow.com/a/12440283。它可能会解决您的问题 [1]:stackoverflow.com/a/12440283

标签: javascript macos html google-chrome


【解决方案1】:

从您所做的研究来看,您已经知道这是一个浏览器错误,因此您无法自行修复它。但是,您可以通过使用彼此相邻的较小画布并在每个画布上绘制不同的偏移量来解决此问题,以便对齐形状的边缘。

从代码的角度来看,它并不完全好,但在视觉上它看起来是一样的,它应该可以解决这个错误。

我已经修改了你的小提琴来演示:http://jsfiddle.net/z8f2f/35/

【讨论】:

  • 这在我的环境中实现起来有点困难,但我认为它将来可能会派上用场。如果它适用于大多数版本,那么我认为这对我的访问者来说不是一个大问题。感谢您的解决方法。这确实是我一直在寻找的东西。
猜你喜欢
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 2013-09-06
  • 2013-09-17
相关资源
最近更新 更多