基于Vue+TS,使用scrollIntoView()实现锚点定位

1、获取需要定位的元素的DOM,可以使用querySelectorAll(根据元素类型或者id获取)或使用ref获取元素DOM,注意:使用ref获取DOM,命名必须是唯一的,就算取相同的名字,最后也只能拿到一个DOM。

 //模板内容
//需要跳转的元素
<span id="buttton">buntton</span>
<div id="ref_pdf_view" ref="ref_pdf_view">马上就轮到我展示了1</div>
<div id="ref_pdf_view" ref="ref_pdf_view">马上就轮到我展示了2</div>
<div id="ref_pdf_view" ref="ref_pdf_view">马上就轮到我展示了3</div>

//TS 代码
//第一种获取方法(此时获取到所有id为ref_pdf_view的DOM元素)
const dom = document.querySelectorAll('#ref_pdf_view');
(dom[2] as Element).scrollIntoView({
        behavior: 'smooth', // 平滑过渡
        block: 'start', // 上边框与视窗顶部平齐。默认值
      });

//第二种获取方法(只能获取到一个DOM元素)
(this.$refs.ref_pdf_view as Element).scrollIntoView({
        behavior: 'smooth', // 平滑过渡
         block: 'start', // 上边框与视窗顶部平齐。默认值
      });

2、注册点击事件,点击按钮1,实现内容1呈现的效果

 const button = document.getElementById('#button');
 const dom = document.querySelectorAll('#ref_pdf_view');
 button.onclick = function () {
    (dom[2] as Element).scrollIntoView({
        behavior: 'smooth', // 平滑过渡
        block: 'start', // 上边框与视窗顶部平齐。默认值
    });
 };

如果出现如下报错:

说明没有拿到DOM元素,调用scrollIntoView 方法失败,或是拿到了DOM元素但是将DOM元素的类型判断错误。如:你以为拿到的是DOM数组,即所有类型名相同的元素,所以在定位时使用索引确定DOM,进而调用scrollIntoView();但实际上,JS拿到的只是单个DOM,所以方法调用就会失败。

另外,使用querySelector()获取DOM实现锚点定位,更适合定位元素个数不确定的情况,可以结合map方法,实现页面灵活渲染。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nicole27ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值