画布setLineDash和lineDashOffset不在iOS / Safari中重置?

时间:2014-02-17 20:56:12

标签: javascript ios html5 canvas safari

请参阅此处的小提琴: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上......似乎完全被忽略了,线条保持虚线。为什么是这样?还有,还有其他方法来正确重置行破折号......? (最好是跨浏览器/操作系统)

由于

2 个答案:

答案 0 :(得分:15)

使用此表示法,它将适用于支持setLineDash的所有浏览器

ctx.setLineDash([]);

答案 1 :(得分:0)

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

添加

ctx.restore();
在绘制非虚线之前

将起作用。

然后你必须重置其他东西,比如lineWidth off course。