我有下面的HTML

<ul>
    <li>aaa</li>
    <li>bbb</li>
    <li>ccc</li>
</ul>
<div id="vis"></div>
<style>li {position: relative;}</style>


在单击时,我想将单击的项目向左移动50px,然后将其向上滑动,然后输出ID为vis的div中现在可见多少个列表项目。

如果我执行以下操作,则计数为1到很多,因为添加长度see fiddle时动画尚未完成。

<script>
    $("li").on("click", function () {
        $(this).animate({
            "left": "+=50px"
        }).slideUp(300);

        var visNum = $('li:visible').length;
        $('#vis').text(visNum);
    });
</script>


如果我只是执行hide(),我将在vis div中获得预期的输出,但没有获得我需要的动画。 See Fiddle

<script>
    $("li").on("click", function () {
        $(this).hide();

        var visNum = $('li:visible').length;
        $('#vis').text(visNum);
    });
</script>


如果尝试回调,则会得到与第一次尝试相似的结果。 See Fiddle

<script>
    $("li").on("click", function () {
        $(this).animate({
                left: "+=50px",
        }, 300, function() {
            $(this).slideUp(300);
            var visNum = $('li:visible').length;
            $('#vis').text(visNum);
        });
    });
</script>


这样做的最佳方法是什么,以便在单击某个项目后使其向左移动,然后向上滑动然后输出其余的可见列表项目?

最佳答案

slideUp具有complete()回调。 http://api.jquery.com/slideup/

<script>
$("li").on("click", function () {
    $(this).animate({
        "left": "+=50px"
    }).slideUp(300, function(){
        var visNum = $('li:visible').length;
        $('#vis').text(visNum);
    });
});
</script>


为了完成... http://jsfiddle.net/fjqmj/4/

关于javascript - 添加Slideup回调以动画化Jquery,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24802344/

10-09 06:30