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制作的20种loading动效
Jul 05 HTML / CSS
CSS3 简写animation
May 10 HTML / CSS
CSS3支持IE6, 7, and 8的边框border属性
Dec 28 HTML / CSS
一款基于css3的列表toggle特效实例教程
Jan 04 HTML / CSS
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
Jul 08 HTML / CSS
CSS3 仿微信聊天小气泡实例代码
Apr 05 HTML / CSS
HTML5 Canvas渐进填充与透明实现图像的Mask效果
Jul 11 HTML / CSS
html5使用canvas绘制太阳系效果
Dec 15 HTML / CSS
详解HTML5 录音的踩坑之旅
Dec 26 HTML / CSS
小程序瀑布流解决左右两边高度差距过大的问题
Feb 20 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
Apr 14 HTML / CSS
关于HTML5+ API plusready的兼容问题
Nov 20 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 OPCode缓存 APC详细介绍
2010/10/12 PHP
php 数组的一个悲剧?
2011/05/11 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
vue 左滑删除功能的示例代码
2019/01/28 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
vue跳转方式(打开新页面)及传参操作示例
2020/01/26 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
如何基于Python创建目录文件夹
2019/12/31 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
Shell编程面试题
2012/05/30 面试题
计算机毕业大学生推荐信
2013/12/01 职场文书
产品设计开发计划书
2014/05/07 职场文书
高中军训的心得体会
2014/09/01 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
优秀创业计划书分享
2019/07/19 职场文书
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android