javascript - 对象达到 100% 不透明度后停止 JQuery Opacity 基于滚动的效果

标签 javascript jquery scroll

我正在尝试实现类似于 Apple News 的效果,其中照片在滚动时淡入,但一旦达到 100% 不透明度,它就不会淡出。 This video demonstrates the fade in:然而,它并没有表明它完全淡入。

我已经有了淡入效果,我只是不确定如何在达到该效果后将不透明度保持在 100%。我在下面添加了一些我所拥有的模拟代码,但出于某种原因它似乎无法在 stackoverflow 上正确执行? It does work on codepen though

function fadeIn() {
  
  $(document).scroll(function(){

  var scrollPos = $(this).scrollTop();
  var parallaxTop = $('#fade1').offset().top;
  var parallaxStart = parallaxTop * .1;
  var opacity1 = (scrollPos - parallaxStart);
    
    if ($(this).scrollTop() >= parallaxStart) {
    $('#fade1').css('opacity' , 0 + opacity1);
    }
    
  })
}

fadeIn();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<head>
</head>
<body>
<div style="display: block; width:300px;">
<h1>Take Charge</h1>
<h4>Transform your body with a personal trainer in 2019</h4>
</div>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
  <div id="fade1" style="display: block; width:300px;">
<h1>Take Charge</h1>
<h4>Transform your body with a personal trainer in 2019</h4>
    <p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br><p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
<p>hello</p><br>
  </body>

最佳答案

这里有几种方法可以实现您想要的效果,并防止元素在淡入后又淡出。

如果不透明度为 100%,则提前返回

如果不透明度已经是 1.0,那么您不想更改它,因此如果您检测到这一点,您可以从滚动回调中提前返回。

$(document).scroll(function(){

  // NOTE: Check the opacity and don't change it if the element has
  // already faded in completely
  if($('#fade1').css('opacity') === 1) return;

  var scrollPos = $(this).scrollTop();
  var parallaxTop = $('#fade1').offset().top;
  var parallaxStart = parallaxTop * .1;
  var opacity1 = (scrollPos - parallaxStart)/600;

  if ($(this).scrollTop() >= parallaxStart) {
    $('#fade1').css('opacity' , 0 + opacity1);
  }

});

或者

元素淡入后解除事件绑定(bind)

如果预计该元素永远不会淡入,您可以删除该事件

function scrollCallback(){

  var scrollPos = $(this).scrollTop();
  var parallaxTop = $('#fade1').offset().top;
  var parallaxStart = parallaxTop * .1;
  var opacity1 = (scrollPos - parallaxStart)/600;

  if ($(this).scrollTop() >= parallaxStart) {
    $('#fade1').css('opacity' , 0 + opacity1);

    // NOTE: If we've faded in completely then we don't need the event anymore
    if (opacity1 >= 1.0) {
      $(document).unbind('scroll', scrollCallback);        
    }

  }

};

$(document).bind('scroll', scrollCallback);

希望这些选项之一适合您!

关于javascript - 对象达到 100% 不透明度后停止 JQuery Opacity 基于滚动的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54953451/

相关文章:

javascript - 有序列表仅获取子项

javascript - 如何在 angularjs 中选择特定选项时显示 html 元素?

javascript - 如何使用 jQuery 重置或取消选择多选框?

java - jtabbedpane 不应在向下滚动面板时移动

android - Flutter:如何禁用 GridView 小部件的滚动,但为整个页面启用滚动?

javascript - 从父页面向上和向下滚动 Iframe?

javascript - Vue 后期模型初始化

javascript - 从 javascript 定义的日期开始重复

javascript - 我怎样才能改变这个网格上各个方 block 的颜色......?

jquery - 什么取代了已弃用的属性 this.selector