好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

JavaScript 获取滚动条位置并将页面滑动到锚点

前言

这篇来记录下最近工作中遇到的一个问题,在app原生和前端h5混合开发的过程中,其中一个页面是选择城市列表的页面,类似于美团饿了么城市选择,银行app中银行列表选择,通讯录中快速定位到联系人选择的锚点位置等这样的功能,作为刚入门不久的我来说,感觉这个功能还是有一点压力。下面我来分享一下我所查到的一些实现方法。

什么是锚点问题

对于pc端网页来说,常见的网页右侧的回到顶部按钮,点击直接跳转到网页最上面,就是锚点的实现;

对于移动端来说,打开你手机的通讯录,点击右侧的字母,页面直接跳转到对应字母的联系人,这也是锚点的实现。

常见的解决方法

1.<a>标签中href属性设置为跳转元素的id的值

?

< style >

     #mydiv{

       height: 1200px;

       width: 100%;

       background-color: pink;

       position: relative;

     }

     a{

       position: absolute;

       top: 1000px;

       left: 1000px;

     }

    </ style >

   < div id = "mydiv" >

     我是网页顶部

   </ div >

   < a href = "#mydiv" rel = "external nofollow" >回到顶部</ a >

上面的办法相当于设置一个超链接,a标签直接跳转,但是这样回改变浏览器地址栏中的地址,感觉不太实用

2.原生js获取滚动条位置,并作出改变scrollTop

?

<style>

     body{

       position : relative ;

     }

     h 1 {

       margin : 0 auto ;

     }

     .mybtn 1 {

       position : fixed ;

       left : 200px ;

       top : 500px ;

     }

     .mybtn 2 {

       position : fixed ;

       left : 200px ;

       top : 550px ;

     }

   </style>

  <body>

      <h 1 id= "topH1" > 1 </h 1 >

     <h 1 > 2 </h 1 >

     <h 1 > 3 </h 1 >

     <h 1 > 4 </h 1 >

     <h 1 > 5 </h 1 >

     <h 1 > 6 </h 1 >

      <h 1 > 7 </h 1 >

      <h 1 > 1 </h 1 >

     <h 1 > 2 </h 1 >

      <h 1 > 3 </h 1 >

      <h 1 > 4 </h 1 >

      <h 1 > 5 </h 1 >

     <h 1 > 6 </h 1 >

     <h 1 > 7 </h 1 >

      <h 1 > 1 </h 1 >

     <h 1 > 2 </h 1 >

     <h 1 > 3 </h 1 >

     <h 1 > 4 </h 1 >

     <h 1 > 5 </h 1 >

     <h 1 > 6 </h 1 >

      <h 1 id= "tobtmH1" > 7 </h 1 >

   <button class= "mybtn1"   onclick= "toTop()" >回到顶部</button>

   <script>

    function toTop(){

     var topH 1 = document.getElementById( "topH1" )

     document.documentElement.scrollTop=topH 1 .offsetTop

     window.pageYOffset=topH 1 .offsetTop

     document.body.scrollTop=topH 1 .offsetTop ;

    

    }

   </script>

  </body>

这种方法就是给按钮添加点击事件,触发点击事件后改变滚动条位置,但是这种办法需要处理兼容型问题比较麻烦,pc端移动端亲测有效。

3.element.scrollIntoview使得滚动条根据视图发生变化

?

<style>

     body{

       position: relative;

     }

     .mydiv{

       margin-top: 100px;

       border: 1px solid pink;

     }

     h1{

       margin: 0 auto;

     }

     .mybtn1{

       position: fixed;

       left: 200px;

       top: 500px;

     }

     .mybtn2{

       position: fixed;

       left: 200px;

       top: 550px;

     }

</style>

<body>

   <div class= "mydiv" >

   <h1 id= "topH1" >1</h1>

   <h1>2</h1>

   <h1>3</h1>

   <h1>4</h1>

   <h1>5</h1>

   <h1>6</h1>

   <h1>7</h1>

   <h1>1</h1>

   <h1>2</h1>

   <h1>3</h1>

   <h1>4</h1>

   <h1>5</h1>

   <h1>6</h1>

   <h1>7</h1>

   <h1>1</h1>

   <h1>2</h1>

   <h1>3</h1>

   <h1>4</h1>

   <h1>5</h1>

   <h1>6</h1>

   <h1 id= "tobtmH1" >7</h1>

</div>

   <button class= "mybtn1"   onclick= "toTop()" >回到顶部</button>

   <button class= "mybtn2" onclick= "toBtm()" >去到底部</button>

   <script>

     window.onload= function (){

 

     }

   // 调用方法为element.scrollIntoview()

   //参数为true时,页面或者容器发生滚动,使得element的顶部与视图容器顶部对齐

   //参数为false时,使得element的底部与视图容器底部对齐

     function toTop(){

       var topH1 = document.getElementById( 'topH1' )

       topH1.scrollIntoView( true )

     }

     function toBtm() {

       var tobtmH1 = document.getElementById( 'tobtmH1' )

       tobtmH1.scrollIntoView( false )

     }

   </script>

</body>

上面这种方法是将锚点跳转到视图的顶部或者底部,没有太多弊端,pc端移动端亲测有效。

进阶的解决方法

进阶的方法就是调用第三发插件better-scroll,这种方法还没有亲测,查看资料也没有太多的坑,需要的自己添加使用下。

以上就是JavaScript 获取滚动条位置并将页面滑动到锚点的详细内容,更多关于JavaScript 滚动条滑动到锚点的资料请关注服务器之家其它相关文章!

原文链接:https://HdhCmsTestcnblogs测试数据/zaishiyu/p/14259049.html

查看更多关于JavaScript 获取滚动条位置并将页面滑动到锚点的详细内容...

  阅读:41次