这两个jQuery函数可以组合成一个更高效的函数吗?

时间:2012-11-01 19:02:44

标签: jquery html

我在jQuery中有两个函数可以隐藏然后显示标题,并且还会将按钮交换出来,这样当隐藏标题时,会出现“show header”按钮,反之亦然。它们如下:

$('#close_header').click(function() {
    $('#header').animate({ top: '-=150px' }, 500);
    $(this).toggle();
    $('#open_header').toggle();
});

$('#open_header').click(function() {
    $('#header').animate({ top: '+=150px' }, 500);
    $(this).toggle();
    $('#close_header').toggle();
});

与之相关的标记如下:

<img src="images/close.png" id="close_header" class="header_control fadein button">
<img src="images/open.png" id="open_header" class="header_control fadein button">
<div id="header">
    *Header content.*
</div>

为了整洁和效率,有没有办法将这两个功能合并为一个?

4 个答案:

答案 0 :(得分:5)

绝对没有性能差异。

如果您尝试在一个带参数的函数中编写它,那么它的可读性就会降低。

保持这种状态,没关系。

现在回答你的问题:

  

有没有办法将这两个功能结合起来......

  

为了整洁和效率,有没有办法将这两个功能合并为一个?

不。阅读其他答案中的代码,它们更整洁吗?他们更有效率吗?

答案 1 :(得分:3)

假设你只有那两个.header_control

$('.header_control').click(function() {
    var dist = (this.id=="open_header") ? '+=150px' : '-=150px';
    $('#header').animate({top: dist}, 500);
    $('.header_control').toggle(); // both at once
});​

很难从您的代码示例中了解到,但您甚至可以使用简单的.slideToggle()替换.animate(...)方法:

$('.header_control').click(function() {
    $('#header').slideToggle(500);
    $('.header_control').toggle(); // both at once
});​

答案 2 :(得分:0)

$('#open_header, #close_header').on('click', function(e) {
    var q = this.id=='open_header';
    $('#header').animate({ top: q?'+':'-'+'=150px' }, 500);
    $(this).toggle();
    $('#'+(q?'close':'open')+'_header').toggle();
});

答案 3 :(得分:0)

$('#close_header, #open_header').click(function() {
    var isClose = this.id == 'close_header';
    var minPlus = isClose ? '-' : '+';
    $('#header').animate({ top: minPlus + '=150px' }, 500);
    $(this).toggle();
    $('#' + isClose ? 'open_header': 'close_header').toggle();
});