将jquery调用组合成1个函数

时间:2010-08-16 00:12:55

标签: jquery jquery-selectors

我有以下jquery在悬停时动画:

        $('#footerNetwork').hover(function(){
            $('#popupNetwork').animate({top:'-62px'},{queue:true,duration:500});
        }, function(){
            $('#popupNetwork').animate({top:'30px'},{queue:true,duration:500});
        });

        $('#footerPort').hover(function(){
            $('#popupPort').animate({top:'-62px'},{queue:true,duration:500});
        }, function(){
            $('#popupPort').animate({top:'30px'},{queue:true,duration:500});
        });

        $('#footerAirport').hover(function(){
            $('#popupAirport').animate({top:'-62px'},{queue:true,duration:500});
        }, function(){
            $('#popupAirport').animate({top:'30px'},{queue:true,duration:500});
        });

等...

如何将这些组合到功能上,该功能可识别哪个链接已被悬停(即:footerNetwork)并将相应的div定位到动画(popupNetwork)? 谢谢!

3 个答案:

答案 0 :(得分:1)

你可以这样做:

var tops = { footerNetwork:'-80px', footerPort:'-62px', footerAirport:'-62px' };
$('#footerNetwork, #footerPort, #footerAirport').hover(function(){
  $('#'+this.id.replace('footer','popup')).animate({top: tops[this.id]}, 500);
}, function(){
  $('#'+this.id.replace('footer','popup')).animate({top:'30px'}, 500);
});

如果您为这些元素添加一个类class="footer",那么您可以将.hover()更改为$('.footer').hover(function(){以使其更清晰。要获取相应的#popup_____元素,我们只需获取当前ID,例如footerNetwork并执行.replace()获取弹出ID。 tops对象用于存储各种最高值,因为它们不同。

答案 1 :(得分:0)

我假设您在要添加悬停行为的项目上有一个类foo。然后,只需遵循(明显的)footer...模式:

$(document).ready( function(){
  $('.foo').hover( 
    function(){
      $('#popup' + this.id.substr(6,this.id.length-6) ).animate({...});
      //                          ^remove "footer" portion of id
    },
    function(){
      $('#popup' + this.id.substr(6,this.id.length-6) ).animate({...});
    }
  );
});

根据文档的结构,您还可以按容器识别“页脚...”元素,而不是按类别识别。

答案 2 :(得分:0)

由于偏移量不是固定的,一次调用不可能获得相同的结果,但是,这样的函数可以解决这个问题:

function hoverIt(name, topIn, topOut, duration)
    duration = (duration != undefined) ? duration : 500;

    $('#footer' + name).hover(function(){
        $('#popup' + name).animate({top: topIn + 'px'},
                            {queue: true, duration: duration});
    }, function(){
        $('#popup' + name).animate({top: topOut + 'px'},
                            {queue: true, duration: duration});
    });
}

然后只需为每个动画调用该函数:

hoverIt('Network', -80, 30, 300);
hoverIt('Port', -62, 30);
hoverIt('Airport', -62, 30);

我猜是好多了。如果有很多,你可以使用类似的东西:

var hovers = [['Network', -80, 30, 300],
              ['Port', -62, 30],
              ['Airport', -62, 30]];

for (var i = 0; i < hovers.length; i++) {
    hoverIt(hovers[i][0], hovers[i][1], hovers[i][2], hovers[i][3]);
}

注意:未经过测试