javascript - 滚动相关的淡入和淡出文本一旦达到某个点

标签 javascript jquery css

我有一条短信 <p><h1> 。文本以 1 <h1> 结尾。 我想将 <p> 的 Y 平移加速两倍当我到达文档的底部时(最后一个 h1 位于页面的中间),我希望 h1 保持在页面的中间。 但我想要<p>如果我向上滚动则向后滚动。

有没有一种简单的方法可以使用 jQuery 来做到这一点? 我尝试了很多在网上找到的解决方案,但都没有令人满意。

$(window).scroll(function(){

    var wScroll = $(document).scrollTop();
    var b = $(document).height() - $(window).height();
    var c = ($(document).height() - wScroll - $(window).height()) * 2;
    var fade = 1 + c / 100;
    var trigger = $('#last').offset().top - $(window).height() / 2;


    if(wScroll > b) {
      $(window).on('scroll', function() {
        $('p').css({
          'transform' : 'translateY('+ c +'px)',
          'opacity' : ''+ fade +''
        })
      })

    }

});
p, h1 {
  font-family: Baskerville;
  margin: auto;
  max-width: 650px;
  color: #333;
}

p {
  font-size: 21px;
  line-height: 33px;
  max-width: 650px;
  margin-top: 30px;
}

p:nth-child(2):first-letter {
  font-family: Arial;
  font-weight: 700;
  float: left;
  font-size: 72px;
  line-height: 63px;
  padding-right: 12px;
}

h1 {
  font-size: 47px;
  margin-top: 30px;
}

h1:last-child {
  margin-bottom: 0px;
}

.container {
  margin-top: 5%;
  margin-bottom: 50vh;
}
    <div class="container">
    <h1>Hello!</h1>

    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam ornare dictum ligula. Maecenas elementum suscipit nisl. Cras imperdiet leo ac felis dictum luctus. Pellentesque odio nisi, accumsan nec, scelerisque sed, consectetuer nec, justo. Sed tortor sapien, suscipit id, pulvinar vel, elementum id, lorem. Nullam consectetuer risus sit amet nibh. Vestibulum consectetuer, quam vitae euismod volutpat, magna magna consectetuer dui, et accumsan magna dui non nibh. Morbi adipiscing consequat erat. Vivamus quis massa eget orci fermentum laoreet. Morbi posuere purus. Duis feugiat lacus vel nisi. Aliquam ipsum felis, pretium sed, vehicula vel, dictum eget, nibh. Morbi turpis nulla, luctus viverra, pretium in, suscipit vitae, purus.</p>

    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam ornare dictum ligula. Maecenas elementum suscipit nisl. Cras imperdiet leo ac felis dictum luctus. Pellentesque odio nisi, accumsan nec, scelerisque sed, consectetuer nec, justo. Sed tortor sapien, suscipit id, pulvinar vel, elementum id, lorem. Nullam consectetuer risus sit amet nibh. Vestibulum consectetuer, quam vitae euismod volutpat, magna magna consectetuer dui, et accumsan magna dui non nibh. Morbi adipiscing consequat erat. Vivamus quis massa eget orci fermentum laoreet. Morbi posuere purus. Duis feugiat lacus vel nisi. Aliquam ipsum felis, pretium sed, vehicula vel, dictum eget, nibh. Morbi turpis nulla, luctus viverra, pretium in, suscipit vitae, purus.</p>

    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam ornare dictum ligula. Maecenas elementum suscipit nisl. Cras imperdiet leo ac felis dictum luctus. Pellentesque odio nisi, accumsan nec, scelerisque sed, consectetuer nec, justo. Sed tortor sapien, suscipit id, pulvinar vel, elementum id, lorem. Nullam consectetuer risus sit amet nibh. Vestibulum consectetuer, quam vitae euismod volutpat, magna magna consectetuer dui, et accumsan magna dui non nibh. Morbi adipiscing consequat erat. Vivamus quis massa eget orci fermentum laoreet. Morbi posuere purus. Duis feugiat lacus vel nisi. Aliquam ipsum felis, pretium sed, vehicula vel, dictum eget, nibh. Morbi turpis nulla, luctus viverra, pretium in, suscipit vitae, purus.</p>

    <h1 id="last">See ya!</h1>
    </div>
<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

最佳答案

这是第一步。 如果有人有更好的方法,我会采纳!

$(window).scroll(function(){

// Variables for last paragraph

  var wScroll = $(this).scrollTop();
  var bottom = ($(document).height() - wScroll - $(window).height()) / 2 ;
  var fade = bottom / 100;


  // Last paragraph: fading & scroll x 2

  if(wScroll > $('#last').offset().top - $(window).height()){

    var offset = wScroll - $('h1#last').offset().top + $(window).height();

    // Select all the p, h1 et h2 but not those with id='last'

    $('p, h1, h2').not('#last').css({
      'transform': 'translateY(-' + offset * 0.4 +'px)',
      'opacity' : fade
    });

  }
  });
p, h1 {
  font-family: Baskerville;
  margin: auto;
  max-width: 650px;
  color: #333;
}

p {
  font-size: 21px;
  line-height: 33px;
  max-width: 650px;
  margin-top: 30px;
}

p:nth-child(2):first-letter {
  font-family: Arial;
  font-weight: 700;
  float: left;
  font-size: 72px;
  line-height: 63px;
  padding-right: 12px;
}

h1 {
  font-size: 47px;
  margin-top: 30px;
}

h1:last-child {
  margin-bottom: 0px;
}

.container {
  margin-top: 5%;
  margin-bottom: 50vh;
}
   <div class="container">
    <h1>Hello!</h1>

    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam ornare dictum ligula. Maecenas elementum suscipit nisl. Cras imperdiet leo ac felis dictum luctus. Pellentesque odio nisi, accumsan nec, scelerisque sed, consectetuer nec, justo. Sed tortor sapien, suscipit id, pulvinar vel, elementum id, lorem. Nullam consectetuer risus sit amet nibh. Vestibulum consectetuer, quam vitae euismod volutpat, magna magna consectetuer dui, et accumsan magna dui non nibh. Morbi adipiscing consequat erat. Vivamus quis massa eget orci fermentum laoreet. Morbi posuere purus. Duis feugiat lacus vel nisi. Aliquam ipsum felis, pretium sed, vehicula vel, dictum eget, nibh. Morbi turpis nulla, luctus viverra, pretium in, suscipit vitae, purus.</p>

    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam ornare dictum ligula. Maecenas elementum suscipit nisl. Cras imperdiet leo ac felis dictum luctus. Pellentesque odio nisi, accumsan nec, scelerisque sed, consectetuer nec, justo. Sed tortor sapien, suscipit id, pulvinar vel, elementum id, lorem. Nullam consectetuer risus sit amet nibh. Vestibulum consectetuer, quam vitae euismod volutpat, magna magna consectetuer dui, et accumsan magna dui non nibh. Morbi adipiscing consequat erat. Vivamus quis massa eget orci fermentum laoreet. Morbi posuere purus. Duis feugiat lacus vel nisi. Aliquam ipsum felis, pretium sed, vehicula vel, dictum eget, nibh. Morbi turpis nulla, luctus viverra, pretium in, suscipit vitae, purus.</p>

    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam ornare dictum ligula. Maecenas elementum suscipit nisl. Cras imperdiet leo ac felis dictum luctus. Pellentesque odio nisi, accumsan nec, scelerisque sed, consectetuer nec, justo. Sed tortor sapien, suscipit id, pulvinar vel, elementum id, lorem. Nullam consectetuer risus sit amet nibh. Vestibulum consectetuer, quam vitae euismod volutpat, magna magna consectetuer dui, et accumsan magna dui non nibh. Morbi adipiscing consequat erat. Vivamus quis massa eget orci fermentum laoreet. Morbi posuere purus. Duis feugiat lacus vel nisi. Aliquam ipsum felis, pretium sed, vehicula vel, dictum eget, nibh. Morbi turpis nulla, luctus viverra, pretium in, suscipit vitae, purus.</p>

    <h1 id="last">See ya!</h1>
    </div>
<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

关于javascript - 滚动相关的淡入和淡出文本一旦达到某个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42990611/

相关文章:

javascript - 在 Google Maps API v3 中切换平移和标记移动锁定

javascript - node.js上传下载pdf文件

javascript - 是否需要在 setTimeout 和 setInterval 前面加上 window 对象?

jquery - 切换显示/隐藏 Div

html - 多个 CSS 背景设置为覆盖 50% 100% 大小(并且固定!)

html - 布局 80% 的显示 :table

javascript - 如何处理控制台中的 "ng-model value must be a Date object"错误

javascript - 有没有办法在javascript中获取鼠标悬停时的当前项目ID?

jquery - 调整大小不适用于 Firefox

javascript - 如果屏幕宽度小于 960 像素,则将屏幕宽度添加到类中