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


Posted in Javascript onFebruary 08, 2021

前言

这篇来记录下最近工作中遇到的一个问题,在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 滚动条滑动到锚点的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
在JS中最常看到切最容易迷惑的语法(转)
Oct 29 Javascript
IE6-8中Date不支持toISOString的修复方法
May 04 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
jQuery实现固定在网页顶部的菜单效果代码
Sep 02 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
Dec 08 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
Mar 25 jQuery
Vue.js 实现数据展示全部和收起功能
Sep 05 Javascript
vue.js高德地图实现热点图代码实例
Apr 18 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
Sep 20 Javascript
微信小程序 wxParse插件显示视频问题
Sep 27 Javascript
vue+element 实现商城主题开发的示例代码
Mar 26 Javascript
JavaScript数组reduce()方法的语法与实例解析
Jul 07 Javascript
详解Vue的七种传值方式
Feb 08 #Vue.js
Handtrack.js库实现实时监测手部运动(推荐)
Feb 08 #Javascript
js 执行上下文和作用域的相关总结
Feb 08 #Javascript
微信小程序tab左右滑动切换功能的实现代码
Feb 08 #Javascript
用Javascript实现发送短信验证码间隔功能
Feb 08 #Javascript
原生js 实现表单验证功能
Feb 08 #Javascript
js面向对象封装级联下拉菜单列表的实现步骤
Feb 08 #Javascript
You might like
php中mt_rand()随机数函数用法
2014/11/24 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
PHP整合PayPal支付
2015/06/11 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
用Python写冒泡排序代码
2016/04/12 Python
Python对文件操作知识汇总
2016/05/15 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
幼儿园小班评语
2014/04/18 职场文书
审计专业自荐信范文
2014/04/21 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python
pandas中关于apply+lambda的应用
2022/02/28 Python
配置nginx负载均衡
2022/05/06 Servers