2013-08-30 2 views
0

Хорошо, так что код должен делать, это изменение цвета фона тега li. Но это нужно сделать анимированным образом. то есть цвет фона не должен меняться сразу. Цвет фона должен постепенно устанавливаться в течение нескольких секунд.Постепенное изменение цвета фона наведите на элемент списка

Я написал это, и даже если он установлен цвет фона красиво, он не делает это постепенно:

// Subtle navigation on hover color animation 

$(document).ready(function() { 
    $(".navigation li").hover(

    function() { 
     // Over 
     $(this).animate(
     $(this).css("background", "rgba(159,223,188, 0.9)"), 
     300); 
    }, 

    function() { 
     // Out    
     $(this).animate(
     $(this).css("background", "none"), 
     300); 
    } 

    ); 
}); 

HTML, довольно прост:

<ul class="navigation"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
</ul> 

Спасибо за любые указатели в правильном направлении!

ответ

3

Если вы хотите придерживаться JavaScript-решения, взгляните на Color animation plugin.

В качестве альтернативы я бы предложил использовать переход CSS3. Вам даже не нужно JavaScript:

li { 
    background-color: rgba(159,223,188, 0.9); 
    -webkit-transition: background-color 0.3s linear; 
    -moz-transition: background-color 0.3s linear; 
    -ms-transition: background-color 0.3s linear; 
    -o-transition: background-color 0.3s linear; 
    transition: background-color 0.3s linear; 
} 

li:hover { 
    background-color: transparent; 
} 

Demo

Try before buy

+0

Niiiice :-D работает очень хорошо. Что поддерживает браузер для этого? – Tiwaz89

+1

Вот поддержка браузера для [CSS3 переходов] (http://caniuse.com/css-transitions) и здесь для [CSS3 colors] (http://caniuse.com/css3-colors). Это в основном то же самое. – insertusernamehere

2

Вы должны сделать это так:

$(document).ready(function() { 
    $(".navigation li").hover(

    function() { 
     // Over 
     $(this).animate({ 
      background: 'rgba(159,223,188, 0.9)' 
     }, 300); 
    }, 

    function() { 
     // Out    
     $(this).animate({ 
      background: 'none' 
     }, 300); 
    } 

    ); 
}); 

Вам не нужно .css(), Вы просто передайте стиль функции .animate(). Вы можете передать несколько эффектов.

Go here для получения дополнительной информации.

+0

Пробовал это, но он не работает. Теперь цвет фона вообще не меняется при наведении? : -/ – Tiwaz89

+0

Jeah, потому что вам понадобится плагин анимации цвета! – elasticman

0

Вы также можете попробовать сделать это:

Добавьте следующий CSS к вашей второй функции

  "background": "none", 
      "transition-property": "background", 
      "transition-duration": "1s", 
      "transition-timing-function": "linear" 

проверить код ниже

вы можете увеличить значение «переходного срока «:« 1 с »на любые секунды для большего количества задержек.

Надеется, что это помогает

$(document).ready(function(){ 

    $(".navigation li").hover(

     function(){ 
      // Over 
      $(this).animate(
       $(this).css("background","rgba(159,223,188, 0.9)"), 
       300 
      ); 
     }, 
     function(){ 
      // Out    
      $(this).animate(
       $(this).css(
        { 
        "background": "none", 
        "transition-property": "background", 
        "transition-duration": "1s", 
        "transition-timing-function": "linear" 
        } 

       ), 
       300 
      ); 
     } 

    ); 
}); 
Смежные вопросы