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 相关文章推荐
表单button的outline在firefox浏览器下的问题
Dec 24 HTML / CSS
使用css3制作登录表单的步骤
Apr 07 HTML / CSS
css3实现椭圆轨迹旋转的示例代码
Oct 29 HTML / CSS
CSS3颜色值RGBA与渐变色使用介绍
Mar 06 HTML / CSS
HTML5实现Notification API桌面通知功能
Mar 02 HTML / CSS
Html5新标签解释及用法
Feb 17 HTML / CSS
使用html5+css3来实现slider切换效果告别javascript+css
Jan 08 HTML / CSS
微信浏览器取消缓存的方法
Mar 28 HTML / CSS
基于HTML5 的人脸识别活体认证的实现方法
Jun 22 HTML / CSS
webView加载html图片遇到的问题解决
Oct 08 HTML / CSS
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
Aug 24 HTML / CSS
CSS3实现三角形不断放大效果
Apr 13 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
mysql中存储过程、函数的一些问题
2007/02/14 PHP
PHP SQLite类
2009/05/07 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
PHP数据过滤的方法
2013/10/30 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
python二叉树的实现实例
2013/11/21 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
什么是SCM(软件配置管理)
2014/08/16 面试题
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
拾金不昧的表扬信
2014/01/16 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
党员评议思想汇报
2014/10/08 职场文书
作风转变年心得体会
2014/10/22 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技