<template> <view> <view class="id"> <view class="left"> <view v-for="(item, index) in list" :key="index" @click="qiehuan(index)" :class="{ box6: ys == index }">{{ item.title }}</view> </view> <view class="rigth"> <!-- :scroll-into-view可以设置让子菜单滚动 --> <scroll-view :scroll-y="true" class="box4" style="height: 200px;" :scroll-into-view="aid" scroll-with-animation @scroll="scroll" @scrolltolower="scrolltolower"> <view v-for="(item, index) in list" :key="index" :id="'po' + index" class="tatle"> {{ item.title }} <view v-for="(it, idx) in item.list" :key="idx">{{ it }}</view> </view> </scroll-view> </view> </view> </view> </template> <script> export default { data() { return { list: [ { title: '华为', list: ['华为1', '华为2', '华为3', '华为4', '华为5', '华为6', '华为7'] }, { title: '小米', list: ['小米1', '小米2', '小米3', '小米4', '小米5', '小米6', '小米7'] }, { title: '苹果', list: ['苹果1', '苹果2', '苹果3', '苹果4', '苹果5', '苹果6', '苹果7'] }, { title: '魅族', list: ['魅族1', '魅族2', '魅族3', '魅族4', '魅族5', '魅族6', '魅族7'] }, { title: '三星', list: ['三星1', '三星2', '三星3', '三星4', '三星5', '三星6', '三星7'] } ], aid: '', ys: '', topList: [] }; }, onReady() { this.getInfo(); }, methods: { test(e) { // console.log(e.detail.current) }, qiehuan(index) { this.aid = 'po' + index; this.ys = index; }, scroll(e) { // 获取到每次滑动的坐标top let scrollTop = parseInt(e.target.scrollTop); // 循环去判断当前top值处于哪个值 然后左边随着滑动 for (let i = 0; i < this.topList.length; i++) { let h1 = this.topList[i]; let h2 = this.topList[i + 1]; if (scrollTop >= h1 && scrollTop < h2) { this.ys = i; } } }, scrolltolower() { setTimeout(() => { this.ys = 4; },80); }, getInfo() { // 下面代码可以获取元素对象 const query = uni.createSelectorQuery().in(this); query.selectAll('.tatle').boundingClientRect().exec(res => { console.log(res) let nodes = res[0]; let rel = []; nodes.map(item => { rel.push(item.top); }); this.topList = rel; }); } } }; </script> <style lang="scss"> swiper { height: 240px; } .box1 { display: inline-block; width: 200px; height: 100px; background: #007aff; border: 1px solid red; } .box2 { display: inline-block; width: 200px; height: 100px; background: #f0f0f0; border: 1px solid red; } .box3 { display: inline-block; width: 200px; height: 100px; background: #00ff00; border: 1px solid red; } .box5 { text-align: center; width: 100%; height: 100%; } .box4 { white-space: nowrap; } .id { display: flex; .left { width: 100px; border: 1px solid red; } .rigth { flex: 1; } } .box6 { background: #4cd964; } </style>