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制作动态进度条以及附加jQuery百分比数字显示
Dec 13 HTML / CSS
CSS3之多背景background使用示例
Oct 18 HTML / CSS
纯CSS3单页切换导航菜单界面设计的简单实现
Aug 16 HTML / CSS
css3实现多个元素依次显示效果
Dec 12 HTML / CSS
HTML5中的新元素介绍
Oct 17 HTML / CSS
canvas使用注意点总结
Jul 19 HTML / CSS
用canvas实现图片滤镜效果附演示
Nov 05 HTML / CSS
HTML5中的音频和视频媒体播放元素小结
Jan 29 HTML / CSS
Html5百叶窗效果的示例代码
Dec 11 HTML / CSS
移动端Html5中百度地图的点击事件
Jan 31 HTML / CSS
html5中嵌入视频自动播放的问题解决
May 25 HTML / CSS
html5 video全屏播放/自动播放的实现示例
Aug 06 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
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
apache php模块整合操作指南
2012/11/16 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
简洁Ajax函数处理(示例代码)
2013/11/15 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
Python3基础之条件与循环控制实例解析
2014/08/13 Python
理解Python中的With语句
2015/02/02 Python
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
python爬虫实现获取下一页代码
2020/03/13 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
python中format函数如何使用
2020/06/22 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
英国领先的游戏零售商:GAME
2019/09/24 全球购物
电大本科自我鉴定
2014/02/05 职场文书
厨房管理计划书
2014/04/27 职场文书
群众路线调研报告范文
2014/11/03 职场文书
语文复习计划
2015/01/19 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
小平您好观后感
2015/06/09 职场文书
大学生活感想
2015/08/10 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
python基础之//、/与%的区别详解
2022/06/10 Python