【问题标题】:jQuery: Refreshing DIV before fadingjQuery:在淡入淡出之前刷新 DIV
【发布时间】:2015-09-07 20:45:00
【问题描述】:

我是 jQuery 的初学者,我正在尝试让我在 DIV 之间的淡入淡出按照我的意愿工作。但是,我遇到了问题。我希望脚本在它消失之前完全刷新我动态加载到我的 DIV 中的内容。这样我就知道显示的内容是最新的,并且我会避免任何闪烁的内容,因为它会在 DIV 淡入后刷新。

这是我的代码;

$(window).load(function(){
var divs = $('.fade');

function fade() {
    var current = $('.current');
    var currentIndex = divs.index(current),
        nextIndex = currentIndex + 1;
    if (nextIndex >= divs.length) {
        nextIndex = 0;
    }
    var next = divs.eq(nextIndex);
    next.stop().fadeIn(3000, function() {
        $('#div1').load('div1.php');
        $('#div2').load('div2.php');
        $('#div3').load('div3.php');
        $('#div4').load('div4.php');
        $('#div5').load('div5.php');
        $(this).addClass('current');
    });
    current.stop().fadeOut(3500, function() {
        $(this).removeClass('current');
        setTimeout(fade, 60000);
    });
}
fade();
});

那么如何在淡入下一个 DIV 之前刷新下一个 DIV?

【问题讨论】:

    标签: jquery html refresh reload fade


    【解决方案1】:

    在 jQuery 中,fadeIn() 的工作方式如下:

    $('element').fadeIn(3000, function() {
        /* code to be executed AFTER the fade animation */
    })
    

    $.fadeOut(); 也一样

    所以您需要插入所有内容,然后才调用$.fadeIn(3000); 方法。

    它应该看起来像这样:

    HTML:

    <div class="fade current">
        <div id="div1">Content 1</div>
        <div id="div2">Content 1</div>
        <div id="div3">Content 1</div>
        <div id="div4">Content 1</div>
        <div id="div5">Content 1</div>
    </div>
    <div class="fade">
        <div id="div1">Content 1</div>
        <div id="div2">Content 1</div>
        <div id="div3">Content 1</div>
        <div id="div4">Content 1</div>
        <div id="div5">Content 1</div>
    </div>
    <div class="fade">
        <div id="div1">Content 1</div>
        <div id="div2">Content 1</div>
        <div id="div3">Content 1</div>
        <div id="div4">Content 1</div>
        <div id="div5">Content 1</div>
    </div>
    

    Javascript:

    $(document).ready(function () {
        var divs = $('.fade');
    
        setInterval(fade, 5000);
    
        function fade() {
    
            var current = $('.current');
    
            var currentIndex = divs.index(current);
    
            var next = $(divs[currentIndex + 1]);
    
            current.removeClass('current');
            next.addClass('current');
    
            $(current).fadeOut(1000, function () {
                $(this).children('#div1').load('div1.php');
                $(this).children('#div2').load('div2.php');
                $(this).children('#div3').load('div3.php!');
                $(this).children('#div4').load('div4.php');
                $(this).children('#div5').load('div5.php', function () {
                    $(this).parent().fadeIn(1000);
                });
            });
        }
    });
    

    在我的 Chrome 浏览器上对此进行了测试。它每 5 秒循环和更新每个 div。

    这是一个新的 JSFiddle: LINK

    如果这不是你所需要的,你可以从那里开始工作:)

    【讨论】:

    • 谢谢。所以你的意思是我可以用我现有的代码做这样的事情? current.stop().fadeOut(3500, function() { $(this).removeClass('current'); $('#div1').load('div1.php'); setTimeout(fade, 60000); });
    • .load() 是一个异步函数,因此您的浏览器不会等到您的 load() 完成后才开始淡入。 $.load() 也有一个“完成”回调,您应该在最后一个 load() 函数的完整回调中调用 fadeIn()。我已更新我的答案,为您指明正确的方向。
    • 我还在我的答案中添加了一个 JSfiddle 作为示例。
    • 太棒了!正如我所说,我是这方面的初学者。在这里,您可以单击一个按钮来更改内容 - 但我希望它自动运行。如果您需要在具有 5 个不同 DIV 的循环中自动更改代码,该代码的外观如何?查看我的代码,您可能会明白我在寻找什么。恐怕无法实现您的代码并使其正常工作。
    • 再次更新了我的答案,我想这就是你所需要的。
    猜你喜欢
    • 1970-01-01
    • 2014-04-25
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    相关资源
    最近更新 更多