Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Blazor服务器端,如何处理窗口或主体屏幕?_C#_Blazor_Blazor Server Side_Asp.net Core 3.1_.net Core 3.1 - Fatal编程技术网

C# 在Blazor服务器端,如何处理窗口或主体屏幕?

C# 在Blazor服务器端,如何处理窗口或主体屏幕?,c#,blazor,blazor-server-side,asp.net-core-3.1,.net-core-3.1,C#,Blazor,Blazor Server Side,Asp.net Core 3.1,.net Core 3.1,我需要在blazor服务器端应用程序中捕获窗口或主体的onscroll事件。现在,我使用一个脚本文件实现了这一点,我在其中捕获事件并在其中执行逻辑 对于窗口: window.onscroll=function(){myFunction()}; 函数myFunction(){ //…我的逻辑在这里 } 如何捕获onscrollbody标记的事件?在blazor中,服务器端主体位于\u Host.cshtml文件中,我无法使用@onscroll 对于正文: 上面的一个可以工作,但我对使用bla

我需要在blazor服务器端应用程序中捕获
窗口
主体
onscroll
事件。现在,我使用一个脚本文件实现了这一点,我在其中捕获事件并在其中执行逻辑

对于
窗口

window.onscroll=function(){myFunction()};
函数myFunction(){
//…我的逻辑在这里
}
如何捕获
onscroll
body标记的事件?在blazor中,服务器端
主体
位于
\u Host.cshtml
文件中,我无法使用
@onscroll

对于
正文


上面的一个可以工作,但我对使用blazor时的这个实现不满意


请帮助说明如何使用C#实现此功能。

对我来说,您的_Host.cshtml文件不是razor组件文件,因此您无法在代码块中实现该逻辑(查看.razor扩展名)

@谢谢你给我指明了正确的方向。我使用
IntersectionObserver
实现了这一点

这就是我所做的

我删除了对
window.onscroll=function(){myFunction()}的引用
并从
标记中删除
onscroll=“myFunction()”

然后从Index.razor组件中的
OnAfterRenderAsync
调用my
IntersectionObserver
函数

@code{
AfterRenderAsync(bool firstRender)上受保护的重写异步任务
{
if(firstRender)
{
等待JSRuntime.InvokeVoidAsync(“highlightMenu”);
}
}
}
IntersectionObserver
功能:

函数myFunction(){
const sections=document.queryselectoral('.page section,.site header');
常量配置={
根边距:'-55px 0px-85%'
};
let observer=新的IntersectionObserver(函数
(参赛作品,自我介绍){
entries.forEach(entry=>{
if(输入。isIntersecting){
intersectionHandler(条目);
}
});
},config);
sections.forEach(section=>observer.observe(section));
}

Index.html
是所有Blazor应用程序的入口点。这是一个标准的HTML文档。将呈现为包含滚动事件的
文档
您必须使用JS Interop调用JS代码滚动或通知代码滚动事件

这是一个可以帮你处理的。使用查看它的实际操作


注意:这是在使用.NET 5,因此无法与针对.NET Core 3.1的Blazor应用程序配合使用。

那么唯一的方法就是使用javascript?我上面展示的当前实现?@fingers10是的,但是您可以使用JS interop在C#@aguafrommars中编写逻辑,我应该在哪里使用JS interop调用JS方法?从哪个组件?既然body不是一个可以从何处调用的组件,那么在wwwroot文件夹中添加一个.js脚本,并在您想要使用它的组件中插入一个
IJSRuntime
实例。虽然不能在主体上使用Blazor,但可以将主体设置为非滚动,并将组件用作可滚动元素,然后可以在组件上使用@onscroll,但请注意,这是一个非常健谈的事件,对性能不利。这里的最终目标是什么?为什么需要收听滚动事件?可能还有另一种方法可以满足您的需要…我正在开发一个视差页面,当用户滚动时,我需要根据节激活css类。这是Blazor中使用可滚动容器的目标,但是性能会非常差。您是否考虑过使用交叉观察器?有时您必须使用正确的工具来执行作业,而直接访问DOM在Blazor尚不可用,因此JavaScript最终成为正确的工具,感谢信息和提示。我来看看十字路口观测者。