【问题标题】:Run jQuery slideDown complete function only after last item has completed [duplicate]仅在最后一项完成后运行jQuery slideDown完成功能[重复]
【发布时间】:2013-07-16 13:26:40
【问题描述】:

我了解您可以将一个函数传递给 slideUp/slideDown,该函数将在转换完成后运行:

$('li').slideUp({
    complete: function(){
        alert('done');
    }
});

使用此 HTML 会显示 3 次警报。

<ul>
    <li>[content here]</li>
    <li>[content here]</li>
    <li>[content here]</li>
</ul>

有没有办法让complete 函数只触发一次,当最后一个 列表项完成上滑时? (fiddle)

【问题讨论】:

  • 你不能把 UL 往上滑吗?
  • 我相信你必须定位li:last
  • 技术上我当然可以,但效果完全不同@AndréPena
  • 他们不会同时滑上去吗?

标签: javascript jquery


【解决方案1】:

您可以“重做”您的选择器并检查 this 是否是最后一个:

$('li').slideUp({
    complete: function(){
        if($('li:last').is(this)){
            alert('done');
        }
    }
});

小提琴:http://jsfiddle.net/5NQsU/

缓存你的选择器会更好:

var $li = $('li');
$li.slideUp({
    complete: function(){
        if($li.last().is(this)){
            alert('done');
        }
    }
});

【讨论】:

  • .is(this)...该死的,我试图记住这一点,+1
  • 太棒了,谢谢,只要系统允许我就会接受。我想这与:first 一样有效,对吧?既然他们都同时完成?我想我什至可以使用isCompleted 标志或现在我想到的东西......
  • @WesleyMurch 它应该也能正常工作:)
【解决方案2】:

http://jsfiddle.net/Ultimate/KrW5a/

var total = $('ul').size();
var i = 1;
$('li').slideUp({
    complete: function () {
        if (i === total) alert('done');
        i += 1;
    }
});

【讨论】:

  • Karl's 更好,忽略这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 2018-05-31
相关资源
最近更新 更多