正统的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的函数

复制代码代码如下:

/**

*

draw one pixel line

* @param fromX

* @param formY

* @param toX

* @param toY

* @param backgroundColor - default is white

* @param vertical - boolean

*/

CanvasRenderingContext2D.prototype.onePixelLineTo = function(fromX, fromY, toX, toY, backgroundColor, vertical) {

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);

} else {

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画线的一个小技巧

觉得不错请顶一下。

html5垂直线怎么画,HTML5 Canvas画线技巧相关推荐

  1. 用HTML5图形拼成的画房子,canvas画小房子(补充:简陋的小房子)

    小房子 #cvs{ background:pink; } 您的浏览器不支持canvas标签! var canvas=document.getElementById("cvs"); ...

  2. html5绘制随机五角星_html5 canvas画五角星(随机生成)

    五角星的格定点坐标该如何定位?原理图如下: 源代码: function canvs_start(){ var c = document.getElementById("star") ...

  3. 毛边效果 html,Html5中Canvas画线有毛边如何解决

    Html5 Canvas 所有的画线指令画出来的线条都有毛边(比如 lineTo, arcTo,strokeRect),这是因为在Canvas中整数坐标值对应的位置恰巧是屏幕象素点中间的夹缝,那么当按 ...

  4. HTML5 Canvas 画虚线组件

    前段时间由于项目需要,用到了HTML5 Canvas画图,但是没有画虚线的方法,自己写了一个HTML5 画虚线的组件. dashedLine.js 1 if (window.CanvasRenderi ...

  5. html5画直线箭头,HTML5 canvas画带箭头的虚线

    今天给大家讲解的是在HTML5 canvas画带箭头的虚线.关于Canvas 对象表示一个 HTML 画布元素 -.它没有自己的行为,但是定义了一个 API 支持脚本化客户端绘图操作. 本案例注意事项 ...

  6. html画布直线代码,图文详解如何用html5 canvas画一条直线

    是HTML5 中新增的元素,它可以结合JavaScript脚本绘制出各种各样的图形,对于canvas你了解多少?你会用canvas画直线吗?这篇文章就和大家讲讲如何用canvas画一条直线,有一定的参 ...

  7. html5中怎么使用canvas画空心圆与实心圆

    这篇文章主要介绍"html5中怎么使用canvas画空心圆与实心圆"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"html5中怎么 ...

  8. html5的canvas 画西瓜

    这几天在学HTML5,练习canvas画了半个西瓜. 画的西瓜分为"瓜子","瓜肉","白瓜肉","瓜皮". 效果图: ...

  9. html 绘制正方形,HTML5之Canvas画正方形

    HTML5之Canvas画正方形 1.设计源码 HTML5之Canvas画正方形 function drawFour(id) { //获取canvas元素 var canvas = document. ...

最新文章

  1. 2个byte类型数据相加(转型问题的分析)
  2. python htmltestrunner报告_Python HTMLTestRunner可视化报告实现过程解析
  3. 核密度估计python_非参数估计:核密度估计KDE
  4. 【渝粤教育】广东开放大学 计量经济学 形成性考核 (21)
  5. mysql的jar包文件在哪找_数据库的jar在哪找
  6. 为什么NaN - NaN == 0.0与英特尔C ++编译器?
  7. Objective-C中的属性机制
  8. css一行内容过多显示省略号
  9. 《css权威指南》笔记
  10. hdfs基本操作命令(完整)
  11. 数字逻辑电路试题及答案
  12. android shell强制删除文件夹_Windows 强制删除文件及文件夹命令
  13. (Research)肝肿瘤免疫微环境亚型和中性粒细胞异质性
  14. python去除字符串中的单词_从字符串中删除特定单词的最有效方法
  15. elementUI里面upload组件上传图片时选择图片之后不显示图片的问题,
  16. Dojo1.11官方教程文档翻译(3.5)动画
  17. iFit(R)带来健身突破:使用iFit ActivePulse™实现个人化的自动心率训练
  18. 秃顶路人的计算机系统大作业Hello
  19. HTML 动态背景
  20. android删除本地图片,Android之删除图库照片

热门文章

  1. 无心剑随感《译诗但求达意传神》
  2. 大数据学习笔记52:Flume Interceptors(Flume拦截器)
  3. python樱花树代码_【推荐】手把手教你如何用Python画一棵漂亮樱花树含源码
  4. 简述一下索引的匹配原则_【进阶之路】索引中一些易忽视的点
  5. python80行代码写一个文件整理软件
  6. mfc 更新服务器文件,MFC程序版本自动升级更新
  7. mysql查询时间出来数字_mysql查询时间出来数字的解决方法
  8. Win7下使用openssl时出现“Unable to write ‘random state’‘的问题
  9. pytorch 实现MLP(多层感知机)
  10. python交换两个值原理_python 两数交换新写法原理