当前位置:网站首页>锚点导航小demo
锚点导航小demo
2022-07-05 13:47:00 【wade3po】
锚点导航这种功能应该很常见,早之前就分享过移动端移动端导航简单实现,配合起来就很容易实现可移动的锚点导航,而且不是用hash模式。当然,PC端也能直接用。
先上效果:
为了方便直接用vue语法,首先要给每一个块一个唯一的ref,然后初始化的时候记录每一个块距离顶部的距离和每一个块的高度,并监听滚动:
this.$nextTick(() => {
this.firstOffsetTop = this.$refs[this.currentKey][0].offsetTop;
document.addEventListener('scroll', this.onScroll);
this.list.forEach((val) => {
this.itemOffsetTop.push({
key: val.key,
num: this.$refs[val.key][0].offsetTop - this.firstOffsetTop,
height: this.$refs[val.key][0].clientHeight
});
});
});
最重要的三个方法:
onScroll(){
const scrollTop = document.documentElement.scrollTop;
this.itemOffsetTop.forEach((val, index) => {
if(scrollTop > val.num && scrollTop - val.num > val.height / 2){
if(index == this.itemOffsetTop.length - 1){
this.currentKey = this.itemOffsetTop[index].key;
}else {
this.currentKey = this.itemOffsetTop[index + 1].key;
}
}else if(scrollTop < this.itemOffsetTop[0].height / 2){
this.currentKey = this.itemOffsetTop[0].key;
}
})
},
//点击锚点定位
changeKey(key){
document.removeEventListener('scroll', this.throttledScrollHandler);
this.currentKey = key;
let to = this.$refs[key][0].offsetTop - this.firstOffsetTop;
this.animationScrollTo(document.documentElement, to);
},
//锚点定位动画滚动
animationScrollTo(el, to) {
let scrollY = 0;
const beginY = el.scrollTop;
const raf = window.requestAnimationFrame || (func => setTimeout(func, 10));
const moveFn = () => {
if (beginY - to < 0) {
scrollY += (to - beginY) / 30;
if(scrollY <= (to - beginY)){
el.scrollTop = beginY + scrollY;
raf(moveFn);
}else {
el.scrollTop = to;
document.addEventListener('scroll', this.throttledScrollHandler);
}
}else if(beginY - to > 0){
scrollY += (beginY - to) / 30;
if(scrollY <= (beginY - to)){
el.scrollTop = beginY - scrollY;
raf(moveFn);
}else {
el.scrollTop = to;
document.addEventListener('scroll', this.throttledScrollHandler);
}
}
};
raf(moveFn);
}
先判断上滑还是下滑,每次滑动距离除以30,当作滑动的速度,这边注意一点,如果滑动距离为0的情况下是要处理的,否则滚动条会卡住,之前就是一个变量判断是否大于0,结果滚动条卡住了。滚动加点动画效果直接用requestAnimationFrame ,一般都兼容,如果不兼容就用定时器,定时器会比较不顺滑。
监听滚动计算滚动的距离是否大于记录的距离,且超过一半就算下一个,菜单上面定位到下一个。
完整demo:
https://github.com/wade3po/demoCode
锚点导航1.html是更简便,不过兼容性不一定更好。

边栏推荐
- 49. Grouping of alphabetic ectopic words: give you a string array, please combine the alphabetic ectopic words together. You can return a list of results in any order. An alphabetic ectopic word is a
- Zibll theme external chain redirection go page beautification tutorial
- 几款分布式数据库的对比
- 4年工作经验,多线程间的5种通信方式都说不出来,你敢信?
- 荐号 | 有趣的人都在看什么?
- ELK 企业级日志分析系统
- About the problem and solution of 403 error in wampserver
- "Baidu Cup" CTF competition in September, web:upload
- MySQL - database query - sort query, paging query
- Operational research 68 | the latest impact factors in 2022 were officially released. Changes in journals in the field of rapid care
猜你喜欢

French scholars: the explicability of counter attack under optimal transmission theory

Aikesheng sqle audit tool successfully completed the evaluation of "SQL quality management platform grading ability" of the Academy of communications and communications

搭建一个仪式感点满的网站,并内网穿透发布到公网 2/2

【华南理工大学】考研初试复试资料分享

Usage, installation and use of TortoiseSVN

南理工在线交流群
Jetpack compose introduction to mastery

Idea remote debugging agent

Cloudcompare - point cloud slice

How to deal with the Yellow Icon during the installation of wampserver
随机推荐
Attack and defense world web WP
搭建一个仪式感点满的网站,并内网穿透发布到公网 2/2
Integer = = the comparison will unpack automatically. This variable cannot be assigned empty
Log4j utilization correlation
【华南理工大学】考研初试复试资料分享
Hide Chinese name
stm32逆向入门
leetcode 10. Regular Expression Matching 正则表达式匹配 (困难)
NFT value and white paper acquisition
通讯录(链表实现)
Intranet penetration tool NetApp
Basic characteristics and isolation level of transactions
MMSeg——Mutli-view时序数据检查与可视化
mysql获得时间
几款分布式数据库的对比
Redis6 transaction and locking mechanism
Scientific running robot pancakeswap clip robot latest detailed tutorial
Mmseg - Mutli view time series data inspection and visualization
Set up a website with a sense of ceremony, and post it to the public 2/2 through the intranet
【云资源】云资源安全管理用什么软件好?为什么?