返回列表 发新帖

html5 canvas绘制圆点虚线实例

262.9k 13
swmozowtfl 发表于 2015-7-9 23:13:11|湖北 | 查看全部 阅读模式
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” —)。; T) K8 _! n, l1 K4 S$ G2 b
在stack overflow上,phrogz提供了一个自己的画虚线的实现(),严格的说,这是一个点划线的实现(p.s. 我认为该页面上rod macdougall的简化版更好)。那么,如果需要画圆点虚线(如下图所示),应该怎么办呢?
  w( L; E, O! ], i/ \% [$ u  }
; R: T2 c) z. T; e) v
                               
登录/注册后可看大图

) f. ?! a$ s$ N以下是我自己的实现,只支持画水平的和垂直的圆点虚线,可以参考phrogz与rod macdougall的方法来添加斜线描画的功能。
3 m6 k7 N9 D1 I  x5 d代码如下:
* y( ^9 }5 ?9 L9 b( r9 b& J9 _# x
var canvasprototype = window.canvasrenderingcontext2d && canvasrenderingcontext2d.prototype;
( y% |, d. b/ h0 Fcanvasprototype.dottedline = function(x1, y1, x2, y2, interval) {
' D6 n! A1 k; {: qif (!interval) {
" T+ v' c! y% L+ _# u/ c: Qinterval = 5;
% [" `& h. K% u  S6 |7 [% h" z0 O}
# U1 }2 [7 @* h( P% A) vvar ishorizontal=true;4 a) O$ {5 Y, n- t
if (x1==x2){
; J( Q1 J  C- b* mishorizontal=false;: D" d/ v) v: {/ d5 }5 E
}
2 F& O, c6 u# lvar len = ishorizontal ? x2-x1 : y2-y1;. f8 N1 M8 N9 {5 d- W  g# G/ p
this.moveto(x1, y1);( K  G3 [& d6 i# [$ P2 o0 [
var progress=0;6 Y7 y5 b' M* g, P3 t1 J( ]
while (len > progress) {/ D1 h% c( I; h1 i
progress += interval;
4 s. y+ e- M9 `if (progress > len) {& _8 \+ J5 e+ C& }" E) p6 I0 ^# k
progress = len;" }9 N9 N9 i& D
}' _" }8 p! }* u
if (ishorizontal) {# z+ Y4 Q! h: Z# f
this.moveto(x1+progress,y1);
* \" n! ~0 N# V' G- pthis.arc(x1+progress,y1,1,0,2*math.pi,true);. p1 N, b+ v" s2 s7 L% E
this.fill();! h: ?: [! Z& |+ Y
} else {
' P+ D, L, ~, ~" s5 Cthis.moveto(x1,y1+progress);
0 v: {. g  O  dthis.arc(x1,y1+progress,1,0,2*math.pi,true);1 E& q3 h3 T1 T7 F  [; P: W
this.fill();
9 g# R0 f' K3 \( M; R/ F+ z}/ ^8 a' j" G7 [4 H  p% @5 E; K
}  G$ v% `- l* F
}0 o! ^" a2 e4 D9 M
' K! Q2 [/ Q/ {; D
更多网页制作信息请查看: 网页制作

回复|共 13 个

gevaemaidovef 发表于 2015-10-7 11:40:42|瑞典 | 查看全部
小手一抖,经验到手!手拿酱油,低头猛走!酱油党路过,杜绝零回复
tohme 发表于 2015-10-7 11:40:48|INNA | 查看全部
哈 你逗逗他啊
wwdu926a 发表于 2015-10-7 11:40:58|比利时 | 查看全部
在这个处女都要验证码的时代不得不弄个会员来当每天看贴无数基本上不回 后来发现很傻,很多比我注册晚的级别都比我高,我终于觉悟于是我就把这段文字保存在记事本里,每看一贴就复制粘贴一次。
gevaemaidovef 发表于 2015-10-7 11:41:19|日本 | 查看全部
极品可以说是让你馨香满腹,三日不绝!!古人说的好:想要作文章,先要学做人。由作者的文章我们也可以揣测出作者定是成长在一个汗牛充栋,文化氛围浓厚而且精神面貌积 极向上的幸福家庭里面。在现在这个物欲横流,亲情冷淡的时代,能够在这样的家庭里
tohme 发表于 2015-10-7 11:41:24|Reserved | 查看全部
刚才游戏去了 ~~嘿嘿~~
Mqokjdvq 发表于 2015-12-19 10:59:45|广东 | 查看全部
因删贴不及时所产生的任何法律(书法,基本法,劳动法,婚姻法,输入法,国际法,今日说法,与台湾关系法及文中涉及或可能涉及以及未及之法,各地治安管理条例)纠纷或责任本人概不负责。
tohme 发表于 2015-12-19 11:00:18|香港 | 查看全部
呵呵  我傻了‘~~哈哈
effoggikeftor 发表于 2015-12-19 11:00:25|俄罗斯 | 查看全部
哈哈 小心被她看见哦~~~~
mwxny 发表于 2015-12-19 11:00:35|埃及 | 查看全部
感谢党和人民的关爱~~~
effoggikeftor 发表于 2017-4-11 16:19:59|美国 | 查看全部
不早了 明天见 各位晚安~~~~
seazvyt 发表于 2017-4-11 16:21:45|美国 | 查看全部
老大,我好崇拜你哟
bqtklouu 发表于 2017-4-11 16:24:06|INNA | 查看全部
我也不知道了~~你把我问蒙了 呵呵
buingeEvineus 发表于 2017-4-11 16:24:24|Reserved | 查看全部
对自己好点~别难为自己

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

得知互动是一个融创意、设计、开发、营销、生活、互联网于一体的专业交流分享平台。
Copyright © 2026 得知互动-专注Ai与站长技术交流社区-Ai交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表