vue03 uniapp菜单关联

<template>
    <view style="position: fixed; top: 0; width: 100%; height: 100%;">
        <scroll-view scroll-x style="width: 100%;">
            <view style="display: flex;">
                <view @click="painta(index)" v-for="(item,index) in data.arrty" style="padding: 20rpx;">
                    <view :class="ids==index?'centera':'centert'">
                        {{item.name}}
                    </view>
                </view>
            </view>
        </scroll-view>
        <scroll-view @scroll='scroll' scroll-y style="height: 100%;" scroll-with-animation :scroll-top="data.number">
            <view v-for="(item,index) in data.arrty" :id="'paintat'+index">
                <view>{{item.name}}</view>
                <view v-for="node in item.arrtys" class="painta">
                    <image :src='node.image'></image>
                    <view class="fleir">
                        <view class="paint" @click="apint(node)">+</view>
                    </view>
                    <view v-if="node.folt" class="fleir" :class="{'flei':node.folt}" id="id">
                        <view class="paint" :class="{'paints':node.folt}">+</view>
                    </view>
                </view>
            </view>
            <view style="width: 100%; height: 90rpx;"></view>
        </scroll-view>
    </view>
</template>

<script setup lang="ts">
    import { onLoad } from '@dcloudio/uni-app';
    import { ref, getCurrentInstance, reactive, nextTick } from 'vue';
    import ctx from '@/mitt/index';
    let arr = reactive<any>([]);
    let ids = ref<number>(0);
    let data = reactive<any>({
        number: 0,
        arrty: [
            {
                id: 1, name: '商品名称1', arrtys: [
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                ]
            },
            {
                id: 2, name: '商品名称2', arrtys: [
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' }
                ]
            },
            {
                id: 3, name: '商品名称3', arrtys: [
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                ]
            },
            {
                id: 4, name: '商品名称4', arrtys: [
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                ]
            },
            {
                id: 5, name: '商品名称5', arrtys: [
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                ]
            },
            {
                id: 3, name: '商品名称3', arrtys: [
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                    { image: 'http://qiniu.shoulongdao.vip/1/material/d3b703bb-f3f7-49ef-8056-bfd1b864bb63.png' },
                ]
            },
        ]
    })
    let folt = ref<boolean>(false);
    let tish = getCurrentInstance();
    function apint(item : any) {
        item.folt = true;
        setTimeout(() => {
            item.folt = false;
        }, 700)
    }
    function paint() {
        data.arrty.forEach((item, index) => {
            const query = uni.createSelectorQuery().in(tish);
            query.select('#paintat' + index).boundingClientRect(item => {
                arr.push(item.top);
            }).exec();
        })
    }
    async function painta(index) {
        data.number = 0;
        setTimeout(() => {
            data.number = arr[index] - 57;
        })
    }
    function scroll(e) {
        setTimeout(() => {
            arr.forEach((item, index) => {
                console.log(e);
                if (e.target.scrollTop >= (arr[index] - 97)) {
                    ids.value = index;
                }
            })
        }, 100)
    }
    onLoad(() => {
        paint();
        ctx.off('ponts');
        ctx.on('ponts', (item : any) => {
            console.log(item);
        });
    })
</script>

<style lang="scss">
    .painta {
        width: 680rpx;
        background: #fff;
        box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
        padding: 10rpx;
        margin: auto;
        margin-bottom: 30rpx;
        margin-top: 60rpx;
        position: relative;
    }

    .centera {
        color: red;
        white-space: nowrap;
    }

    .centert {
        color: #000;
        white-space: nowrap;
    }

    .fleir {
        position: absolute;
        z-index: 10;
        bottom: 10rpx;
    }

    .flei {
        animation: slidein 0.7s infinite cubic-bezier(0.5, -0.5, 1, 1);
    }

    @keyframes slidein {
        from {
            transform: translateY(0%);
        }

        to {
            transform: translateY(1200rpx);
        }
    }

    .paint {
        background-color: blue;
        display: inline-block;
        padding: 20rpx;
        width: 50rpx;
        height: 50rpx;
        color: #fff;
        border-radius: 50rpx;
        text-align: center;
        line-height: 47rpx;
    }

    .paints {
        animation: apit 0.7s infinite;
    }

    @keyframes apit {
        from {
            transform: translateX(0%);
        }

        to {
            transform: translateX(500rpx);
        }
    }
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值