当前位置: 首页>前端>正文

uniapp实现菜单联动

uniapp 菜单联动

uniapp实现菜单联动,第1张

实现左侧点击定位右侧商品类别/右侧滚动左侧类别定位

HTML

<template>

? <view class="content">

// 左侧菜单

? ? <view class="left">

? ???? <view v-for="(item,index) in list" :key="index" @click="setClickId(index)" :class="{active:index===currentIndex}">{{item.title}}</view>

???? </view>

// 右侧商品栏

?<viewclass="right">

? <scroll-view scroll-y :scroll-into-view="clickId" scroll-with-animation @scroll="scroll" @scrolltolower="lower">

???? <view v-for="(item1,index1) in list" :key="index1">

? ? ?? <view class="goodsTitle" :id="'cur'+index1">{{item1.title}}</view>

? ? ? ?? <view v-for="(item2,index2) in item1.list" :key="index2"> {{item2}} </view>

????????? </view>

?????? </scroll-view>

????? </view>

??? </view>

</template>

js

<script>

? ? export default {

? ? ? ? data() {

? ? ? ? ? ? return {

? ? ? ? ? ? ? ? list: [{

? ? ? ? ? ? ? ? ? ? ? ? title: "快餐",

? ? ? ? ? ? ? ? ? ? ? ? list: ["盖饭", "臭豆腐", "凉皮", "肉夹馍"]

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? title: "西餐",

? ? ? ? ? ? ? ? ? ? ? ? list: ["牛排", "红酒", "汉堡", "鸡排"]

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? title: "法餐",

? ? ? ? ? ? ? ? ? ? ? ? list: ["蜗牛", "沙拉", "鹅肝", "红酒"]

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? title: "中餐",

? ? ? ? ? ? ? ? ? ? ? ? list: ["炸鸡", "烤鸭", "木桶饭", "饺子"]

? ? ? ? ? ? ? ? ? ? },

{

? ? title: "西餐",

? ? list: ["牛排", "红酒", "汉堡", "鸡排"]

},

{

? ? title: "法餐",

? ? list: ["蜗牛", "沙拉", "鹅肝", "红酒"]

},

{

? ? title: "中餐",

? ? list: ["炸鸡", "烤鸭", "木桶饭", "饺子"]

},

{

? ? title: "西餐",

? ? list: ["牛排", "红酒", "汉堡", "鸡排"]

},

{

? ? title: "法餐",

? ? list: ["蜗牛", "沙拉", "鹅肝", "红酒"]

},

{

? ? title: "中餐",

? ? list: ["炸鸡", "烤鸭", "木桶饭", "饺子"]

},

? ? ? ? ? ? ? ? ],

? ? ? ? ? ? ? ? clickId: "", // 点击左侧菜单右侧菜单滑动

? ? ? ? ? ? ? ? currentIndex: 0, // 点击左侧添加样式

? ? ? ? ? ? ? ? topList: [],

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? onReady() {

? ? ? ? ? ? this.getNodesInfo();

? ? ? ? },

? ? ? ? methods: {

? ? ? ? ? ? setClickId(index) {

? ? ? ? ? ? ? ? this.clickId = "cur" + index;

? ? ? ? ? ? ? ? this.currentIndex = index;

? ? ? ? ? ? },

? ? ? ? ? ? scroll(e) {

? ? ? ? ? ? ? ? // console.log(e);

? ? ? ? ? ? ? ? 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.currentIndex = i;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? },

? ? ? ? ? ? // 滚动到底部

? ? ? ? ? ? lower(){

? ? ? ? ? ? ? ? setTimeout(()=>{

? ? ? ? ? ? ? ? ? ? this.currentIndex = this.topList.length;

console.log(this.list.length-1)

? ? ? ? ? ? ? ? },100)

? ? ? ? ? ? },

? ? ? ? ? ? // 获取节点的scrollTop数组

? ? ? ? ? ? getNodesInfo() {

? ? ? ? ? ? ? ? const query = uni.createSelectorQuery().in(this);

? ? ? ? ? ? ? ? query.selectAll('.goodsTitle').boundingClientRect().exec(data => {

? ? ? ? ? ? ? ? ? ? // console.log(data);

? ? ? ? ? ? ? ? ? ? let res = data[0];

? ? ? ? ? ? ? ? ? ? let rel = [];

? ? ? ? ? ? ? ? ? ? res.map(item=>{

? ? ? ? ? ? ? ? ? ? ? ? rel.push(item.top);

? ? ? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? ? ? this.topList = rel;

? ? ? ? ? ? ? ? ? ? console.log(this.topList);

? ? ? ? ? ? ? ? });

? ? ? ? ? ? }

? ? ? ? }

? ? }

</script>

css

<style lang="scss">

? ? .content {

? ? ? ? display: flex;

? ? ? ? .left {

? ? ? ? ? ? width: 100px;

? ? ? ? ? ? border: 1px solid #f00;

? ? ? ? }

? ? ? ? .right {

? ? ? ? ? ? flex: 1;

? ? ? ? ? ? border: 1px solid #f00;

? ? ? ? ? ? scroll-view {

? ? ? ? ? ? ? ? height: 200px;

? ? ? ? ? ? ? ? .goodsTitle {

? ? ? ? ? ? ? ? ? ? font-size: 16px;

? ? ? ? ? ? ? ? ? ? font-weight: 600;

? ? ? ? ? ? ? ? ? ? background: #ffb6c1;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? .active {

? ? ? ? background: #ffb6c1;

? ? }

</style>

左侧通过锚点定位去进行定位右侧商品类别 右侧则通过节点高度给予左侧下标赋值

注意:若为动态数据 无法获取节点信息 tolist为空 则设置延时器等待数据获取后再执行getNodesInfo()


https://www.xamrdz.com/web/2tr1994682.html

相关文章: