基于svg中的path画40%表示的环型图(js类库Raphaël)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了基于svg中的path画40%表示的环型图(js类库Raphaël),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3334字,纯文字阅读大概需要5分钟。
内容图文
一、可供参考的文档资料。
raphaeljs官网:http://raphaeljs.com/
w3c关于path的介绍:http://www.w3.org/TR/2003/REC-SVG11-20030114/paths.html
mdn关于path的介绍(英文版):https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
mdn关于path的介绍(中文版):https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial/Paths
二、简介
raphaeljs目前支持的浏览器: Firefox 3.0+, Safari 3.0+, Chrome 5.0+, Opera 9.5+, Internet Explorer 6.0+.
超级喜欢的一个demo:http://raphaeljs.com/polar-clock.html
因为它的部分功能是可以满足目前项目中的需求的。
当然,还有很多好看和实用的demo。
基本图形的画法,很简单,可以参考mdn(https://developer.mozilla.org/zh-CN/docs/Web/SVG)就可以掌握。
本文介绍使用path绘制环型图。
粗略介绍下:
path中的M表示move to,L表示line to, A表示arc.
弧形命令A是另一个创建SVG曲线的命令。基本上,弧形可以视为圆形或椭圆形的一部分。假设,已知椭圆形的长轴半径和短轴半径,另外已知两个点(它们的距 离在圆的半径范围内),这时我们会发现,有两个路径可以连接这两个点。每种情况都可以生成出四种弧形。所以,为了保证创建的弧形唯一,A命令需要用到比较 多的参数:
A rx ry x-axis-rotation large-arc-flag sweep-flag x y
a rx ry x-axis-rotation large-arc-flag sweep-flag dx dy
rx ry表示起点坐标,x y表示终点坐标。下图可以更好理解。
三、动手
给个实例吧。如下是我在理解的过程中写的代码。大家可以从官网下载raphaeljs,然后运行如下的代码。
< html > < head > < meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" > < meta charset ="utf-8" > < title >Carl Test</title><script src="./js/raphael.js"></script></head><body><div><canvas id="myc" width="300" height="300"></canvas><div ><svg height="52" version="1.1" width="52" xmlns="http://www.w3.org/2000/svg" style="position:relative"><desc>Created with Rapha?l 2.1.2</desc><path style="" fill="none" stroke="#f0f0f0" d="M26,4A22,22,0,1,1,25.99,4" stroke-width="6"/><path style="" fill="none" stroke="#69d2ca" d="M26,4A22,22,0,0,1,37.78818948953793,44.57521436104433" stroke-width="6"/></svg></div><div id="holder"></div><script>var c = document.getElementById(‘myc‘); var ctx = c.getContext(‘2d‘); var init=true; for(var alpha=0;alpha<1000;alpha++){ var R=100; var a = (90- alpha) * Math.PI /180, x =120+ R * Math.cos(a), y =120- R * Math.sin(a); if(init){ ctx.moveTo(x,y) }else{ ctx.lineTo(x,y); } init=false; } ctx.stroke(); </script><script> window.onload =function () { var r = Raphael("holder", 200, 200); r.customAttributes.arc =function (value, total, R) { var alpha =360/ total * value, a = (90- alpha) * Math.PI /180, x =100+ R * Math.cos(a), y =100- R * Math.sin(a), path; if (total == value) { path = [["M", 100, 100- R], ["A", R, R, 0, 1, 1, 99.99, 100- R]]; } else { path = [["M", 100, 100- R], ["A", R, R, 0, +(alpha >180), 1, x, y]]; } return {path: path}; }; (function(){ var value=40,total=100,R=40; var t = r.path().attr({stroke: "#f0f0f0", "stroke-width": 10}).attr({arc:[100,total,R]});//100%var sec = r.path().attr({stroke: "#69d2ca", "stroke-width": 10}).attr({arc: [0, total, R]});//0% sec.animate({arc: [value, total, R]}, 900, ">");//这个">"是表示动画效果的参数,900ms的时间动态画出40%的弧 })(); }; </script></body></html>
四、总结
效果图:
为什么会有3个呢?
第一个圆是为了理解圆的参数方程,即如下代码所代表的含义。所以我用canvas画了出来。因为本人感觉使用canvas画弧或者圆,比svg好理解。只要理解这个算法就好。
var a = (90 - alpha) * Math.PI / 180, x = 120 + R * Math.cos(a), y = 120 - R * Math.sin(a);
第二个圆,是直接使用svg画出来的。
第三个圆,就是raphaeljs生成在id=holder的div标签里的svg生成的环形图,亮点是动态显示。
京东旗下的金融板块,好多图都是使用Rapha?l做的。如下的筹集进度就是一个环形图。
http://bill.jr.jd.com/buy/list.htm
基于svg中的path画40%表示的环型图(js类库Rapha?l)
原文:http://www.cnblogs.com/jinhuazhe2013/p/4845620.html
内容总结
以上是互联网集市为您收集整理的基于svg中的path画40%表示的环型图(js类库Raphaël)全部内容,希望文章能够帮你解决基于svg中的path画40%表示的环型图(js类库Raphaël)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。