[vue] 超简单锚点平滑滚动demo

彩蛋:后台管理系统一站式平台模板

vue-admin-wonderful,一套为开发者快速开发准备的基于 vue2.x 越看越精彩的后台管理系统一站式平台模板。基于element ui 2.14.0

1、效果图

在这里插入图片描述

2、代码(过于简单,就不多解释了),直接复制即可运行

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>vue锚点平滑滚动</title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="demo-app" v-cloak>
			<div class="demo-left" ref="demoLeft" @scroll="onScroll">
				<div class="left-box" v-for="(v) in 10" :key="v" ref="leftBox">
					<span>{{v}}</span>
				</div>
			</div>
			<div class="demo-right">
				<div class="right-nav-box">
					<div class="right-nav" v-for="(v,k) in 10" :key="k" @click="onHandlerClick(k)" :class="{'right-nav-active': active === k}"
					 ref="rightNav">{{v}}</div>
				</div>
			</div>
		</div>
	</body>

	<script>
		const vm = new Vue({
			el: '#demo-app',
			data() {
				return {
					active: 0,
					activeArr: []
				}
			},
			mounted() {
				this.init()
				window.onresize = () => {
					this.init()
				}
			},
			methods: {
				init() {
					this.$nextTick(() => {
						setTimeout(() => {
							this.activeArr = []
							this.$refs['leftBox'].map(item => {
								item.style.background = `#${Math.floor(Math.random() * 0xffffff).toString(16)}`
								this.activeArr.push(item.offsetTop)
							})
						}, 300) // 延时加载,防止拿到的数值不准确
					})
				},
				onHandlerClick(index) {
					this.$refs['demoLeft'].scrollTo({
						top: this.$refs['leftBox'][index].offsetTop,
						behavior: 'smooth'
					})
				},
				onScroll(e) {
					this.activeArr.map((item, index) => {
						if (e.target.scrollTop + 200 >= item) {
							this.active = index
						}
					})
				}
			}
		})
	</script>

	<style>
		[v-cloak] {
			display: none;
		}

		* {
			margin: 0;
			padding: 0;
			box-sizing: border-box;
		}

		html,
		body {
			width: 100%;
			height: 100%;
			overflow: hidden;
		}

		#demo-app {
			display: flex;
			width: 100%;
			height: 100%;
		}

		.demo-left {
			flex: 1;
			flex-shrink: 1;
			overflow: auto;
		}

		.left-box {
			width: 100%;
			height: 100%;
			display: flex;
		}

		.left-box span {
			margin: auto;
			font-size: 70px;
		}

		.demo-right {
			flex-basis: 100px;
			display: flex;
			flex-direction: column;
		}

		.right-nav-box {
			margin: auto;
			width: 100%;
		}

		.right-nav {
			border: 1px solid #09F;
			border-bottom: none;
			width: 100%;
			height: 50px;
			display: flex;
			align-items: center;
			justify-content: center;
			cursor: pointer;
		}

		.right-nav:last-child {
			border-bottom: 1px solid #09F;
		}

		.right-nav-active {
			background: #09F;
			color: white;
		}

		.right-nav:hover {
			background: #09F;
			color: white;
		}
	</style>
</html>

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
关于Vue· 美籍华人尤雨溪所作,文档健全,生态完整,与脸谱的React各领前端半边天下;· 相对于React,Vue相对于初学者更容易上手;· 目前统治C端市场的跨平台框架uni-app也是基于Vue的基础技术栈进行开发;· Vue与React在框架设计上有极高的相似度,上手Vue以后,我们可以轻松过渡到React学习;课程特色· 零基础教学,由浅入深,轻松诙谐,物所值;· 基于官方文档教学,在学习Vue的同时学习阅读文档的方式,授人以鱼更授人以渔;· 课程包含Vuex和Vue-Router最新版内容,即所谓【Vue全家桶开发】;· 完整包含Vue3全部内容;· 含京东商城完整项目从零到一开发过程;· 含最新版@vue/cli的开发和生产环境打包流程;· 含Vite两套脚手架的开发和生产环境打包流程;· 含项目部署上线全流程;· 含自定义组件库高阶课程,带你从零到一完成电梯组件开发与发布;· 附Vue高频面试题50余道,OFFER轻松斩获;课程收益· 掌握Vue2+Vue3的框架基础知识;· 掌握Vue全家桶项目开发+打包+上线全流程;· 掌握自定义组件库技巧;· 掌握Vue高频面试题回答技巧;课程关键词Vue2 Vue3 Vuex Vue-RouterVue项目 Vue全家桶@vue/cli Vite 项目打包 项目上线 自定义组件库 Vue面试题写在最后就连太阳光照到地球都需要8分钟,所以,你也需要时间,耐心一点,持续修炼。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值