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实现的阴影效果
Dec 24 HTML / CSS
使用CSS3制作一个简单的Chrome模拟器
Jul 15 HTML / CSS
CSS3制作圆形滚动进度条动画的示例
Nov 05 HTML / CSS
详解Html5微信支付爬坑之路
Jul 24 HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
Jun 03 HTML / CSS
html5文字阴影效果text-shadow使用示例
Jul 25 HTML / CSS
HTML5 Canvas之测试浏览器是否支持Canvas的方法
Jan 01 HTML / CSS
详解HTML5中的picture元素响应式处理图片
Jan 03 HTML / CSS
详解html5 shiv.js和respond.min.js
Jan 24 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
Jun 03 HTML / CSS
AmazeUI 单选框和多选框的实现示例
Aug 18 HTML / CSS
AmazeUI图片轮播效果的示例代码
Aug 20 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获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
PHP异常处理浅析
2015/05/12 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
jquery制作LED 时钟特效
2015/02/01 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
JQuery控制DIV的选取实现方法
2016/09/18 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
jQuery实现增删改查
2020/12/22 jQuery
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python 字符串split的用法分享
2013/03/23 Python
Python实现简单状态框架的方法
2015/03/19 Python
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
Python中turtle作图示例
2017/11/15 Python
Python实现的rsa加密算法详解
2018/01/24 Python
python中的常量和变量代码详解
2018/07/25 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
python 追踪except信息方式
2020/04/25 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
在校学生职业规划范文
2014/01/08 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
一般纳税人申请报告
2015/05/18 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android