在這篇文章中GBin1將介紹如何使用Raphaël這個js類庫構建圖表。Raphaël是一個很是小的js類庫用於構建豐富的矢量圖形。jquery
這個圖形的創意很是簡單,咱們使用一些圓弧來展現一個技能百分比數值到一個主圓周中,當咱們將鼠標挪到對應的圓弧,將顯示對應的技能百分比而且產生對應特效。dom
HTML標籤
HTML代碼結構包括一個命名爲"get"的主容器標籤。這個容器包括了全部的用於展示圖形的數據。而後咱們建立一個新的名字叫"diagram"的div元素,這個元素用來做爲生成圓弧的容器,代碼以下:jsp
- <div id="diagram"></div>
- <div class="get">
- <div class="arc">
- <span class="text">jQuery</span>
- <input type="hidden" class="percent" value="95" />
- <input type="hidden" class="color" value="#97BE0D" />
- </div>
- <div class="arc">
-
- <span class="text">CSS3</span>
- <input type="hidden" class="percent" value="90" />
- <input type="hidden" class="color" value="#D84F5F" />
- </div>
- <div class="arc">
- <span class="text">HTML5</span>
- <input type="hidden" class="percent" value="80" />
- <input type="hidden" class="color" value="#88B8E6" />
-
- </div>
- <div class="arc">
- <span class="text">PHP</span>
- <input type="hidden" class="percent" value="53" />
- <input type="hidden" class="color" value="#BEDBE9" />
- </div>
- <div class="arc">
- <span class="text">MySQL</span>
- <input type="hidden" class="percent" value="45" />
- <input type="hidden" class="color" value="#EDEBEE" />
- </div>
- </div>
CSS樣式定義
在這個演示的樣式表咱們只定義以下:動畫
1. 隱藏class爲'get'的元素網站
2. 設置id爲'diagram'的元素寬度和高度this
- .get {
- display:none;
- }
-
- #diagram {
- float:left;
- width:600px;
- height:600px;
- }
Javascript
主要方法是建立一個新的Raphaël對象(變量爲'r'),而後畫出咱們到一個圓形,使用咱們指定的半徑'rad'。spa
而後咱們在建立的Raphaël對象中建立一個新的圓形。咱們使得圓形居中,而且添加一些文字。.net
- var o = {
- init: function(){
- this.diagram();
- },
- random: function(l, u){
- return Math.floor((Math.random()*(u-l+1))+l);
- },
- diagram: function(){
- var r = Raphael('diagram', 600, 600),
- rad = 73;
-
- r.circle(300, 300, 85).attr({ stroke: 'none', fill: '#193340' });
-
- var title = r.text(300, 300, 'Skills').attr({
- font: '20px Arial',
- fill: '#fff'
- }).toFront();
-
- }
- }
接下來咱們更深刻一些。htm
咱們將擴展Raphaël對象,使用一些自定義的屬性:對象
- alpha - 圓弧的度數
- random - 指定的隨機數
- sx,sy - 起始的位置
- x,y - 結束位置
- path
- var o = {
- init: function(){
- this.diagram();
- },
- random: function(l, u){
- return Math.floor((Math.random()*(u-l+1))+l);
- },
- diagram: function(){
- var r = Raphael('diagram', 600, 600),
- rad = 73;
-
- r.circle(300, 300, 85).attr({ stroke: 'none', fill: '#193340' });
-
- var title = r.text(300, 300, 'Skills').attr({
- font: '20px Arial',
- fill: '#fff'
- }).toFront();
-
- r.customAttributes.arc = function(value, color, rad){
- var v = 3.6*value,
- alpha = v == 360 ? 359.99 : v,
- random = o.random(91, 240),
- a = (random-alpha) * Math.PI/180,
- b = random * Math.PI/180,
- sx = 300 + rad * Math.cos(b),
- sy = 300 - rad * Math.sin(b),
- x = 300 + rad * Math.cos(a),
- y = 300 - rad * Math.sin(a),
- path = [['M', sx, sy], ['A', rad, rad, 0, +(alpha > 180), 1, x, y]];
- return { path: path, stroke: color }
- }
-
- $('.get').find('.arc').each(function(i){
- var t = $(this),
- color = t.find('.color').val(),
- value = t.find('.percent').val(),
- text = t.find('.text').text();
-
- rad += 30;
- var z = r.path().attr({ arc: [value, color, rad], 'stroke-width': 26 });
-
- z.mouseover(function(){
- this.animate({ 'stroke-width': 50, opacity: .75 }, 1000, 'elastic');
- if(Raphael.type != 'VML') //solves IE problem
- this.toFront();
- title.animate({ opacity: 0 }, 500, '>', function(){
- this.attr({ text: text + 'n' + value + '%' }).animate({ opacity: 1 }, 500, '<');
- });
- }).mouseout(function(){
- this.animate({ 'stroke-width': 26, opacity: 1 }, 1000, 'elastic');
- });
- });
- }
- }
而後咱們取得全部須要的數據,例如,百分比,弧度顏色,及其文字。咱們給每個弧度添加半徑數值最後建立一個新的圓弧path。最後一步咱們添加鼠標hover的動畫效果。當鼠標懸浮到圓弧時,標題會改變(即圓圈裏的內容)。同時咱們讓圓弧變大一些。
今天咱們介紹了 Raphaël的類庫,若是你們有興趣,能夠去類庫的網站查看更多的例子: Raphaël主站
詳細內容參見原文:http://www.gbtags.com/gb/share/5828.htm