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 27 HTML / CSS
浅析css3中matrix函数的使用
Jun 06 HTML / CSS
CSS3 实现童年的纸飞机
May 05 HTML / CSS
css3进阶之less实现星空动画的示例代码
Sep 10 HTML / CSS
浅谈HTML5新增及移除的元素
Jun 27 HTML / CSS
Html5如何唤起百度地图App的方法
Jan 27 HTML / CSS
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
Jan 06 HTML / CSS
html5 video标签屏蔽右键视频另存为的js代码
Nov 12 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
Jan 04 HTML / CSS
用HTML5制作一个简单的弹力球游戏
May 12 HTML / CSS
【HTML5】3D模型--百行代码实现旋转立体魔方实例
Dec 16 HTML / CSS
如何用H5实现好玩的2048小游戏
Jul 23 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
PHP XML备份Mysql数据库
2009/05/27 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
DOM 基本方法
2009/07/18 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python selenium如何设置等待时间
2016/09/15 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
python 基于opencv操作摄像头
2020/12/24 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
学校消防演习方案
2014/02/19 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
MySQL创建表操作命令分享
2022/03/25 MySQL
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python