vue和vant侧边导航组件实现左右联动

const moban = {
    delimiters: ['{{', '}}'],
    props: [],
    name: "moban",
    template: `
<div id="moban" style="background: #F9F8F8;">
    <div style="display:flex;">
		<div style="width:30%;">
			<van-sidebar v-model="activeKey" :style="{width:'90%'}">
			  <van-sidebar-item :title="item.name"  v-for="(item,index) in list" :key="index" @click="handleMenulist(index)"/>
			</van-sidebar>
		</div>
		<div id="gddb" :style="{width:'70%',overflowY:'auto',height:ymHeight}" ref="scrollbar">
			<div style="" v-for="(item,index) in list" :key="index" :id="'scroll'+index">
				<div style="font-weight:600;">{{item.name}}</div>
				<div v-for="(v,i) in item.children">
					<div style="display:flex;margin: 10px;">
						<van-image
						  width="88"
						  height="88"
						  :src="v.img"
						   @click="detail(v)"
						/>
						<div style="display:flex;flex-direction:column;justify-content:space-between;padding:10px 0 5px 5px;">
							<div>
								<div style="font-size:12px;color:#323233;">{{v.title}}</div>
								<div style="font-size:12px;color:#646566;padding-right:6px;overflow : hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;width:120px;-webkit-box-orient: vertical;">{{v.ingredient}}</div>
							</div>
							<div style="display:flex;align-items:center;justify-content: space-between;">
								<div style="margin-right:6px;">¥</div>
							</div>
						</div>
					</div>
				</div>
			</div>
			<div style="color:#969799;font-size:14px;text-align:center;margin:10px 0;">没有更多了</div>
			<div style="height:100px;"></div>
		</div>
	</div>
</div>`,
    data() {
        return {
			ymHeight:document.body.offsetHeight + 'px',
			activeKey:0,
			list:[
				{
					name:'列表一',
					children:[
						{id:1,title:'内容一'},
						{id:2,title:'内容二'},
						{id:3,title:'内容三'},
						{id:4,title:'内容四'},
					]
				},
				{
					name:'列表二',
					children:[
						{id:5,title:'内容一'},
						{id:6,title:'内容二'},
						{id:7,title:'内容三'},
						{id:8,title:'内容四'},
					]
				},
				{
					name:'列表三',
					children:[
						{id:9,title:'内容一'},
						{id:10,title:'内容二'},
						{id:11,title:'内容三'},
						{id:12,title:'内容四'},
					]
				},
				{
					name:'列表四',
					children:[
						{id:10,title:'内容一'},
						{id:11,title:'内容二'},
						{id:12,title:'内容三'},
						{id:13,title:'内容四'},
					]
				},
			]
        }
    },
    beforeRouteEnter(to, from, next) {
        document.querySelector('body').setAttribute('style', 'background-color: #F9F8F8');
        next(vm=>{
			
		})
    },
    created() {
		
    },
    activated() {
        
		
    },
    mounted() {
		window.addEventListener("scroll",this.handleScroll,true)
    },
    beforeRouteLeave(to, from, next) {
        // this.$destroy();
        next()
    },
    beforeDestroy() {
        
    },
    methods: {
		handleMenulist(index){
			this.activeKey = index
			let navPage = document.querySelector('#scroll' + index)
			this.$refs.scrollbar.scrollTop = navPage.offsetTop
		},
		handleScroll(){
			let scrollTop = $("#gddb").scrollTop()//这是右边内容滚动时距离顶部的高度
			let len = this.list.length
			for(let a = 0;a<len;a++){
				if(document.querySelector('#scroll' + a).offsetTop < scrollTop + 20){//如果(找到每一块距离顶部的高度)< 内容顶部高度
					this.activeKey = a//那就改变左侧的index
				}
			}
		}
    }
};

export default moban

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陈琦鹏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值