Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery:消除白色屏幕“;暂停“;动画之间_Jquery_Animation_Fadein_Fadeout_Cross Fade - Fatal编程技术网

jQuery:消除白色屏幕“;暂停“;动画之间

jQuery:消除白色屏幕“;暂停“;动画之间,jquery,animation,fadein,fadeout,cross-fade,Jquery,Animation,Fadein,Fadeout,Cross Fade,我刚刚发现了,发现它非常有用。它提供了同一网站的URL之间的平滑转换 在jQuery的fadeIn()和fadeOut()方法的帮助下,我创建了一个由两个页面(index.html和about.html)组成的,可以顺利加载 $(document).ready(function() { var transEffect = Barba.BaseTransition.extend({ start: function() { this.newContainerLoading.t

我刚刚发现了,发现它非常有用。它提供了同一网站的URL之间的平滑转换

在jQuery的
fadeIn()
fadeOut()
方法的帮助下,我创建了一个由两个页面(index.html和about.html)组成的,可以顺利加载

$(document).ready(function() {
  var transEffect = Barba.BaseTransition.extend({
    start: function() {
      this.newContainerLoading.then(val => this.fadeInNewcontent($(this.newContainer)));
    },
    fadeInNewcontent: function(nc) {
      nc.hide();
      var _this = this;
      $(this.oldContainer).fadeOut(1000).promise().done(() => {
        nc.css('visibility', 'visible');
        nc.fadeIn(1000, function() {
          _this.done();
        });
        $('html, body').animate({
          scrollTop: 300
        },1000);
      });
    }
  });
  Barba.Pjax.getTransition = function() {
    return transEffect;
  }
  Barba.Pjax.start();
});
这个动画的问题是它们之间有一个白色的屏幕间隔


如何消除此间隔,使过渡更平滑?我所说的“更平滑”是指类似于(单击“查看案例”)

如何使用
setTimeout()
重叠淡出和淡入?这应该可以防止它完全消失,这是我们想要避免的

您可以尝试以下方法:

$(document).ready(function() {
  var transEffect = Barba.BaseTransition.extend({
    start: function() {
      this.newContainerLoading.then(val => this.fadeInNewcontent($(this.newContainer)));
    },
    fadeInNewcontent: function(nc) {
      nc.hide();
      var _this = this;

      // manipulate these values
      let fadeOutTime = 1000;
      let fadeInTime = 1000;
      let overlapTime = 100;

      $(this.oldContainer).fadeOut(fadeOutTime);

      // use setTimeout() to begin fadeIn before fadeOut is completely done
      setTimeout(function () {
        nc.css('visibility', 'visible');
        nc.fadeIn(fadeInTime, function() {
          _this.done();
        });

        $('html, body').animate({
          scrollTop: 300
        }, fadeInTime);

      }, fadeOutTime - overlapTime)

    }
  });
  Barba.Pjax.getTransition = function() {
    return transEffect;
  }
  Barba.Pjax.start();
});
注意:这只是一个尝试,plunker很有帮助,但很难看到动画的实际效果

更新


我想你需要像上面这样的东西,但是如果你想淡入/淡出黑色,那么你还需要做一些事情,比如在你身体内的所有内容周围创建一个div包装,并给这个div应用程序的背景色#eff3f6,然后将实际的身体背景变成黑色。你需要做一些工作来获得你想要的确切效果,但类似的事情或下面评论中的SO链接应该会有所帮助。

白色屏幕是身体颜色,因为你正在使用
promise()。完成(…)
jquery
淡出后应用
fadeIn
使身体颜色显示出来。因此,这是一个类似于您的示例:

<style type="text/css">
    .One{
        width: 100%;
        height: 100%;
        position: absolute;
        margin: 0px;
        padding: 0px;
        top: 0px;
        left: 0px;
        background-color: #476d80;
        cursor: pointer;
        z-index: 1;
    }
    .Two{
        width: 100%;
        height: 100%;
        position: absolute;
        margin: 0px;
        padding: 0px;
        top: 0px;
        left: 0px;
        background-color: #03A9F4;
        cursor: pointer;
        display: none;
    }
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $('div.one').click(function(){
            $(this).fadeOut(1000).promise().done(function(){
                $('div.Two').fadeIn(1000);
            });
        });
    });
</script>
<div class="One"></div>
<div class="Two"></div>
您可以按如下方式编辑代码:

$(this.oldContainer).fadeOut(1000).promise().done(() => {
    $('html, body').animate({
        scrollTop: 300
    },1000);
});
nc.css('visibility', 'visible');
nc.fadeIn(1000, function() {
    _this.done();
});

我拿出了这个版本的剧本:

$(function(){
    var transEffect = Barba.BaseTransition.extend({
    start: function() {
      this.newContainerLoading.then(val => this.fadeInNewcontent($(this.newContainer)));
    },
    fadeInNewcontent: function(nc) {
      var _this = this;
      nc.css('visibility', 'visible');
      nc.show().promise().done(() => {
        $(this.oldContainer).fadeOut(50);
        if (!isMobile.any()) {
          $('html, body').delay(100).animate({
            scrollTop: 200
          },700);
        }
      });
    }
  });
  Barba.Pjax.getTransition = function() {
    return transEffect;
  }
  Barba.Pjax.start();
});

它更好,但不够光滑。请参见上的效果。如何改进它?

如果您还没有弄明白,我明天会看一看。我所说的“更平滑”是指类似于(等待2、3秒,然后单击“查看案例”)。我的意思是,一种“无形的过渡”。你的意思是它在黑色中淡入淡出,而不是白色?或者在某个方向淡入/淡出?我正在寻找与我向您展示的地址相同的效果。我不知道怎么做。这可能有用。我怎样才能淡入黑色?是的,这是一个美丽的效果。然而,开发一个完整的解决方案来提供完全相同的功能特性将超出StackOverflow的目的。我想看看StackOverflow,以及其他类似的问题。这将引导您朝着正确的方向前进,但您必须将精确的解决方案组合在一起。另外,您是否检查了您喜欢的页面上的源代码和html?你应该可以通过检查找到他们在做什么。这是我们的目标。我使用了你提供的脚本。点击“Studiu de caz”查看过渡。它确实改进了很多,但脚本引入了一个错误:单击浏览器的“后退”按钮会破坏主页滑块。除非你有一个完整的工作应用程序的其他部分,如状态管理器或路由器,或两者,正在与本地存储和历史对象同步,那么,是的,像浏览器的后退按钮这样的东西会给你带来麻烦。这是一个相当复杂的功能,你的应用程序将需要更多的工程,使所有这一切成为可能,这是超越范围的一个单一的Q等等。
$(function(){
    var transEffect = Barba.BaseTransition.extend({
    start: function() {
      this.newContainerLoading.then(val => this.fadeInNewcontent($(this.newContainer)));
    },
    fadeInNewcontent: function(nc) {
      var _this = this;
      nc.css('visibility', 'visible');
      nc.show().promise().done(() => {
        $(this.oldContainer).fadeOut(50);
        if (!isMobile.any()) {
          $('html, body').delay(100).animate({
            scrollTop: 200
          },700);
        }
      });
    }
  });
  Barba.Pjax.getTransition = function() {
    return transEffect;
  }
  Barba.Pjax.start();
});