仅在使用 jquery 从末尾删除后添加

Only prepend after removed from end using jquery

我制作了这个运行良好的脚本。它得到一个包含不同数量元素的提要。然后,例如,如果有 5 个元素,它会从末尾删除 5 个,并将 5 添加到开头。

不幸的是,似乎存在一个问题,即在添加元素之前并不总是等待元素从末尾完全删除。这会导致页脚上下颠簸。

我想知道是否有人知道如何解决我的问题。我尝试添加延迟,但这只是部分帮助。

$(document).ready(function() {
    window.setInterval(function(){

        $.ajax({
            type: 'POST',
            url: location.protocol+'//'+location.hostname+'/index/feed',
            success: function(data) {

                var arr = data.split('@@@@@@@@@');

                $('#feed > .feed-item').slice(-1 * arr[0]).fadeOut(1000, function(){
                    $(this).remove();
                });

                $("#feed").delay(2000).prepend(arr[1]);

            }
        });

    },2000);
});
 $('#feed > .feed-item').slice(-1 * arr[0]).fadeOut(1000, function(){
                    $(this).remove();
                });

由于您在此处使用淡出,因此将在回调中调用淡出内的函数。

因此,您预先添加的内容将首先执行,并且提要项目将被删除。 移除 fadeOut,你可以使用 css 淡出效果

我不得不稍微更改代码以使其在本地运行,但我认为这个示例可以让您很好地掌握。

我创建了一个函数:removeFeed(callback),它接收一个函数作为参数,这个函数在 remove 语句之后被调用。

在 $.ajax 中的 de success 中,您创建了一个匿名函数作为 removeFeed 的参数,并在其中放置了前置函数。

希望对您有所帮助ps!

$(document).ready(function() {
    var root = 'http://jsonplaceholder.typicode.com';
    var counter = 1;

    function removeFeed(callback) {
        $('#feed > .feed-item').fadeOut(1000, function() {
            $(this).remove();
            callback();
        });
    }
    window.setInterval(function() {
        $.ajax({
            url: root + '/posts/' + (counter + 1),
            method: 'GET',
            success: function(data) {

                removeFeed(function() {
                    $("#feed").prepend("<li class='feed-item'>" + data.title + "</li>");
                })

            }
        });

    }, 2000);
});

ps:功能齐全,只需复制并粘贴到页面中即可查看它的工作情况。