一个元素在淡出另一个元素之后的fadeIn是'真的不管用
fadeIn of an element after fading out another one isn't really working
我创建了一个名为"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属性上。
为什么???
我需要一个替代方案。我不能直接删除它,脚本会每次我滚动时都会被阅读。
- 是的,我可以把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');
});
请参阅此
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 获取要引发的fadeIn元素时出现问题
- jQuery show/fadeIn不将display:block应用于隐藏的父元素内的子元素-仅限FireFox
- jQuery fadeIn 是即时的,带有大元素
- jQuery fadeIn 元素一次一个 onClick
- 一个元素在淡出另一个元素之后的fadeIn是'真的不管用
- 创建一个效果,使元素fadeIn和fadeOut不使用fadeToggle()
- fadeIn元素滚动
- JQuery fadeIn按顺序为不同元素类型的子元素
- 不透明度为0的fadeIn()元素
- 如何将jQuery fadeIn与使用.after创建的元素一起使用
- jquery在执行.hide()和.fadeIn()方法之前闪烁Div元素
- 我如何使那些由于附近的其他元素调用$. fadein()而移动的元素产生动画?
- 为什么嵌套的fadeOut不能在最外层fadeIn语句的同一元素上使用?
- JQuery中的元素fadeOut()和fadeIn()
- 元素移动到Jquery的fadeIn()之后
- 如何在制作fadeIn()后再次单击按钮时显示的两个元素fadeOut()