一行JS实现滚动到页面某个元素所在位置(类似JQ ScrollTo插件)

在实现滚动到页面指定位置时一般使用的都是JQuery的ScrollTo插件( 具体可见:ScrollTo:平滑滚动到页面指定位置 )

但是我们也可以使用几行原生js实现此功能:

打开此页面:http://www.runoob.com/try/try.php?filename=tryjsref_html_blur

那么在输入这几行代码就可以啦:

复制代码
<!DOCTYPE HTML>
<html>
<head> 
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
</head>
<body>
<div style="height:200px;width:300px;background-color:red;margin:20px"></div>
<div style="height:200px;width:300px;background-color:red;margin:20px"></div>
<div style="height:200px;width:300px;background-color:red;margin:20px"></div>
<div style="height:200px;width:300px;background-color:red;margin:20px"></div>
<div id="greenid" style="height:200px;width:300px;background-color:green;margin:20px" tabindex="4"></div>
<div style="height:200px;width:300px;background-color:red;margin:20px"></div>
<div style="height:200px;width:300px;background-color:red;margin:20px"></div>
<div style="height:200px;width:300px;background-color:red;margin:20px"></div>
<div style="height:200px;width:300px;background-color:red;margin:20px"></div>
<a href="http://www.runoob.com//" tabindex="2"> runoob.com 菜鸟教程</a><br />
<a id="focusid" href="http://www.google.com/" tabindex="1">Google</a><br />
<a href="http://www.microsoft.com/" tabindex="3">Microsoft</a>

</body>
<script>
document.querySelector('#greenid').focus();
//document.querySelector('#focusid').focus();
</script>
复制代码

原理:利用tabindex和focus,因为focus只能聚焦在input,button,a之类可聚焦的标签上,所以要给div加上tabindex使其可以被focus。

注意:如果元素已经被focus了那么再次focus不会触发滚动条滚动至此元素,记得在再次触发滚动到此focus元素之前先blur即可(demo是两个元素来回focus所以不存在这个问题)。

export const inToView = (id: string) => {
  const ele: any = id && document.querySelector(`#${id}`);
  if (ele) {
    ele.setAttribute('tabindex', '1');
    ele.focus();
    ele.style.outline = 'none'; // 解决IE边框问题
  }
}

 

posted @   jim520  阅读(13141)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示