2013-03-30 86 views
1

我有以下一段代碼。jQuery .animate問題

  if ($(checkboxID)[0].checked == false) { 
       $(this).animate({ 
        'background-position-x': '0%', 
        'background-position-y': '0%' 
       }, 200, 'linear'); 

       $(checkboxID)[0].checked = true; 
       $(this).removeClass('off').addClass('on'); 

      } else { 
       $(this).animate({ 
        'background-position-x': '100%', 
        'background-position-y': '0%' 
       }, 200, 'linear'); 

       $(checkboxID)[0].checked = false; 
       $(this).removeClass('on').addClass('off'); 

      } 

正如你所看到的代碼是在如果雙方是相同的,但如果這是真的了jQuery不設置過渡動畫效果,不管我有多增加的持續時間。 你能看到我錯過的錯誤嗎?

編輯:這裏是CSS太:

.checkbox-style { 
    display: block; 
    width: 87px; 
    height: 28px; 
    background: url('images/check-square.png') no-repeat; 
    -webkit-border-radius: 5px; 
    -moz-border-radius: 5px; 
    border-radius: 5px; 
    overflow: hidden; 
    cursor: pointer; 
    } 
    .on { 
    background-position: 0% 0%; 
    } 
    .off { 
    background-position: 100% 0%; 
    } 
+1

可能會提供一個JSFiddle。 –

+0

您需要使用backgroundPositionX ...但它只適用於Chrome,這是一個跨瀏覽器的解決方案:http://stackoverflow.com/questions/13442897/jquery-animate-backgroundposition-not-working?rq=1 – pathfinder

回答

0

我要去猜了一點,但我想用off類元素是不可見的。隨着班級更改立即執行,您沒有時間查看動畫。

您可能希望在動畫結束時更改該類。要做到這一點,通過回調animate,它會在動畫完成時調用:

  $(this).animate({ 
       'background-position-x': '100%', 
       'background-position-y': '0%' 
      }, 200, 'linear', function(){ 
       $(checkboxID)[0].checked = false; 
       $(this).removeClass('on').addClass('off'); 
      }); 
+0

這是一個複選框的div替換。這裏是這些.checkbox風格的css。{display:block;}};}}}} \t width:87px; \t height:28px; \t background:url('images/check-square.png')no-repeat; \t -webkit-border-radius:5px; \t -moz-border-radius:5px; \t border-radius:5px; \t溢出:隱藏; \t光標:指針; } .on { \t background-position:0%0%; } .off { \t background-position:100%0%; } – user2227904