欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
估量一个预期宽大的细线,在使用HTML5 Canvas实现时要特别注意确保你的所有坐标点是整体,否则HTML5会自动实现边缘反锯齿,感兴趣的朋友可以看下效果图
正统的HTML5 Canvas中如下代码
 
复制代码
代码如下:
 
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(10,100);
ctx.lineTo(300,100);
ctx.stroke();
 
运行结果呈现出来的并不是一个预期宽度的线
 
感觉怎么好粗啊,跟常常见到的网页版各种替换线效果
 
很不一样,难道HTML5 Canvas就没想到搞好点嘛
 
其实这个根本原因在于Canvas的而不是从中间开始的替代从0〜1,不是从0.5〜1
 
+ 0〜0.5的布局方式,所以
 
导致fade在边缘,看起来线很宽。
 
解决方法有两个,一个是错位覆盖法,,另外一种是中心
 
平移(0.5,0.5)。实现代码如下:
 
错位覆盖法我已经包装成一个原始context的函数
 
复制代码
代码如下:
 
/ **
* <p>画一条像素线</ p>
* @param fromX
* @param formY
* @param toX
* @param toY
* @param backgroundColor-默认为白色
* @param vertical-boolean
* /
CanvasRenderingContext2D.prototype .onePixelLineTo =函数(fromX,fromY,toX,toY,backgroundColor,垂直){
var currentStrokeStyle = this.strokeStyle;
this.beginPath();
this.moveTo(fromX,fromY);
this.lineTo(toX,toY);
this.closePath();
this.lineWidth = 2;
this.stroke();
this.beginPath();
if(vertical){
this.moveTo(fromX + 1,fromY);
this.lineTo(toX + 1,toY);
} 别的 {
this.moveTo(fromX,fromY + 1);
this.lineTo(toX,toY + 1);
}
this.closePath();
this.lineWidth = 2;
this.strokeStyle = backgroundColor;
this.stroke();
this.strokeStyle = currentStrokeStyle;
};
 
中心平移法代码如下:
 
复制代码
代码如下:
 
ctx.save();
ctx.translate(0.5,0.5);
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(10,100);
ctx.lineTo(300,100);
ctx.stroke();
ctx.restore();
 
要特别注意确保自己的所有坐标点是整体,否则HTML5会自动实现边缘反锯齿
 
又导致你的一个直线看起来变粗了。
 
运行效果:
 
现在效果怎么样,这个就是HTML5 Canvas画线的一个小技巧
 
觉得不错请顶一下。

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h61502.shtml