如何自动滚动列表?
How to automatically scroll a list?
我使用 blazor 创建了一个带有位置列表的简单 UI。下图显示了我的位置列表的实际外观 like.when 单击一个位置它被高亮显示了。
之后,当按下继续按钮时,导航到下一页,这个选定的位置将添加到以下位置字段。
然后如果我们想要 edit/change 位置,我们可以按上面的位置字段并重定向到添加位置页面 again.when 我们再次回到添加位置页面,我们应该可以查看所选位置在页面上仍然突出显示。
问题:-添加位置页面的这个位置列表只有scrollable.header然后继续
按钮 fixed.There 是 100 locations.So 如果我们选择最底部
位置项,当我们重定向页面进行编辑时,我们必须滚动
直到找到位置 item.but 这不是最好的情况。
要求:-当我们重定向页面进行编辑时,页面应该滚动
自动,这样我就可以看到选择的项目。
我需要使用 blazor 来完成此操作。任何知道这件事的人请帮助我,我感谢你的所有帮助,如果你需要任何代码部分,我会提供给你。
我以前遇到过类似的情况,我用JSInterop解决了。
为每个列表项提供 ID(在您的位置 foreach 循环):
<div id="@location.Id">
选择位置后,您可以将位置 ID 存储在注册为 Singleton 的全局对象中(在我的例子中,我将其命名为 AppState)。
AppState 将如下所示:
public class AppState
{
public int LoactionId { get; set; }
}
private void GoToLocation(int locationId)
{
AppState.LoactionId = locationId;
NavigationManager.NavigateTo("locations");
}
在您的列表位置组件中添加此覆盖。
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
await JsRuntime.InvokeVoidAsync("scrollTo", AppState.LocationId);
AppState.LocationId = 0;
}
Javascript代码(参考this):
scrollTo = (id) => {
if (!id) return;
var element = document.getElementById(id);
if (element) {
var headerOffset = document.getElementById('navbar').offsetHeight;//navbar class is given to header
var elementPosition = element.getBoundingClientRect().top;
var offsetPosition = elementPosition - headerOffset;
window.scrollTo({
top: offsetPosition,
behavior: "smooth"
});
}
}
我使用 blazor 创建了一个带有位置列表的简单 UI。下图显示了我的位置列表的实际外观 like.when 单击一个位置它被高亮显示了。
之后,当按下继续按钮时,导航到下一页,这个选定的位置将添加到以下位置字段。
然后如果我们想要 edit/change 位置,我们可以按上面的位置字段并重定向到添加位置页面 again.when 我们再次回到添加位置页面,我们应该可以查看所选位置在页面上仍然突出显示。
问题:-添加位置页面的这个位置列表只有scrollable.header然后继续 按钮 fixed.There 是 100 locations.So 如果我们选择最底部 位置项,当我们重定向页面进行编辑时,我们必须滚动 直到找到位置 item.but 这不是最好的情况。
要求:-当我们重定向页面进行编辑时,页面应该滚动 自动,这样我就可以看到选择的项目。
我需要使用 blazor 来完成此操作。任何知道这件事的人请帮助我,我感谢你的所有帮助,如果你需要任何代码部分,我会提供给你。
我以前遇到过类似的情况,我用JSInterop解决了。
为每个列表项提供 ID(在您的位置 foreach 循环):
<div id="@location.Id">
选择位置后,您可以将位置 ID 存储在注册为 Singleton 的全局对象中(在我的例子中,我将其命名为 AppState)。
AppState 将如下所示:
public class AppState
{
public int LoactionId { get; set; }
}
private void GoToLocation(int locationId)
{
AppState.LoactionId = locationId;
NavigationManager.NavigateTo("locations");
}
在您的列表位置组件中添加此覆盖。
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
await JsRuntime.InvokeVoidAsync("scrollTo", AppState.LocationId);
AppState.LocationId = 0;
}
Javascript代码(参考this):
scrollTo = (id) => {
if (!id) return;
var element = document.getElementById(id);
if (element) {
var headerOffset = document.getElementById('navbar').offsetHeight;//navbar class is given to header
var elementPosition = element.getBoundingClientRect().top;
var offsetPosition = elementPosition - headerOffset;
window.scrollTo({
top: offsetPosition,
behavior: "smooth"
});
}
}