2013-04-27 61 views
0

雪鳥(http://www.snowbird.com/)在他們的網站上做了一些非常酷的東西。我喜歡的一件事是,當你將鼠標懸停在右側的黑色面板上時,另一個面板會翻轉,然後統計圖表和橙色圖形「旋轉」到最終位置。我想用CSS3或JS複製圖形中旋轉的橙色條。看起來他們可能會使用我以前從未使用過的canvas元素,但會對它開放。任何想法處理這個最好的方法?複製雪鳥的動畫效果

謝謝!

回答

1

是的,他們正在使用一個畫布。 這裏有一個出發點:

var c = document.getElementById('c').getContext('2d'); 
var duration = 700; // duration of animation 
var delay = 10; // interval 
var stepT = duration/delay; // steps needed 
var cT = 0; // step counter 

c.fillStyle = 'white' 
var end = 58; // endpoint in percent 

var int = setInterval(function(){ 
    c.fillRect(0,0,100,100); 
    c.strokeStyle = 'orange'; 
    c.beginPath(); 
    c.arc(50, 50, 40, -.5*Math.PI, (-.5*Math.PI + 2*Math.PI/100 * end * cT/stepT)); 
    c.lineWidth = 10; 
    c.stroke(); 
    if(++cT>stepT){ 
     clearInterval(int); 
    } 
},delay); 

演示:http://jsfiddle.net/SCk6B/


2版多圈:

<canvas class="circle" data-duration="700" data-end="75" width="100" height="100"></canvas> 
<canvas class="circle" data-duration="200" data-end="50" width="100" height="100"></canvas> 
<canvas class="circle" data-duration="500" data-end="20" width="100" height="100"></canvas> 

$('.circle').each(function(){ 
    var duration = $(this).data('duration') || 700; // duration of animation 
    var delay = 10; // interval 
    var stepT = duration/delay; // steps needed 
    var cT = 0; // step countervar 
    var end = $(this).data('end') || 58; // endpoint in percent 
    var int = null; 
    var c = this.getContext('2d'); 
    c.fillStyle = 'white'; 
    c.lineWidth = 10; 
    c.strokeStyle = 'orange'; 
    $(this).bind('mouseenter',function(){ 
     int = setInterval(function(){ 
      c.fillRect(0,0,100,100); 
      c.beginPath(); 
      c.arc(50, 50, 40, -.5*Math.PI, (-.5*Math.PI + 2*Math.PI/100 * end * cT/stepT)); 
      c.stroke(); 
      if(++cT>stepT){ 
       clearInterval(int); 
      } 
     },delay); 
    }).bind('mouseleave',function(){ 
     clearInterval(int); 
     c.fillRect(0,0,100,100); 
     cT=0; 
    }); 
}); 

http://jsfiddle.net/t3BPP/

+0

這是完美的。謝謝@安迪!你有很好的資源來了解更多關於畫布的知識嗎? – Andrew 2013-04-28 14:04:50

+0

@Andrew對不起,我沒有一個單一的畫布頁面,但谷歌搜索會帶來很多資源和教程頁面。例如https://developer.mozilla.org/en-US/docs/HTML/Canvas/Tutorial – Andy 2013-04-28 14:35:26

+0

好吧。我已經開始挖掘其中的一些,但不知道你是否有其他資源。別擔心。此外,還有兩個後續問題:1)您如何在懸停時進行此項工作,以便動畫在您懸停時重置,並在重新懸停時重新開始動畫?現在我將它放在一個懸停函數中,當它懸停在它上面時它會運行,但是當您懸停並重新開啓時,它不會再運行。 2)你如何使該功能可重複使用?我有6個這些元素我想要動畫,我想重用該功能(同時更改持續時間)。謝謝! – Andrew 2013-04-28 15:15:03