HTML5 Canvas绘制圆点虚线实例


Posted in HTML / CSS onJanuary 01, 2015

HTML5 Canvas 提供了很多图形绘制的函数,但是很可惜,Canvas API只提供了画实线的函数(lineTo),却并未提供画虚线的方法。这样的设计有时会带来很大的不便,《JavaScript权威指南》的作者David Flanagan就认为这样的决定是有问题的,尤其是在标准的修改和实现都比较简单的情况下 (“…something that is so trivial to add to the specification and so trivial to implement… I really think you’re making a mistake here” — http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2007-May/011224.html)。

在Stack Overflow上,Phrogz提供了一个自己的画虚线的实现(http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas),严格的说,这是一个点划线的实现(p.s. 我认为该页面上Rod MacDougall的简化版更好)。那么,如果需要画圆点虚线(如下图所示),应该怎么办呢?

HTML5 Canvas绘制圆点虚线实例

以下是我自己的实现,只支持画水平的和垂直的圆点虚线,可以参考Phrogz与Rod MacDougall的方法来添加斜线描画的功能。

复制代码
代码如下:

var canvasPrototype = window.CanvasRenderingContext2D && CanvasRenderingContext2D.prototype;
canvasPrototype.dottedLine = function(x1, y1, x2, y2, interval) {
if (!interval) {
interval = 5;
}
var isHorizontal=true;
if (x1==x2){
isHorizontal=false;
}
var len = isHorizontal ? x2-x1 : y2-y1;
this.moveTo(x1, y1);
var progress=0;
while (len > progress) {
progress += interval;
if (progress > len) {
progress = len;
}
if (isHorizontal) {
this.moveTo(x1+progress,y1);
this.arc(x1+progress,y1,1,0,2*Math.PI,true);
this.fill();
} else {
this.moveTo(x1,y1+progress);
this.arc(x1,y1+progress,1,0,2*Math.PI,true);
this.fill();
}
}
}
HTML / CSS 相关文章推荐
CSS3 圆角效果
Jul 15 HTML / CSS
css3实现wifi信号逐渐增强效果实例
Aug 09 HTML / CSS
浅谈CSS3中的变形功能-transform功能
Dec 27 HTML / CSS
CSS3 :default伪类选择器使用简介
Mar 15 HTML / CSS
CSS3 实现图形下落动画效果
Nov 13 HTML / CSS
HTML5实现QQ聊天气泡效果
Jun 26 HTML / CSS
HTML5教程之html 5 本地数据库(Web Sql Database)
Apr 03 HTML / CSS
html5构建触屏网站之touch事件介绍
Jan 07 HTML / CSS
通过Canvas及File API缩放并上传图片完整示例
Aug 08 HTML / CSS
AmazeUI图片轮播效果的示例代码
Aug 20 HTML / CSS
Html5获取用户当前位置的几种方式
Jan 18 HTML / CSS
HTTP中的Content-type详解
Jan 18 HTML / CSS
HTML页面中添加Canvas标签示例
Jan 01 #HTML / CSS
HTML5 Canvas之测试浏览器是否支持Canvas的方法
Jan 01 #HTML / CSS
HTML5 Canvas中绘制矩形实例
Jan 01 #HTML / CSS
HTML5 Canvas中使用用路径描画圆弧
Jan 01 #HTML / CSS
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
Jan 01 #HTML / CSS
HTML5制作酷炫音频播放器插件图文教程
Dec 30 #HTML / CSS
html5实现完美兼容各大浏览器的播放器
Dec 26 #HTML / CSS
You might like
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
2020/08/20 Javascript
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
python使用代理ip访问网站的实例
2018/05/07 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
Python创建字典的八种方式
2019/02/27 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
应届生幼儿园求职信
2013/11/12 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
上诉答辩状范文
2015/05/22 职场文书
公司晚会主持词
2019/04/17 职场文书
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL
Python四款GUI图形界面库介绍
2022/06/05 Python