【问题标题】:Jquery fadeOut complete callback not running but the fadeIn callback isJquery fadeOut 完成回调未运行,但fadeIn 回调是
【发布时间】:2014-09-22 11:19:32
【问题描述】:

编辑:我已经删除了 fadeIn 中的新页面,因为我认为这让人们感到困惑。我希望新页面淡入。

我写了一个小网站,它作为一个页面运行,同时看起来像一个传统网站。我基本上想做的是拥有基本要素,即。导航、徽标、页脚等固定到视口,并选择导航将链接到的锚点。这一切都很好,但现在尝试对其进行动画处理时遇到了一些困难。

这是我正在使用的 HTML 标记:

<div id="wrap">

    <ul id="nav">

        <li><a class="start" href="#link1">Page 1</a></li>
        <li><a class="start" href="#link2">Page 2</a></li>
        <li><a class="start" href="#link3">Page 3</a></li>
        <li><a class="start" href="#link4">Page 4</a></li>

    </ul>

    <div class="contents">

    <div id="page" class="page1">

        <a class="finish" name="link1">page1</a>

    </div>

    <div id="page" class="page2">

        <a class="finish" name="link2">page2</a>

    </div>

    <div id="page" class="page3">

        <a class="finish" name="link3">page3</a>

    </div>

    <div id="page" class="page4">

        <a class="finish" name="link4">page4</a>

    </div>

    </div>

</div>

还有 CSS:

html, body {
    margin: 0;
    padding: 0;
    overflow-x: hidden;
}

#nav {
    position: fixed;
    width: 100%;
    margin-left: 80%;
    z-index: 999;
}

li {
    display: inline;
}

#wrap {
    width: 400%;
    height: 100%;
}

#page {
    width: 25%;
    height: 100%;
    float: left;
}

.page1 {
    background-color: blue;
}

.page2 {
    background-color: red;
}

.page3 {
    background-color: grey;
}

.page4 {
    background-color: white;
}

.finish {
    opacity: 0;
    float: right;
    width: 100%;
    height: 100%;
}

现在这一切都可以在没有 Jquery 的情况下完美运行,它直接进入链接页面。 这里的 Jquery 与 .contents 容器一起工作。

$(document).ready(function() {

        //On page load, .contents will be hidden for a clean fadIn animation. WORKING

        $('.contents').css('display', 'none');

        $('.contents').fadeIn(1000);


        //Clicking any nav link will initiate animation.

        $('.start').click(function(event) {

        //Stops default action of going straight to anchor.

        event.preventDefault();

        newLocation = this.href;

        //newpage on fadeOut activate as seen in the url bar but not returning there on fadeIn.    

        $('.contents').fadeOut(1000, newpage);

        //newpage on fadeIn is a debug to test of page will return to newlacation. Works but after animations finished.    

        $('.contents').fadeIn(1000);

    });

        function newpage() {

            window.location = newLocation;

        }

    });

我不确定还可以尝试什么。我能想到的唯一一件事是,完整的回调被 fadeOut 窃听。

【问题讨论】:

  • 请解释一下你想在这里做什么?测试代码似乎令人困惑:)
  • 我正在尝试通过淡出、切换到下一页和淡入来在页面之间转换。

标签: jquery html css fadein fadeout


【解决方案1】:

因为 javascript 是异步的。但是你不能改变页面的位置。那么第一个变化就会发生;

像这样更改您的代码。这应该工作。

 $('.contents').fadeOut(1000, function(){
newpage();
$('.contents').fadeIn(1000, newpage); });

【讨论】:

  • 原始代码仅用于测试。两次更改当前页面 URL 显然是没有意义的(newpage 就是这样做的):)
  • 是的,甚至添加了 function(){ newpage();它不能解决问题。
  • 你在新页面上放了一个警报,你只是评论你所拥有的并尝试会发生什么
【解决方案2】:

好的,我已经解决了,但感谢您的所有建议。

这是固定的 Jquery 位:

$('.contents').fadeOut(1000, function(){

    newpage();

    location.reload(); 

});

基本上需要重新加载页面才能加载页面的新部分。然后它再次运行脚本的第一部分,该部分负责淡入页面。

【讨论】:

    【解决方案3】:

    在动作之间添加适当的时间将解决问题

     $('.contents').fadeOut(800, function(){
       newpage();
       $('.contents').fadeIn(100, newpage); });
    });
    

    基本上你在这里所做的是调用锚点,它将调用相关的滚动位置。使用 jquery 滚动可以得到流畅的结果

    【讨论】:

      【解决方案4】:

      这是因为 Javascript 没有等待 FadeOut 完成,所以它同时启动了 fadeOut 和 fadeIn。

      如果要顺序调用,需要将FadeIn放入FadeOut的回调函数中:

      $('.contents').fadeOut(1000, function(){
      [..你的功能..]
      $('.contents').fadeIn(1000, newpage); }
      );

      【讨论】:

      • 我明白这一点,但即使这样做,页面也不会重定向到锚点,而页面完全淡出。只有在初始页面淡入后才会重定向。
      • 但我不确定我是否理解。您希望您的页面在打开时淡入,然后当您单击锚点时,您希望它淡出,然后加载锚链接,然后淡入?那你为什么需要第二个 fadeIn 呢? window.location 将重新加载您的 jquery document.ready() 函数。所以你只需要确保所有页面都准备好相同的jquery脚本,然后去掉第二个fadeIn,并使用window.location作为fadeOut()的回调。
      • 该站点是一个页面,因此当单击锚点时,它会转到同一页面上的锚点。我想要做的不是让锚点之间的链接突然出现,而是我想用fadeOutfadeIn 对其进行动画处理。你是对的,如果我使用多个页面,那么这个脚本就可以工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多