Houjie
2025-04-11 1bf977929dd324f3ac64b70debd8a79443c54392
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
<template>
    <view>
        <view class="fixed">
            <cu-custom :isBack="true" bgColor="bg-shadeTop text-white">
                <block slot="backText">返回</block>
                <block slot="content">垂直导航</block>
            </cu-custom>
        </view>
        <swiper class="screen-swiper round-dot" :indicator-dots="true" :circular="true" :autoplay="true" interval="5000"
         duration="500">
            <swiper-item v-for="(item,index) in 4" :key="index">
                <image :src="'https://ossweb-img.qq.com/images/lol/web201310/skin/big3900'+index+ '.jpg'" mode="aspectFill"></image>
            </swiper-item>
        </swiper>
        <view class="VerticalBox">
            <scroll-view class="VerticalNav nav" scroll-y scroll-with-animation :scroll-top="verticalNavTop" style="height:calc(100vh - 375upx)">
                <view class="cu-item" :class="index==tabCur?'text-green cur':''" v-for="(item,index) in list" :key="index" @tap="TabSelect"
                 :data-id="index">
                    Tab-{{item.name}}
                </view>
            </scroll-view>
            <scroll-view class="VerticalMain" scroll-y scroll-with-animation style="height:calc(100vh - 375upx)"
             :scroll-into-view="'main-'+mainCur" @scroll="VerticalMain">
                <view class="padding-top padding-lr" v-for="(item,index) in list" :key="index" :id="'main-'+index">
                    <view class="cu-bar solid-bottom bg-white">
                        <view class="action">
                            <text class="cuIcon-title text-green"></text> Tab-{{item.name}}</view>
                    </view>
                    <view class="cu-list menu-avatar">
                        <view class="cu-item">
                            <view class="cu-avatar round lg" style="background-image:url(https://ossweb-img.qq.com/images/lol/web201310/skin/big10001.jpg);"></view>
                            <view class="content">
                                <view class="text-grey">凯尔</view>
                                <view class="text-gray text-sm flex">
                                    <text class="text-cut">
                                        <text class="cuIcon-infofill text-red  margin-right-xs"></text>
                                        我已天理为凭,踏入这片荒芜,不再受凡人的枷锁遏制。我已天理为凭,踏入这片荒芜,不再受凡人的枷锁遏制。
                                    </text> </view>
                            </view>
                            <view class="action">
                                <view class="text-grey text-xs">22:20</view>
                                <view class="cu-tag round bg-grey sm">5</view>
                            </view>
                        </view>
                        <view class="cu-item">
                            <view class="cu-avatar round lg" style="background-image:url(https://ossweb-img.qq.com/images/lol/img/champion/Taric.png);">
                                <view class="cu-tag badge">99+</view>
                            </view>
                            <view class="content">
                                <view class="text-grey">
                                    <text class="text-cut">瓦洛兰之盾-塔里克</text>
                                    <view class="cu-tag round bg-orange sm">战士</view>
                                </view>
                                <view class="text-gray text-sm flex">
                                    <text class="text-cut">
                                        塔里克是保护者星灵,用超乎寻常的力量守护着符文之地的生命、仁爱以及万物之美。塔里克由于渎职而被放逐,离开了祖国德玛西亚,前去攀登巨神峰寻找救赎,但他找到的却是来自星界的更高层的召唤。现在的塔里克与古代巨神族的神力相融合,以瓦洛兰之盾的身份,永不疲倦地警惕着阴险狡诈的虚空腐化之力。
                                    </text>
                                </view>
                            </view>
                            <view class="action">
                                <view class="text-grey text-xs">22:20</view>
                                <view class="cuIcon-notice_forbid_fill text-gray"></view>
                            </view>
                        </view>
                        <view class="cu-item ">
                            <view class="cu-avatar radius lg" style="background-image:url(https://ossweb-img.qq.com/images/lol/img/champion/Morgana.png);"></view>
                            <view class="content">
                                <view class="text-pink"><text class="text-cut">莫甘娜</text></view>
                                <view class="text-gray text-sm flex"> <text class="text-cut">凯尔,你被自己的光芒变的盲目!</text></view>
                            </view>
                            <view class="action">
                                <view class="text-grey text-xs">22:20</view>
                                <view class="cu-tag round bg-red sm">5</view>
                            </view>
                        </view>
                        <view class="cu-item grayscale">
                            <view class="cu-avatar radius lg" style="background-image:url(https://ossweb-img.qq.com/images/lol/web201310/skin/big81007.jpg);"></view>
                            <view class="content">
                                <view><text class="text-cut">伊泽瑞尔</text>
                                    <view class="cu-tag round bg-orange sm">断开连接...</view>
                                </view>
                                <view class="text-gray text-sm flex"> <text class="text-cut"> 等我回来一个打十个</text></view>
                            </view>
                            <view class="action">
                                <view class="text-grey text-xs">22:20</view>
                                <view class="cu-tag round bg-red sm">5</view>
                            </view>
                        </view>
                        <view class="cu-item cur">
                            <view class="cu-avatar radius lg" style="background-image:url(https://ossweb-img.qq.com/images/lol/web201310/skin/big81020.jpg);">
                                <view class="cu-tag badge"></view>
                            </view>
                            <view class="content">
                                <view>
                                    <text class="text-cut">瓦罗兰大陆-睡衣守护者-新手保护营</text>
                                    <view class="cu-tag round bg-orange sm">6人</view>
                                </view>
                                <view class="text-gray text-sm flex">
                                    <text class="text-cut"> 伊泽瑞尔:<text class="cuIcon-locationfill text-orange margin-right-xs"></text> 传送中...</text></view>
                            </view>
                            <view class="action">
                                <view class="text-grey text-xs">22:20</view>
                                <view class="cuIcon-notice_forbid_fill text-gray"></view>
                            </view>
                        </view>
                    </view>
                </view>
            </scroll-view>
        </view>
    </view>
</template>
 
<script>
    export default {
        data() {
            return {
                list: [],
                tabCur: 0,
                mainCur: 0,
                verticalNavTop: 0,
                load: true
            };
        },
        onLoad() {
            uni.showLoading({
                title: '加载中...',
                mask: true
            });
            let list = [{}];
            for (let i = 0; i < 26; i++) {
                list[i] = {};
                list[i].name = String.fromCharCode(65 + i);
                list[i].id = i;
            }
            this.list = list;
            this.listCur = list[0];
        },
        onReady() {
            uni.hideLoading()
        },
        methods: {
            TabSelect(e) {
                this.tabCur = e.currentTarget.dataset.id;
                this.mainCur = e.currentTarget.dataset.id;
                this.verticalNavTop = (e.currentTarget.dataset.id - 1) * 50
            },
            VerticalMain(e) {
                // #ifdef MP-ALIPAY
                   return false  //支付宝小程序暂时不支持双向联动 
                // #endif
                let that = this;
                let tabHeight = 0;
                if (this.load) {
                    for (let i = 0; i < this.list.length; i++) {
                        let view = uni.createSelectorQuery().select("#main-" + this.list[i].id);
                        view.fields({
                            size: true
                        }, data => {
                            this.list[i].top = tabHeight;
                            tabHeight = tabHeight + data.height;
                            this.list[i].bottom = tabHeight;
                        }).exec();
                    }
                    this.load = false
                }
                let scrollTop = e.detail.scrollTop + 10;
                for (let i = 0; i < this.list.length; i++) {
                    if (scrollTop > this.list[i].top && scrollTop < this.list[i].bottom) {
                        this.verticalNavTop = (this.list[i].id - 1) * 50
                        this.tabCur = this.list[i].id
                        console.log(scrollTop)
                        return false
                    }
                }
            }
        },
    }
</script>
 
<style>
    .fixed {
        position: fixed;
        z-index: 99;
    }
 
    .VerticalNav.nav {
        width: 200upx;
        white-space: initial;
    }
 
    .VerticalNav.nav .cu-item {
        width: 100%;
        text-align: center;
        background-color: #fff;
        margin: 0;
        border: none;
        height: 50px;
        position: relative;
    }
 
    .VerticalNav.nav .cu-item.cur {
        background-color: #f1f1f1;
    }
 
    .VerticalNav.nav .cu-item.cur::after {
        content: "";
        width: 8upx;
        height: 30upx;
        border-radius: 10upx 0 0 10upx;
        position: absolute;
        background-color: currentColor;
        top: 0;
        right: 0upx;
        bottom: 0;
        margin: auto;
    }
 
    .VerticalBox {
        display: flex;
    }
 
    .VerticalMain {
        background-color: #f1f1f1;
        flex: 1;
    }
</style>