我正在开发一个Blazor网络应用程序,我想在用户滚动时模糊一个特定的元素(背景)。
为了实现这一点,我调用了一个JS函数:
function backgroundBlurry() {
var distanceScrolled = document.scrollingElement.scrollTop;
$('.pageBackground').css({
filter: "blur(" + (distanceScrolled/10) + "px)"
})
}
我的Razor页面:
<body class="windowStyle" @onscroll="@Background">
<div class="pageBackground"/>
</body>
@code{
private async Task Background()
{
await _jsRuntime.InvokeVoidAsync("backgroundBlurry");
}
}
下面是我的css的类:
.windowStyle {
margin: 0;
user-select: none;
overflow: overlay;
width: 100%;
height: 100vh;
background-color: #1c2941;
display: grid;
align-items: center;
justify-items: center;
}
.pageBackground {
z-index: 0;
width: 100%;
height: 100%;
background-image: url(../res/image/web_background.webp);
display: grid;
justify-items: center;
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
position: fixed;
filter: blur(0px);
transform: scale(1.2);
}
我这里的问题是,document.scrollingElement.scrollTop
的值在Chrome、Edge和Firefox上返回0。
我用$(window).scrollTop()
,document.body.scrollTop
,document.documentElement.scrollTop
试过了,都不管用。
我错过什么了吗?
谢谢你。
你好,萨米。
2条答案
按热度按时间zynd9foi1#
我认为使用scroll事件会更容易。当滚动开始时,将
.blurred
css添加到元素中,当滚动停止时,将其删除。它可能看起来像这样。JSFiddle我会使用CSS过渡来平滑效果。
q35jwt9p2#
我想出了一个解决办法,基于@clamchoda的回答。
在js脚本中:
在css文件中,我删除了
height:100vh;
。在此之前,window.scroll是不起作用的,去掉height值后,window.scroll起作用了,scrollTop返回了正确的值。
这个解决方案适用于Chrome、Edge和Firefox。
感谢Clamchoda和所有人。
你好,萨米。