当前位置: 首页 > news >正文

前端滚动锚点(点击后页面滚动到指定位置)

三个常用方案:
1.scrollintoView
把调用该方法的元素滚动到屏幕的指定位置,中间,底部,或者顶部
优点:方便,只需要获取元素然后调用
缺点:不好精确控制,只能让元素指定滚动到中间,顶部,底部,没法设置偏移
block可以设置为center,end,start等来控制在页面显示的位置。
注意的就是

<script setup>
import {onMounted, ref } from 'vue'
import {useRoute }from 'vue-router'
const { query }= useRoute();
const target = query.target
onMounted(()=>{document.getElementById(target)?.scrollIntoView({block:'center';
})
</script><template><button>美妆</button><button>数码</button><button>美食</button><button>家居</button><button>黄金</button><div class="home" id="home">// 五个楼层<div class="part" id="part1">美妆</div><div class="part" id="part2">数码</div><div class="part" id="part3">美食</div><div class="part" id="part4">家居</div><div class="part" id="part5">黄金</div></div>
</template><style>
.home {width: 1000px;margin: 0 auto;height: 90vh;overflow-y: scroll;
}
.part {margin-top: 20px;border: 1px solid red;height: 600px;
}
.needData {height: 600px;
}
</style>

2.scrollTo
把可滚动元素滚动到指定x,y坐标优点:可以精确控制到具体多少px
缺点:得先获取到x,y坐标
需要注意的是,这个方法的调用者并不是要看到的元素,而是可滚动的元素。像方法一,调用scrollintoView方法的是五个楼层本身,但是如果是调用scrollTo的话是调用他们的父级元素(id="home"的div盒子)它才是可滚动的元素.

<script setup>
import {onMounted, ref } from 'vue'
import {useRoute }from 'vue-router'
const { query }= useRoute();
const target = query.target
onMounted(()=>{const targetDom = document.getElementById(target);const targetRect = targetDom.getBoundingClientRect();document.getElementById(home)?.scrollTo(targetRect.x, targetRect.y - 100);
})
</script><template><button>美妆</button><button>数码</button><button>美食</button><button>家居</button><button>黄金</button><div class="home" id="home"><div class="part" id="part1">美妆</div><div class="part" id="part2">数码</div><div class="part" id="part3">美食</div><div class="part" id="part4">家居</div><div class="part" id="part5">黄金</div></div>
</template>

3.scrollBy 
滚动指定的x,y距离。也就是让他滚动一定距离,不指定坐标
优点:当我们只是做移动,而不是滚到某个指定的元素时
缺点:得自己算出多少距离
这个方法用的少就不举例了

最后:要注意的点,记住这么几个操作
1,如果是打开就滚动到指定位置,vue/react项目一定要在你页面数据渲染完成后滚动
2,如果不含有请求,记得在onMounted(vue),或者useEffect(react)中进行滚动操作,如果是页面滚动,可能还要在加一个小延迟(setTimeout)
3,如果页面的数据是请求来的,请确保数据渲染完成后进行滚动

页面滚动是会记录上一次滚动状态的,在页面渲染好后又会滚回去。记录页面滚动这个现象一般只限于同步引入的组件,异步的不会(没有滚动记录)

http://www.lryc.cn/news/480833.html

相关文章:

  • 使用SSL加密465端口发送邮件
  • 一些面试题总结(一)
  • 泄露的文档显示 Google 似乎意识到了 Tensor 处理器存在过热问题
  • python爬虫案例——网页源码被加密,解密方法全过程
  • 2.4_SSRF服务端请求伪造
  • 数据分析反馈:提升决策质量的关键指南
  • 一步步安装deeponet的详细教学
  • Devops业务价值流:版本发布最佳实践
  • 背包问题(三)
  • linux之调度管理(2)-调度器 如何触发运行
  • 深入理解 Vue 3 中的 Props
  • 校园周边美食探索及分享平台
  • 内网对抗-信息收集篇SPN扫描DC定位角色区域定性服务探针安全防护凭据获取
  • 石墨舟氮气柜:半导体制造中的关键保护设备
  • 性能调优专题(7)之Innodb底层原理与Mysql日志机制深入剖析
  • 量子计算及其在密码学中的应用
  • LSM树 (Log-Structured Merge Tree)、Cuckoo Hashing详细解读
  • VMware中的重要日志文件 vobd.log 学习总结
  • MyBatis 返回 Map 或 List<Map>时,时间类型数据,默认为LocalDateTime,响应给前端默认含有‘T‘字符
  • ASR TP
  • Tomcat与Nginx之全面比较
  • 这是一个bug求助帖子--安装kali 遇坑
  • IntelliJ Idea设置自定义快捷键
  • AlohaKit:一组.NET MAUI绘制的开源控件
  • Windows 实例磁盘空间管理
  • 【动手学电机驱动】STM32-FOC(6)基于 IHM03 的无感方波控制
  • 【数据结构】汇编语言和机器语言的‘数据结构‘
  • hadoop+spark中8088,18080,19888,4040端口页面的区别
  • PDS的主要部件
  • (十三)JavaWeb后端开发——MySQL2