Jua*_*ett 4 html javascript css jquery
我已经看到很多与用户滚动时修改元素不透明度相关的问题,但是没有找到一个可以帮助我的方式.我尝试了几种配方,但未能达到我想要的效果.
我有一个带有BG图像的标题,里面是我用作叠加层的div,我希望它在用户向下滚动时变得更暗和更暗(不透明度增加).
编辑: 期望的效果是:
默认情况下,不透明度在CSS中设置为0.2.当用户开始向下滚动时,它将从0.2开始增加到1.当用户再次向上滚动时,它将从1(或任何值)减少到0.2.
小提琴:https://jsfiddle.net/z7q2qtc6/
<div class='nice-header'>
<div class='header-overlay'></div>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS
.nice-header {
position: relative;
height: 300px;
background: center center;
background-size: cover;
background-image: url(http://www.boeing.com/resources/boeingdotcom/commercial/787/assets/images/marquee-787.jpg);
}
.header-overlay {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
background: rgb(0,0,0);
opacity: 0.2;
}
Run Code Online (Sandbox Code Playgroud)
JS
$(window).scroll(function() {
$('.header-overlay').css({
opacity: function() {
var opacity = 0;
//TODO:
//Set opacity to a higer value whilst user scrolls
return opacity;
}
});
});
Run Code Online (Sandbox Code Playgroud)
您可以使用该.scrollTop()方法检索当前滚动位置.
要计算不透明度,请从元素的高度中减去scrollTop值,然后将其除以元素的高度.
$(window).scroll(function() {
var scrollTop = $(this).scrollTop();
$('.header-overlay').css({
opacity: function() {
var elementHeight = $(this).height();
return 1 - (elementHeight - scrollTop) / elementHeight;
}
});
});
Run Code Online (Sandbox Code Playgroud)
如果您想要考虑元素的初始不透明度0.2:
$('.header-overlay').css({
opacity: function() {
var elementHeight = $(this).height(),
opacity = ((1 - (elementHeight - scrollTop) / elementHeight) * 0.8) + 0.2;
return opacity;
}
});
Run Code Online (Sandbox Code Playgroud)
小智 6
对于任何试图这样做但反过来的人(元素在滚动时淡出)
opacity = ((elementHeight - scrollTop) / elementHeight);
$(window).scroll(function() {
var scrollTop = $(this).scrollTop();
$('.header-overlay').css({
opacity: function() {
var elementHeight = $(this).height(),
opacity = ((elementHeight - scrollTop) / elementHeight);
return opacity;
}
});
});Run Code Online (Sandbox Code Playgroud)
.nice-header {
position: relative;
height: 300px;
background: center center;
background-size: cover;
background-image: url(http://www.boeing.com/resources/boeingdotcom/commercial/787/assets/images/marquee-787.jpg);
}
.header-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgb(0, 0, 0);
opacity: 1;
}
.dummy {
height: 900px;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='nice-header'>
<div class='header-overlay'>
</div>
</div>
<div class='dummy'>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15878 次 |
| 最近记录: |