淡入(逐渐)在页面底部

时间:2017-09-04 14:05:05

标签: jquery html css fadein

我想要一个逐渐功能,在页面底部将不透明度从0更改为1。

我在项目的顶部使用类似的功能,但我使用淡出而不是淡入淡出。创建这个相当容易,但是在设置阈值的页面底部淡入是一个噩梦。

经过研究,我发现可以使用以下方式在页面底部创建淡出:

var scrollBottom: (($(document).height() - $(window).height()) - $(window).scrollTop())

要设置阈值,我必须将“scrollBottom”除以数字。一切正常,但无论如何,我都无法改变淡出淡出。我试图用颜色而不是不透明度来玩。将文本从白色更改为黑色会给我完全相同的结果但我无法将“scrollBottom”中的单独值分配给某些颜色并逐渐更改它。

经过多次尝试,我已经找到了解决方案,我在页面底部保持淡出效果,但不是淡出文本,而是淡出了文本上方的纯色div层。它有效,但我不满意你不能突出显示文本,直到不透明度为0,我可以将我的div display:设置为none;

以下是代码:

$(window).on("scroll", function() {

  $(".h-work").css("opacity", 1 - $(window).scrollTop() / 320);
  if ($(window).scrollTop() >= 320) {
    $(".h-work").hide();
  } else {
    $(".h-work").show();
  }

  var t = 320;
  var sb = (($(document).height() - $(window).height()) - $(window).scrollTop());
  var f = sb / t;
  $(".hide").css("opacity", f);

  if (sb >= 320) {
    $(".h-work-bottom").hide();
  } else {
    $(".h-work-bottom").show();
  }

  if (f <= 0) {
    $(".hide").hide();
  } else {
    $(".hide").show();
  }

});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  width: 100%;
  height: 100%;
  overflow-y: scroll;
}

body {
  height: 400%;
  width: 100%;
}

.wrap-fixed-real {
  height: 100vh;
  width: 100%;
  position: fixed;
}

.h-work {
  display: flex;
  opacity: 1;
  align-items: center;
  justify-content: center;
  z-index: 10;
}

.h-work-bottom {
  display: flex;
  opacity: 1;
  align-items: center;
  justify-content: center;
  z-index: 9;
}

h1 {
  position: relative;
  padding: 0px 48px;
  width: 100%;
  max-width: 640px;
  display: block;
  font-family: 'Roboto', sans-serif;
  font-weight: normal;
  font-size: 26px;
  text-align: left;
  line-height: 34px;
  color: #000000;
}

.hide {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: #fff;
}
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
  <div class="wrap-fixed-real h-work">
    <h1>Scroll down</h1>
  </div>
  <div class="wrap-fixed-real h-work-bottom">
    <h1>
      <div class="hide"></div>More, even worse projects to come.</h1>
  </div>
</body>

</html>

正如您所看到的,在var f达到0之前,用户无法突出显示底部的文本。我知道,没有人会尝试选择一些随机文本但是对我来说,这不是专业的。我做了同样的事情但使用了两种不同的方法。我真的希望让我的代码更加一致。

所以这是我的问题:一个人可以达到你在上面的例子中看到的相同的结果,但文字淡入而不是淡出淡出吗?

编辑:我已经看到了(几秒钟内)来自某个陌生人的回复,他说pointer-events: none;解决了问题而无法选择div .cover。有用!现在我认为这是要走的路。我不知道,你为什么要删除你的回复。

2 个答案:

答案 0 :(得分:1)

您不需要额外的div元素。只需在f = 1-f;之后添加行var f = sb / t;即可。看看:

$(window).on("scroll", function() {

  $(".h-work").css("opacity", 1 - $(window).scrollTop() / 320);
  if ($(window).scrollTop() >= 320) {
    $(".h-work").hide();
  } else {
    $(".h-work").show();
  }

  var t = 320;
  var sb = (($(document).height() - $(window).height()) - $(window).scrollTop());
  var f = sb / t;
  f = 1-f;
  $(".h-work-bottom h1").css("opacity", f);

  if (sb >= 320) {
    $(".h-work-bottom").hide();
  } else {
    $(".h-work-bottom").show();
  }

});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  width: 100%;
  height: 100%;
  overflow-y: scroll;
}

body {
  height: 400%;
  width: 100%;
}

.wrap-fixed-real {
  height: 100vh;
  width: 100%;
  position: fixed;
}

.h-work {
  display: flex;
  opacity: 1;
  align-items: center;
  justify-content: center;
  z-index: 10;
}

.h-work-bottom {
  display: flex;
  opacity: 1;
  align-items: center;
  justify-content: center;
  z-index: 9;
}

h1 {
  position: relative;
  padding: 0px 48px;
  width: 100%;
  max-width: 640px;
  display: block;
  font-family: 'Roboto', sans-serif;
  font-weight: normal;
  font-size: 26px;
  text-align: left;
  line-height: 34px;
  color: #000000;
  background: #ffffff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrap-fixed-real h-work">
  <h1>Scroll down</h1>
</div>
<div class="wrap-fixed-real h-work-bottom">
  <h1>
    More, even worse projects to come.</h1>
</div>

答案 1 :(得分:1)

compile 'org.xwalk:xwalk_core_library:20.50.533.12'
$(".h-work-bottom").hide();
$(window).on("scroll", function() {

  $(".h-work").css("opacity", 1 - $(window).scrollTop() / 320);
  if ($(window).scrollTop() >= 320) {
    $(".h-work").hide();
  } else {
    $(".h-work").show();
  }

  var t = 320;
  var sb = (($(document).height() - $(window).height()) - $(window).scrollTop());
  var f = sb / t;

  if (sb >= 320) {
    $(".h-work-bottom").hide();
  } else {
    $(".h-work-bottom").css("opacity", 1 - f);
    $(".h-work-bottom").show();
  }

  if (f <= 0) {
    $(".hide").hide();
  } else {
    $(".hide").show();
  }

});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  width: 100%;
  height: 100%;
  overflow-y: scroll;
}

body {
  height: 400%;
  width: 100%;
}

.wrap-fixed-real {
  height: 100vh;
  width: 100%;
  position: fixed;
}

.h-work {
  display: flex;
  opacity: 1;
  align-items: center;
  justify-content: center;
  z-index: 10;
}

.h-work-bottom {
  display: flex;
  opacity: 1;
  align-items: center;
  justify-content: center;
  z-index: 9;
}

h1 {
  position: relative;
  padding: 0px 48px;
  width: 100%;
  max-width: 640px;
  display: block;
  font-family: 'Roboto', sans-serif;
  font-weight: normal;
  font-size: 26px;
  text-align: left;
  line-height: 34px;
  color: #000000;
}

.hide {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: #fff;
}

你的主要问题是你的H1和div.hide没有正确关闭,你在一个宽度为0的元素中有一个绝对的位置元素。

我实际上只是取出了.hide元素,并保持标记就像顶部一样。完成所有操作后,底部会逐渐淡出而不是。我必须将<html> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <body> <div class="wrap-fixed-real h-work"> <h1>Scroll down</h1> </div> <div class="wrap-fixed-real h-work-bottom"> <h1> More, even worse projects to come.</h1> </div> </body> </html>减去1,而不是使用f来反转效果。