使用drawRect的Createjs掩码在Safari中不起作用

Posted

技术标签:

【中文标题】使用drawRect的Createjs掩码在Safari中不起作用【英文标题】:Createjs masking with drawRect not working in Safari 【发布时间】:2019-08-05 14:50:54 【问题描述】:

我想从图片中剪下一些正方形。 问题是CreatejsdrawRect 屏蔽在Safari 中不起作用。 请在 Safari 中查看以下代码笔

https://codepen.io/anon/pen/moXXRN

它适用于除 Safari 以外的所有浏览器

【问题讨论】:

已确认,但这可能是 Safari/Canvas 错误。您正在使用负宽度矩形将大矩形向后缠绕,这是进行剪切的创造性解决方案。我会确认 Safari 的画布是否支持这一点并报告。 【参考方案1】:

问题不在于遮罩或 EaselJS,而是 Safari 如何处理使用负坐标绘制的缠绕矩形。看起来大多数浏览器将一个负尺寸的矩形视为反向绘制,但 Safari 不会。

超级simple canvas example也有同样的问题:

var ctx = document.getElementById("canvas").getContext("2d");
ctx.beginPath();
ctx.rect(50,50,50,50);
ctx.rect(150, 150, 50, 50);
ctx.rect(300, 0, 350, -350);
ctx.fillStyle = "red";
ctx.fill();

在大多数浏览器中,这会绘制剪切区域。 Safari 没有。

使用自己的lineTo() 命令的解决方案是一个很好的解决方法。

【讨论】:

嗨兰尼,是的,你是对的。非常感谢您的支持。【参考方案2】:

使用lineTomoveTo 函数而不是drawRect 设法让它在Safari 中工作

例如

shape.graphics.moveTo( 50, 50 );
shape.graphics.lineTo( 100, 50 );
shape.graphics.lineTo( 100, 100 );
shape.graphics.lineTo( 50, 100 );
shape.graphics.lineTo( 50, 50 );

shape.graphics.moveTo( 300, 0 );
shape.graphics.lineTo( 0, 0 );
shape.graphics.lineTo( 0, 300 );
shape.graphics.lineTo( 300, 300 );
shape.graphics.lineTo( 300, 0 );

https://codepen.io/anon/pen/EMEZMx

【讨论】:

以上是关于使用drawRect的Createjs掩码在Safari中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用位掩码在 Swift 2.2 中自定义 UIControlState?

Unity ui 掩码在谷歌像素设备上不起作用

如何使用布尔掩码在 pandas DataFrame 中用 nan 替换“任何字符串”?

填充和注意掩码在 GPT 语言模型的批量输入中无法按预期工作

PHP fopen 使用文件掩码

子网掩码长度是啥?怎么看