一个元素在淡出另一个元素之后的fadeIn是'真的不管用

fadeIn of an element after fading out another one isn't really working

本文关键字:元素 fadeIn 不管 真的 之后 一个 另一个 淡出      更新时间:2023-09-26

我创建了一个名为"PumpnRecords"的网站,它几乎完成了。网站上有一个名为"发布"的部分。它分为两部分,但只有一部分可见。这就是网站:http://s448350928.online.de/pumpn/records/index3

发布部分有以下html代码(简化):

<div class="container1" id="releases">
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js">   </script>
<script>
function hide2014and2016show2015()
 {
 $("#2014").fadeOut(4000);
 }
</script>
<script>
 $(document).ready(function(){
 $("#2015").hide();// hide it initially
 $('#forward2014').click(function(){
    $("#2015").delay(4000).fadeIn(4000);                            });
 });
</script>
<h2>Releases</h2>
<div id="yearcontainer">
<div id="back2014" style="display:inline-block">
<img id="back2014img" src="..."/>
</div>
<h2 id="year">2014</h2>
<div id="forward2014" onclick="hide2014and2016show2015();" style="display:inline-block">
<img id="forward2014img" src="..."/>
</div>
</div>
<div id="2014">
    <div class='container3' style="overflow:visible;">
        <h2>EPs</h2>
        <div class='row2'>
            <a href="...">
                <img width="300px" src="..."/>
                <h2>Nano Miratus</h2>
                <h3>Ganz Okay EP (Instrumental)</h3>
            </a>
        </div>
        <div class='row2'>
            <a href="...">
                <img width="300px" src="..."/>
                <h2>Nano Miratus</h2>
                <h3>Ganz Okay EP</h3>
            </a>
        </div>
        <div class='row2'>
            <a href="...">
                <img width="300px" src="..."/>
                <h2>Nano Miratus</h2>
                <h3>Viernacheins EP</h3>
            </a>
        </div>
    </div>
</div>
<div id="2015">
    <div class='container3' style="overflow:visible;">
        <h2>Alben</h2>
        <div class='row2'>
            <a href="...">
                <img width="300px" src="..."/>
                <h2>Nano Miratus</h2>
                <h3>Larmoyanz</h3>
            </a>
        </div>
    </div>
    <div class='container3' style="overflow:visible;">
        <h2>EPs</h2>
        <div class='row2'>
            <a href="...">
                <img width="300px" src="..."/>
                <h2>Nano Miratus</h2>
                <h3>Mrs. EP</h3>
            </a>
        </div>
    </div>
</div>
</div>

如果你看一下发布部分,你会发现有这个标题("2014")。这个标题的左右两侧是箭头,或者我认为它们被称为插入符号D

我想要编码的是:当有人单击向右箭头时,id为"2014"的div应在4000毫秒内淡出,然后id为"2015"的div将在4000毫秒后淡出。我在"2015"div的淡入之前放了一个延迟。它也是4000毫秒,所以"2015"的淡入应该在"2014"的淡出结束后立即开始。

实际情况是:https://i.stack.imgur.com/hxLVB.gif


那为什么它不起作用呢?在过去的几个小时里,我在谷歌上搜索和堆叠了很多,也经常更改代码,但仍然不起作用(

更新:现在我知道问题是什么,但我无法解决。这个网站是一个单页网站,所以我有一个javascript插件。它叫fullpage.js,我知道它是如何工作的。当你用鼠标滚动时,它会在"页面容器全页面包装器"中添加一个"transform:translate3d(x,y,z);"属性,并更改y值,这样页面就会向下移动。所以我做了两个小提琴来演示这个问题:

不工作FIDDLE(其中包含transform属性):

jsfiddle.net/ktf9onjo/(对不起,我不允许发布超过两个可点击链接…)

工作FIDDLE:

jsfiddle.net/rant5af9/

您可以看到问题出在transform属性上。

  1. 为什么???

  2. 我需要一个替代方案。我不能直接删除它,脚本会每次我滚动时都会被阅读。

  3. 是的,我可以把translate3d(x,y,z)改成translateY(y),但不,那不管用,我试过了

信息:您可以在两个fiddles的javascript框中找到fullpage.js。

附言:网站还没有完成。很多链接和其他东西目前都不起作用。

请帮忙,fanx!:)

问题发生的原因

正如@kosmos在评论中所解释的:

因为动画的队列是针对每个元素动画本身的。a不会等待b制作动画,但如果尝试为a制作两次动画,则第二个动画将等待第一个动画的结束。

解决方案

jQuery fadeOut函数接受complete回调函数(源)。

一旦淡出完成,就会执行此回调函数。您不需要再以这种方式使用delay,并且您的动画链接将保持同步。

html:

<div id="forward2014" style="display:inline-block">

javascript:

$('#forward2014').click(function(){
  $("#2014").fadeOut(4000, function(){
    // this starts when the fadeOut is finished
    $("#2015").fadeIn(4000);
  })
});

这个片段中的演示

(点击>>作为前进按钮)

$(document).ready(function(){
  $("#2015").hide();
  
  $('#forward2014').click(function(){
  
    $("#2014").fadeOut(4000, function(){
    
      // this starts when the fadeOut is finished
    
      $("#2015").fadeIn(4000);
  
    })
  });
});
<div id="2014"style="display:inline-block">
2014
</div>
<div id="2015"style="display:inline-block">
2015
</div>
<div id="forward2014">
>>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

进一步说明:

  • 您可能希望将jQuery的.on函数用于事件侦听器(参考)。您可以用它替换onclick=.click。这将使您的代码更易于管理,性能更高
  • html中的id应该至少包含一个字母(源)。用id="year-2014"或类似的东西替换id="2014"

我没有得到你所需要的东西,但要使jquery操作按顺序进行,你必须用类似的回调调用第二个操作

$('#whatever').fadeOut('slow', function() {
    $('#whatever').delay(4000).fadeIn('slow');
});

请参阅此