html5 canvas里绘制椭圆并保持线条粗细均匀的技巧


Posted in HTML / CSS onMarch 25, 2013

Canvas里绘制椭圆是一个很常见的需求,比较新的HTML Canvas 2D Context W3C草案里面新增了ellipse方法绘制椭圆,但是目前大多数浏览器还没有实现该方法,所以需要用arc或者arcTo方法结合scale变形来绘制椭圆。

示例代码:

复制代码
代码如下:

<canvas width="400" height="300"></canvas>
<script>
var ctx = documentquerySelector('canvas')getContext('2d');
ctxlineWidth = "10";
ctxscale(1,2);
ctxarc(150,150,100,0,MathPI*2,false);
ctxstroke();
</script>
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
有点不对,因为线条粗细不均匀了,stroke也被scale影响了。

要修正这个问题,就要一点点小技巧了。

示例代码:

复制代码
代码如下:

[code]
<canvas width="400" height="300"></canvas>
<script>
var ctx = documentquerySelector('canvas')getContext('2d');
ctxlineWidth = "10";
ctxsave();
ctxscale(1,2);
ctxarc(150,150,100,0,MathPI*2,false);
ctxrestore();
ctxstroke();
</script>

[/code] html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
现在均匀了,非常完美。

技巧就在先save保存画布状态,然后缩放、调用路径指令,再restore恢复画布状态,再stroke绘制出来。

关键点是先save后缩放,先restore后stroke.

HTML / CSS 相关文章推荐
CSS3弹性盒模型开发笔记(三)
Apr 26 HTML / CSS
纯CSS3实现圆角效果(含IE兼容解决方法)
May 07 HTML / CSS
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
Jul 21 HTML / CSS
使用CSS变量实现炫酷惊人的悬浮效果
Apr 26 HTML / CSS
使用HTML5 IndexDB存储图像和文件的示例
Nov 05 HTML / CSS
自定义html标记替换html5新增元素
Oct 17 HTML / CSS
HTML5注册页面示例代码
Mar 27 HTML / CSS
HTML5 新标签全部总汇(推荐)
Jun 13 HTML / CSS
详解html5 shiv.js和respond.min.js
Jan 24 HTML / CSS
清除canvas画布内容(点擦除+线擦除)
Aug 12 HTML / CSS
HTML5之高度塌陷问题的解决
Jun 01 HTML / CSS
css弧边选项卡的项目实践
May 07 HTML / CSS
HTML5中的Article和Section元素认识及使用
Mar 22 #HTML / CSS
纯html5+css3下拉导航菜单实现代码
Mar 18 #HTML / CSS
html5配合css3实现带提示文字的输入框(摆脱js)
Mar 08 #HTML / CSS
html5的新增的标签和废除的标签简要概述
Feb 20 #HTML / CSS
html5新增的属性和废除的属性简要概述
Feb 20 #HTML / CSS
HTML5中微数据概述及在搜索引擎中的使用举例
Feb 07 #HTML / CSS
HTML中fieldset标签概述及使用方法
Feb 01 #HTML / CSS
You might like
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
首页图片漂浮效果示例代码
2014/06/05 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
React和Vue中监听变量变化的方法
2018/11/14 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
Python合并多个Excel数据的方法
2018/07/16 Python
python保存网页图片到本地的方法
2018/07/24 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
运行时异常与一般异常有何异同?
2014/01/05 面试题
试用期转正鉴定评语
2014/01/27 职场文书
自主招生推荐信范文
2014/05/10 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
新文化运动的口号
2014/06/21 职场文书
珍惜资源的建议书
2014/08/26 职场文书
白酒代理协议书范本
2014/10/26 职场文书
市级三好学生评语
2014/12/29 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
鸡毛信观后感
2015/06/11 职场文书
体育教师教学随笔
2015/08/15 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
如何用JS实现简单的数据监听
2021/05/06 Javascript
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python