Canvas的setLineDash和lineDashOffset在iOS/Safari中无法重置?

14

看这里的代码演示:http://jsfiddle.net/mYdm9/4/

在我的电脑上,执行

ctx.lineWidth=20;
ctx.setLineDash([20,30]); 
ctx.lineDashOffset=10;
ctx.beginPath();
ctx.moveTo(150,150);
ctx.lineTo(240,240);
ctx.lineTo(180,40);
ctx.stroke();
ctx.closePath()

提供第一组带有所需破折号/偏移量的行

现在使用

ctx.setLineDash([0,0]); 
ctx.lineDashOffset=0

在下一批命令中:

ctx.beginPath();
//resets line dash... except on iOS Safari it seems...
ctx.setLineDash([0,0]); 
ctx.lineDashOffset=0;
ctx.moveTo(0,300);
ctx.lineTo(0,250);
ctx.lineTo(100,400);
ctx.lineTo(200,300);
ctx.stroke();
ctx.closePath()

在第一组线条后,似乎重置了任何虚线属性。重新获得实线。

在运行Safari的iPad2上...它似乎完全被忽略了,线条仍然是虚线的。为什么会这样?还有,是否有其他方法可以正确地重置线条虚线...?(最好能够跨浏览器/操作系统工作)

谢谢


我认为在移动Safari (iOS)上,至少在6.x版本中没有对setLineDash方法进行支持。 - Tom Roggero
2个回答

18

使用这种记号,在所有支持setLineDash的浏览器中都能起作用

ctx.setLineDash([]);

1
谢谢!像魔法一样奏效了,我和楼主遇到了同样的问题,现在问题解决了 :) - Youp Bernoulli

0

我遇到了类似的行为,让 Safari 重置 lineDash 的唯一方法是使用context.restore()

添加

ctx.restore();

在绘制非虚线之前将起作用。

然后,您将不得不重置其他东西,如 lineWidth。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接