1

想知道是否有一种方法可以在没有所有冗余代码的情况下更改此动画的左侧 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'});
});
4

2 回答 2

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'});
});
于 2012-04-18T07:03:38.137 回答
0

您可以使用data属性并将所需的目标值存储在这些属性中。

例如,如果您有这样的标记:

<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-binding 让所有这些 div 淡化为它们相应的值:

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

观看现场演示

在您的情况下,这可能意味着您将不同的值附加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传递事件的目标在哪里。看另一个小提琴

于 2012-04-18T07:26:10.643 回答