
<template>
<view>
<view class="ld">
<view class="left">
<scroll-view :scroll-y="true" :scroll-with-animation="true" :scroll-into-view="clickToId" :style="{ height: windowHeight }">
<view v-for="(item, index) in list" :key="index">
<view :class="['title', { active: index === currentNum }]" :id="'to' + index" @click="setId(index)">{{ item.title }}</view>
</view>
</scroll-view>
</view>
<view class="right">
<scroll-view :scroll-into-view="clickId" @scroll="scroll" :scroll-with-animation="true" :scroll-y="true" :style="{ height: windowHeight }">
<view v-for="(item, index) in list" :key="index">
<view class="title,right_title" :id="'po' + index">{{ item.title }}</view>
<view v-for="(it, idx) in item.list" :key="idx">
<text class="item">{{ it }}</text>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
list: [
{
title: '菜單1',
list: ['蓋飯1', '大白菜1', '土豆1', '西紅柿1', '辣椒1']
},
{
title: '菜單2',
list: ['蓋飯2', '大白菜2', '土豆2', '西紅柿2', '辣椒2']
},
{
title: '菜單3',
list: ['蓋飯3', '大白菜3', '土豆3', '西紅柿3', '辣椒3']
},
{
title: '菜單4',
list: ['蓋飯4', '大白菜4', '土豆4', '西紅柿4', '辣椒4']
},
{
title: '菜單5',
list: ['蓋飯5', '大白菜5', '土豆5', '西紅柿5', '辣椒5']
},
{
title: '菜單6',
list: ['蓋飯6', '大白菜6', '土豆6', '西紅柿6', '辣椒6']
},
{
title: '菜單7',
list: ['蓋飯7', '大白菜7', '土豆7', '西紅柿7', '辣椒7']
},
{
title: '菜單8',
list: ['蓋飯8', '大白菜8', '土豆8', '西紅柿8', '辣椒8']
},
{
title: '菜單9',
list: ['蓋飯9', '大白菜9', '土豆9', '西紅柿9', '辣椒9']
},
{
title: '菜單10',
list: ['蓋飯10', '大白菜10', '土豆10', '西紅柿10', '辣椒10']
},
{
title: '菜單11',
list: ['蓋飯11', '大白菜11', '土豆11', '西紅柿11', '辣椒11']
},
{
title: '菜單12',
list: ['蓋飯12', '大白菜12', '土豆12', '西紅柿12', '辣椒12']
},
{
title: '菜單13',
list: ['蓋飯13', '大白菜13', '土豆13', '西紅柿13', '辣椒13']
}
],
windowHeight: '0px',
clickId: '',
clickToId: '',
currentNum: 0,
topList: [],
isLeftClick: false
};
},
methods: {
setId(index) {
this.clickId = 'po' + index;
this.isLeftClick = true;
this.currentNum = index;
},
scroll(e) {
if (this.isLeftClick) {
this.isLeftClick = false;
return;
}
let scrollTop = e.target.scrollTop;
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.currentNum = i;
this.clickToId = 'to' + i;
}
//解決滾動到最后選項左側不會選中
let length = this.topList.length;
if (scrollTop >= this.topList[length - 1]) {
this.currentNum = length - 1;
this.clickToId = 'to' + length - 1;
}
}
},
getNodesInfo() {
//獲取節點為.right_title距離頂部的距離,返回值放在數組中
const query = uni.createSelectorQuery().in(this);
query
.selectAll('.right_title')
.boundingClientRect()
.exec(res => {
console.log(res);
let nodes = res[0];
let rel = [];
nodes.map(item => {
rel.push(item.top);
});
console.log(rel);
this.topList = rel;
});
}
},
onLoad() {
let _that = this;
uni.getSystemInfo({
success: function(res) {
_that.windowHeight = res.windowHeight + 'px';
}
});
this.getNodesInfo();
}
};
</script>
<style lang="less">
.ld {
display: flex;
.left {
width: 160upx;
border-right: 1upx solid red;
.title {
text-align: center;
height: 100upx;
line-height: 100upx;
color: #000000;
}
.active {
background-color: #dd524d;
color: #ffffff;
}
}
.right {
flex: 1;
.title {
color: #dd524d;
padding: 20upx;
font-weight: 700;
}
.item {
padding-left: 20upx;
display: inline-block;
height: 350upx;
}
}
}
</style>
呢 稱: | |
表 情: | |
內 容: |
評論內容:不能超過 1000 字,需審核,請自覺遵守互聯網相關政策法規。 |
驗證碼: | |
您發布的評論即表示同意遵守以下條款:
一、不得利用本站危害國家安全、泄露國家秘密,不得侵犯國家、社會、集體和公民的合法權益;
二、不得發布國家法律、法規明令禁止的內容;互相尊重,對自己在本站的言論和行為負責;
三、本站對您所發布內容擁有處置權。