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 动画效果的总结详解
May 09 HTML / CSS
使用简单的CSS3属性实现炫酷读者墙效果
Jan 08 HTML / CSS
CSS3 flex布局之快速实现BorderLayout布局
Dec 03 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
May 19 HTML / CSS
HTML5之SVG 2D入门4—笔画与填充
Jan 30 HTML / CSS
HTML5中新标签和常用标签详解
Mar 07 HTML / CSS
html5中JavaScript removeChild 删除所有节点
May 16 HTML / CSS
canvas之自定义头像功能实现代码示例
Sep 29 HTML / CSS
遮罩层 + Iframe实现界面自动显示的示例代码
Apr 26 HTML / CSS
Html5之webcoekt播放JPEG图片流
Sep 22 HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
Feb 24 HTML / CSS
CSS3 制作的图片滚动效果
Apr 14 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
Linux中为php配置伪静态
2014/12/17 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
three.js 入门案例详解
2018/01/23 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
JavaScript仿京东轮播图效果
2021/02/25 Javascript
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
python str与repr的区别
2013/03/23 Python
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
服装设计专业自荐书范文
2013/12/30 职场文书
关于母亲节的感言
2014/02/04 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
英文自荐信常用句子
2014/03/26 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
销售员自我评价
2015/03/11 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
MySql数据库 查询时间序列间隔
2022/05/11 MySQL