长文章阅读elementui tree左侧导航,右侧长文章,两侧联动

长文章阅读,使用vue + elementui tree

左侧导航,点击后右侧跳转到相应位置。

右侧长文章,滚动到某个位置,左侧导航修改选中。

<template>
	<div class="flex articlebox">
		<div class="leftbox">
			<el-tree :data="list" ref="tree" node-key="id" :props="defaultProps" default-expand-all highlight-current @node-click="handleNodeClick"></el-tree>
		</div>
		<div class="rightbox">
			<div v-for="(item,index) in 13" class="contentbox" :id="'a'+(index+1)">{{index+1}}</div>
		</div>
	</div>
</template>
<script>
	// import api from '@/services/other'
	export default {
		data() {
			return {
				//baseUrl: this.$store.state.baseUrl,
				list: [
					{
					id:1,
					label: '一级 1',
					children: [{
						id:2,
						label: '二级 1-1',
						children: [{
							id:3,
							label: '三级 1-1-1'
						}]
					}]
				}, {
					label: '一级 2',
					id:4,
					children: [{
						label: '二级 2-1',
						id:5,
						children: [{
							id:6,
							label: '三级 2-1-1'
						}]
					}, {
						id:7,
						label: '二级 2-2',
						children: [{
							id:8,
							label: '三级 2-2-1'
						}]
					}]
				}, {
					id:9,
					label: '一级 3',
					children: [{
						id:10,
						label: '二级 3-1',
						children: [{
							id:11,
							label: '三级 3-1-1'
						}]
					}, {
						id:12,
						label: '二级 3-2',
						children: [{
							id:13,
							label: '三级 3-2-1'
						}]
					}]
				}],
				defaultProps: {
					children: 'children',
					label: 'label'
				},
				long:[],
			}
		},
		created() {
			this.$nextTick(()=>{
				for (let i = 0; i < 13; i++) {
					this.long.push({id:i+1,top:document.getElementById("a"+(i+1)).offsetTop});
				}
			});
			window.onscroll = ()=>{
			    setTimeout(()=>{
					var st = document.documentElement.scrollTop || document.body.scrollTop;
					this.comparenum(st);
				},200)
			};
		},
		methods: {
			comparenum(num){
				for (let i = 0; i < this.long.length; i++) {
					if(num<this.long[i].top){
						this.$refs.tree.setCurrentKey(this.long[i].id);
						break;
					}
				}
			},
			handleNodeClick(data) {
				console.log(data);
				location.href = "/article?#a"+data.id;
			}
		},
	}
	
</script>
<style lang="scss">
	.contentbox{height:200px;border-top:1px solid #aaa;}
	.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{color:red;}
	.leftbox {
		box-sizing: border-box;
		width: 494px;position: sticky;top:0;
		border-right: 1px solid #bbb;
		padding: 45px 0;
	}

	.rightbox {
		flex: 1;
		box-sizing: border-box;
		padding: 45px 70px;
	}
	.flex {
	    display: flex;
	    align-items: center;
	    flex-wrap: wrap;
	}
	.articlebox{align-items:flex-start;}
</style>

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值