2014-10-08 104 views
0

我想使用jquery對css漸變進行動畫處理,但找不到任何解決方案。有人有想法嗎?事情是,我不能從一個類動畫到另一個,因爲我的rgba是隨機的(我使用mousemouve事件做了一些小事)。如何使用jquery對css漸變進行動畫處理

這裏是我的實際代碼

$(this).css(
    {background: '-webkit-gradient(linear, left top, right top, from(rgba('+ a +','+ b +','+ c +','+ alpha +')), to(rgba('+ a2 +','+ b2 +','+ c2 +','+ alpha +')))' 
}); 

但我想這樣做會是這樣的:

$(this).stop().animate(
      {background: '-webkit-gradient(linear, left top, right top, from(rgba('+ a +','+ b +','+ c +','+ alpha +')), to(rgba('+ a2 +','+ b2 +','+ c2 +','+ alpha +')))'}, 
      { 
       duration: 1500, 
       easing:  'easeOutBounce' 
      } 
     ); 

我得到的是,它並沒有改變漸變,但只有最好的第一個rgba的背景顏色。

基本上,CSS()太過分侵略,我希望它平滑。我試圖只使用背景色的動畫,它工作正常,但不是漸變。

有什麼想法? 在此先感謝。

編輯:以下是完整的JS background.js

編輯#2:找到我這裏所有的答案。 script on jqueryscript.net

+0

你不是要能夠與jQuery.animate()做,但你可以寫使用的setInterval直JavaScript實現()。 – dave 2014-10-08 15:02:02

+0

試過css'transitions' https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_CSS_transitions?或者,利用'.animate'中的'step'功能? – guest271314 2014-10-08 15:12:13

+0

@ guest271314轉換不適用於漸變。我不知道該坦率地說:)是插件還是其他的東西? – hellodracon 2014-10-09 08:43:12

回答

0

注意,不能確定的

-webkit-gradient(linear, left top, right top, from(rgba()), to(rgba())) 

語法,爲了是準確的?請參閱linear-gradient,Using Gradients。在低於片,改爲

-webkit-linear-gradient(left top, rgba(), rgba()) 

此外,easing選項​​不會出現內jquery是標準;要求jquery uijQuery Easing Plugin。 jquery ui加載到腳本中。

jquery的.animate()可能需要一個「顏色」插件來動畫顏色properties。雖然,可以利用step功能,內.animate()options,執行任務的每個動畫的‘步驟’,見

.animate(),在step

一個函數被調用用於每個動畫屬性每個動畫元素。此功能提供了修改Tween 對象的機會,以便在設置屬性之前更改該屬性的值。

properties,在這裏,被定義與border:"0" - 雖然與jQuery UI的顏色動畫顯得可能Color Animation - 在低於片step功能使用。

嘗試

$(document).ready(function() { 
 

 
    $("body").mousemove(function (event) { 
 

 
     var sw = $(window).width(), 
 
      sh = $(window).height(), 
 
      valueX = event.pageX, 
 
      valueY = event.pageY; 
 

 
     var fX = (valueX/sw), 
 
      fY = (valueY/sh); 
 

 
     var alpha = ((fX/2) + (fY/2)); 
 

 
     var r = Math.round(((Math.floor((Math.random() * 200) + 100)))), 
 
      g = Math.round(((Math.floor((Math.random() * 200) + 100)))), 
 
      b = Math.round(((Math.floor((Math.random() * 200) + 100)))), 
 
      r2 = Math.round(((Math.floor((Math.random() * 100) + 1)))), 
 
      g2 = Math.round(((Math.floor((Math.random() * 100) + 1)))), 
 
      b2 = Math.round(((Math.floor((Math.random() * 100) + 1)))); 
 

 
     console.log('x:' + fX + ' - y:' + fY + ''); 
 
     console.log('rgba(' + r + ',' + g + ',' + b + ',' + alpha + ')'); 
 
     console.log('rgba2(' + r2 + ',' + g2 + ',' + b2 + ',' + alpha + ')'); 
 

 
     // animate the background color on mousemove 
 
     $(event.target).stop().animate({ 
 
      border:"0" 
 
     }, { 
 
      duration: 1500 
 
      , easing: 'easeOutBounce' 
 
      , step: function() { 
 
       $(this).css('background' 
 
          ,'-webkit-linear-gradient(left top, rgba(' 
 
          + r +','+ g +','+ b +',' 
 
          + alpha +'), rgba(' 
 
          + r2 +','+ g2 +','+ b2 +','+ alpha +')') 
 
     } 
 
     }); 
 

 
    }); 
 
});
body { 
 
    width : 646px; 
 
    height : 615px; 
 
    background-color : transparent; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.11.1/jquery-ui.min.js"></script>

的jsfiddle http://jsfiddle.net/guest271314/vystqodj/

+0

非常感謝,效果很好。你有什麼想法,我怎麼能把它變得更「難」。我的意思是,如果我想做這樣的事情:當我移動時,它不會改變,直到我停下來,然後它隨着持續時間改變? – hellodracon 2014-10-13 13:39:35

+0

@hellodracon歡迎您:)試試http://jsfiddle.net/guest271314/vystqodj/5/ – guest271314 2014-10-13 14:48:38

+0

是的,確實:)事情是。我仍然無法像使用背景顏色的animate()那樣平滑。但我想,我不能這樣做,因爲jQuery不動畫webkit漸變 – hellodracon 2014-10-13 15:01:45

1

CSS是最好的方法。向元素添加必要的過渡/動畫。有幾個具有不同背景漸變的類,然後使用jQuery根據需要添加/刪除類。據我所知,CSS漸變背景不通過transition進行動畫製作。您可能需要使用keyframe動畫。您可能還需要動畫回調以確保動畫不會因爲鼠標事件而發生跳轉(懸停,點擊等)。用鼠標事件實現一個平滑的解決方案可能相當困難。

有關關鍵幀漸變動畫的示例,請參閱http://thecodeplayer.com/walkthrough/animating-css3-gradients。許多人使用的一個技巧是改變背景位置,而不是漸變本身。在這種情況下,過渡可以奏效。

或者,jQuery Transit(http://ricostacruz.com/jquery.transit/)可能會這樣做,但未經測試且未記錄。

+0

嗨,事情是,我不能創建類,因爲我的rgba是由mousemove創建的。所以我唯一的辦法是找到一種方法來動畫CSS()。這裏是我的實際完整的javascript: [鏈接](http://lekalif.com/data/js/background.js) – hellodracon 2014-10-09 08:39:50