2012-04-18 91 views
1

想知道是否有辦法改變這個動畫的左css值而不需要所有的冗餘代碼?根據選擇器更改css值?

$('.recent .view-details-wrapp').css({opacity:0, left:33}); 
$('.recent .controls-wrapp').hover(function() { 
    $(this).find('.view-details-wrapp').stop() 
     .animate({left:63}, {queue:false, duration:300, easing:'easeOutCubic'}) 
     .animate({opacity:'0.99'}, {queue:false, duration:400, easing:'easeOutCubic'}); 
},function() { 
    $(this).find('.view-details-wrapp').stop() 
     .animate({left:33}, {queue:false, duration:550, easing:'easeOutSine'}) 
     .animate({opacity:'0'}, {queue:false, duration:300, easing:'easeOutSine'}); 
}); 



$('.featured .view-details-wrapp').css({opacity:0, left:83}); 
$('.featured .controls-wrapp').hover(function() { 
    $(this).find('.view-details-wrapp').stop() 
     .animate({left:103}, {queue:false, duration:300, easing:'easeOutCubic'}) 
     .animate({opacity:'0.99'}, {queue:false, duration:400, easing:'easeOutCubic'}); 
},function() { 
    $(this).find('.view-details-wrapp').stop() 
     .animate({left:83}, {queue:false, duration:550, easing:'easeOutSine'}) 
     .animate({opacity:'0'}, {queue:false, duration:300, easing:'easeOutSine'}); 
}); 

回答

0

你可以使用一個data屬性和所需的目標值存儲在這些atrributes。

例如,如果您有類似這樣的標記:

<div data-target="0.1"></div> 
<div data-target="0.2"></div> 
... 
<div data-target="0.8"></div> 
<div data-target="0.9"></div> 

你可以使用一個單一的hover - 結合將所有這些div淡化其相應的值:

$('div').hover(function(){ 
    $(this).fadeTo('fast',$(this).data('target')); 
},function(){ 
    $(this).fadeTo('fast',1); 
});​ 

a live demo

在你的情況下,這可能意味着你附加了不同的值left到您.recent.feature元件和檢索懸停處理程序內該數據(觸發懸停的元件可以通過$(this)被通常稱爲)

信息上data -attributes可以在MDN

備選地發現(如果你不想或不能改變你的標記),你也可以找出什麼元素已經觸發處理程序中的懸停。所以,如果您有:

<div class="foo"></div> 
<div class="bar"></div> 

你可以這樣做:

$('div').hover(function(e){ 
    var t; 
    if ($(e.target).hasClass('foo')){ 
     t = 0.2; 
    } else if ($(e.target).hasClass('bar')){ 
     t = 0.8; 
    } 
    $(this).fadeTo('fast',t); 
},function(){ 
    $(this).fadeTo('fast',1); 
});​ 

其中e.target是通過事件的目標。見another fiddle

+0

感謝您的幫助...後來應該做的伎倆...再次感謝! – Taylor 2012-04-20 07:32:31

+0

@Taylor這樣做會讓你有點笨拙,但是因爲你只有2個,所以應該可以這樣處理。 – m90 2012-04-20 08:18:32

0

將該值放入一個變量中。

var left = 83; 

$('.recent .view-details-wrapp').css({opacity:0, left:left}); 
$('.recent .controls-wrapp').hover(function() { 
$(this).find('.view-details-wrapp').stop() 
    .animate({left:(left + 30)}, {queue:false, duration:300, easing:'easeOutCubic'}) 
    .animate({opacity:'0.99'}, {queue:false, duration:400, easing:'easeOutCubic'}); 
},function() { 
$(this).find('.view-details-wrapp').stop() 
    .animate({left:left}, {queue:false, duration:550, easing:'easeOutSine'}) 
    .animate({opacity:'0'}, {queue:false, duration:300, easing:'easeOutSine'}); 
}); 
+0

這不是他問我想的。他希望使用相同的線來處理'$('。recent .view-details-wrapp')'和'$('。featured .view-details-wrapp')上的懸停' – m90 2012-04-18 07:29:17

+0

如何應用變量值爲「.featured .view-details-wrapp」? – Taylor 2012-04-21 23:35:23

+0

你可以用一個插入類和左邊的參數的函數來包裝它。 – 2012-04-22 16:11:40