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实现一款模仿iphone样式的注册表单
Mar 20 HTML / CSS
CSS3 Flexbox中flex-shrink属性的用法示例介绍
Dec 30 HTML / CSS
CSS3制作文字半透明倒影效果的两种实现方式
Aug 08 HTML / CSS
一款纯css3实现的响应式导航
Oct 31 HTML / CSS
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
Aug 15 HTML / CSS
CSS3中新增的对文本和字体的设置
Feb 03 HTML / CSS
canvas实现飞机打怪兽射击小游戏的示例代码
Jul 09 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
Nov 27 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
Jan 04 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
Sep 08 HTML / CSS
HTML5实现移动端点击翻牌功能
Oct 23 HTML / CSS
基于HTML十秒做出淘宝页面
Oct 24 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
文章推荐系统(二)
2006/10/09 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
js中设置元素class的三种方法小结
2011/08/28 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
Python操作MongoDB详解及实例
2017/05/18 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
Python实现求数列和的方法示例
2018/01/12 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
python 串行执行和并行执行实例
2020/04/30 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
python Gabor滤波器讲解
2020/10/26 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
活动志愿者自荐信
2014/01/27 职场文书
合作协议书模板2014
2014/09/26 职场文书
学生个人总结范文
2015/02/15 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
商场广播稿范文
2015/08/19 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python