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;
    }
    h1{
      margin: 0 auto;
    }
    .mybtn1{
      position: fixed;
      left: 200px;
      top: 500px;
    }
    .mybtn2{
      position: fixed;
      left: 200px;
      top: 550px;
    }
  </style>
  <body>
     <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>
  <button class="mybtn1"  onclick="toTop()">回到顶部</button>
  <script>
   function toTop(){
    var topH1 = document.getElementById("topH1")
    document.documentElement.scrollTop=topH1.offsetTop
    window.pageYOffset=topH1.offsetTop
    document.body.scrollTop=topH1.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 滚动条滑动到锚点的资料请关注我们其它相关文章!

(0)

相关推荐

  • vue 纯js监听滚动条到底部的实例讲解

    在网页中,我们会遇到很多在滚动条到底部的时候有数据正在加载的事件,那么怎样用vue去实现这样的内容呢?本篇只给出一个雏形,结合vue的生命周期用纯javascript写的一个监听函数,后续操作数据库的部分暂且不议. 1.怎样用纯js判断滚动条是否到底部? 先了解几个关键词: (1)滚动条到顶部的位置:scrollTop (2)当前窗口内容可视区:windowHeight (3)滚动条内容的总高度:scrollHeight 触发监听的函数是: window.onscroll = function(

  • Vue.js桌面端自定义滚动条组件之美化滚动条VScroll

    前言 前段时间有给大家分享一个vue桌面端弹框组件,今天再分享最近开发的一个vue pc端自定义滚动条组件. vscroll 一款基于vue2.x开发的网页端轻量级超小巧自定义美化滚动条组件.支持是否原生滚动条.鼠标移出是否自动隐藏.自定义滚动条尺寸及颜色等功能. 组件在设计开发之初借鉴了 el-scrollbar 及 vuebar 等组件设计思想. 通过简单的标签写法<v-scroll>...</v-scroll> 即可快速生成一个漂亮的替换原生滚动条. 参数配置 props:

  • JavaScript实现简易聊天对话框(加滚动条)

    今天看了几个JS的视频,老师布置了一个编写一个简易聊天对话框的任务,没有涉及到Ajax.主要实现了切换头像模拟两方的聊天情况,样式比较简单,后期可以进行美化. 需要注意的地方是我是用的ul li列表来实现元素的添加,这样更利于样式的设置,每添加一个对话框需要清除一下浮动,不然会出现连续几个对话框出现在一行的现象. 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <

  • js滚轮事件 自定义滚动条的实现

    本文实例为大家分享了js自定义滚动条的实现的具体代码,供大家参考,具体内容如下 描述: 自定义滚动条的实现 效果: 实现: <!DOCTYPE html> <html lang=""> <head> <meta charset="utf-8"> <title></title> <style> * {margin: 0;padding: 0;} html,body { width: 1

  • JS自定义滚动条效果

    本文实例为大家分享了JS自定义滚动条的具体代码,供大家参考,具体内容如下 <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #all{ width: 500px; height: 50px; background-color: sandybrown; border-radius: 25px; margin: 0 aut

  • layer.js open 隐藏滚动条的例子

    我就废话不多说了,直接上代码让大家看看吧! $('img.echart-trand').click(function() { var host = $(this).data('host'); var role = $(this).data('role'); console.log('host',host); console.log(window.width); var labeltitle = host; if(role==4)labeltitle = $(this).data('title')

  • JS实现滚动条触底加载更多

    原理 1.通过监听滚动区域DOM的scroll事件, 计算出触底 // 滚动可视区域高度 + 当前滚动位置 === 整个滚动高度 scrollDom.clientHeight + scrollDom.scrollTop === scrollDom.scrollHeight 2.触底后触发列表添加, 列表添加使用createDocumentFragment, 将多次插入的DOM先存入内存, 最后一次填充进去, 提高性能, 也方便后面的MutationObserver监听 3.使用MutationO

  • 使用js实现一个简单的滚动条过程解析

    当我们给元素加上 overflow: auto; 的时候,就会出现滚动条,然而浏览的不同,滚动条的样式大不一样,有些甚至非常丑. 于是就想着自己写一个滚动条,大概需要弄清楚一下这几个点: 1.滚动条 bar 是根据内容的多少,高度不一样的,这个需要动态的计算 2.滚动条 bar 的 top 位置 和 内容scrollTop 的关系. 思路: 使用嵌套的布局,如下: <!DOCTYPE html> <html> <head> <meta charset="

  • 原生js实现自定义滚动条

    本文实例为大家分享了js实现自定义滚动条的具体代码,供大家参考,具体内容如下 1.HTML文件 div1是滚动条,div2是滚动小球,div3是文本区域容器,div4是文本区域. <div id="div"> <div id="div1"> <div id="div2"> </div> </div> <div id="div3"> <div id=&

  • js实现滚动条自动滚动

    本文实例为大家分享了js实现滚动条自动滚动的具体代码,供大家参考,具体内容如下 效果类似于直播网站的评论,会一条接着一条向上 go out : js部分很简单:通过控制scrollTop的值来实现自动滚动效果: 很重要两点:    1.scrollTop的值不可以加单位,谨记! 2.网页缩放比例会影响效果实现(下面具体说): scrollTop需要注意的三点: 1.如果这个元素没有被溢出,scrollTop为0: 2.设置的scrollTop值小于0,则scrollTop的值为0 3.如果设置s

  • 原生js实现自定义滚动条组件

    本文实例为大家分享了js实现自定义滚动条组件的具体代码,供大家参考,具体内容如下 功能需求: 1.按照数据结构创建菜单内容,显示在页面中: 2.点击菜单后,显示对应的下级菜单内容,如果整体内容溢出,则出现滚动条: 3.滚动条的高度要随着整体内容高度的改变而改变. 4.鼠标拖动滚动条,整体内容要随着向上滚动. 5.当鼠标滚动时,滚动条和整体内容也要相应滚动. 来看一下效果: 默认状态: 点击菜单,内容溢出后,出现滚动条: 鼠标拖动滚动条,整体内容随着向上滚动: 分析: 这个案例中包括折叠菜单和滚动

随机推荐