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 calc()会计算属性详解
Feb 27 HTML / CSS
纯css3实现的动画按钮的实例教程
Nov 17 HTML / CSS
纯CSS3实现8组超炫酷鼠标滑过图片动画
Mar 16 HTML / CSS
CSS3 旋转立方体问题详解
Jan 09 HTML / CSS
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
Jun 02 HTML / CSS
html5小技巧之通过document.head获取head元素
Jun 04 HTML / CSS
HTML5 Canvas绘制五星红旗
May 04 HTML / CSS
浅谈html5 video 移动端填坑记
Jan 15 HTML / CSS
做一个能自适应高度的textarea的示例代码
Sep 06 HTML / CSS
HTML+CSS制作心跳特效的实现
May 26 HTML / CSS
纯html+css实现打字效果
Aug 02 HTML / CSS
CSS 左边固定宽右边自适应的6种方法
May 15 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
自动分页的不完整解决方案
2007/01/12 PHP
php汉字转拼音的示例
2014/02/27 PHP
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
CSS常用网站布局实例
2008/04/03 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
浅谈js原生拖放
2016/11/21 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
Python2和Python3中print的用法示例总结
2017/10/25 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
Python面向对象封装操作案例详解
2019/12/31 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
python交互模式基础知识点学习
2020/06/18 Python
keras K.function获取某层的输出操作
2020/06/29 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
毕业生精彩的自我评价分享
2013/10/06 职场文书
财务人员个人求职信范文
2013/12/04 职场文书
服装设计专业自荐书范文
2013/12/30 职场文书
企业总经理岗位职责
2014/02/13 职场文书
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
技术比武方案
2014/05/19 职场文书
出国签证在职证明
2014/09/20 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js