|
|
@@ -4,10 +4,10 @@
|
|
|
* @Author: dream
|
|
|
* @Date: 2021-03-27 14:13:43
|
|
|
* @LastEditors: dream
|
|
|
- * @LastEditTime: 2021-03-27 18:29:15
|
|
|
+ * @LastEditTime: 2021-03-28 01:23:20
|
|
|
-->
|
|
|
<template>
|
|
|
- <view class="left-menu-main">
|
|
|
+ <scroll-view class="left-menu-main" scroll-y>
|
|
|
<block v-for="(item, index) in list" :key="index">
|
|
|
<view
|
|
|
:class="['menu-item', item.value === current ? 'active' : '']"
|
|
|
@@ -22,7 +22,14 @@
|
|
|
top: `${bar.top}rpx`
|
|
|
}"
|
|
|
></view>
|
|
|
- </view>
|
|
|
+ <view
|
|
|
+ class="menu-content-bar"
|
|
|
+ :style="{
|
|
|
+ height: `${contentBar.height}rpx`,
|
|
|
+ top: `${contentBar.top}rpx`
|
|
|
+ }"
|
|
|
+ ></view>
|
|
|
+ </scroll-view>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
@@ -43,27 +50,67 @@ export default {
|
|
|
}, {
|
|
|
value: 4,
|
|
|
label: '两行文案两行'
|
|
|
+ }, {
|
|
|
+ value: 5,
|
|
|
+ label: '面粉'
|
|
|
+ }, {
|
|
|
+ value: 6,
|
|
|
+ label: '两行文案两行'
|
|
|
+ }, {
|
|
|
+ value: 7,
|
|
|
+ label: '面粉'
|
|
|
+ }, {
|
|
|
+ value: 8,
|
|
|
+ label: '两行文案两行'
|
|
|
+ }, {
|
|
|
+ value: 9,
|
|
|
+ label: '面粉'
|
|
|
+ }, {
|
|
|
+ value: 10,
|
|
|
+ label: '两行文案两行'
|
|
|
+ }, {
|
|
|
+ value: 11,
|
|
|
+ label: '面粉'
|
|
|
+ }, {
|
|
|
+ value: 12,
|
|
|
+ label: '两行文案两行'
|
|
|
}],
|
|
|
bar: {
|
|
|
top: 0,
|
|
|
height: 0
|
|
|
+ },
|
|
|
+ contentBar: {
|
|
|
+ top: 0,
|
|
|
+ height: 0
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
mounted () {
|
|
|
- this.$nextTick(() => {
|
|
|
- this.changeMenu(this.list[0])
|
|
|
- })
|
|
|
+ this.changeMenu(this.list[0])
|
|
|
},
|
|
|
methods: {
|
|
|
changeMenu (val) {
|
|
|
this.current = val.value
|
|
|
+ const warp = uni.createSelectorQuery().in(this).select('.left-menu-main')
|
|
|
const view = uni.createSelectorQuery().in(this).select(`#menu-item-${this.current}`)
|
|
|
view.boundingClientRect(data => {
|
|
|
- this.bar.top = data ? (data.top + 14) * 2 : 0
|
|
|
- this.bar.height = data ? (data.height - 28) * 2 : 32
|
|
|
+ warp.fields({
|
|
|
+ rect: true,
|
|
|
+ scrollOffset: true
|
|
|
+ }, res => {
|
|
|
+ if (data) {
|
|
|
+ this.bar.top = (data.top - res.top + res.scrollTop + 14) * 2
|
|
|
+ this.bar.height = (data.height - 28) * 2
|
|
|
+ this.contentBar.top = (data.top - res.top + res.scrollTop) * 2
|
|
|
+ this.contentBar.height = data.height * 2
|
|
|
+ } else {
|
|
|
+ this.bar.top = 0
|
|
|
+ this.bar.height = 28
|
|
|
+ this.contentBar.top = 0
|
|
|
+ this.contentBar.height = 92
|
|
|
+ }
|
|
|
+ }).exec()
|
|
|
}).exec()
|
|
|
- console.log(this.bar)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -71,7 +118,10 @@ export default {
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
.left-menu-main {
|
|
|
+ position: relative;
|
|
|
width: 160px;
|
|
|
+ height: 100%;
|
|
|
+ overflow-y: auto;
|
|
|
.menu-item {
|
|
|
padding: 28px;
|
|
|
font-weight: 500;
|
|
|
@@ -80,14 +130,23 @@ export default {
|
|
|
}
|
|
|
.active {
|
|
|
color: $u-type-primary;
|
|
|
- background-color: $iph-standby-bg;
|
|
|
}
|
|
|
.menu-bar {
|
|
|
+ z-index: -1;
|
|
|
position: absolute;
|
|
|
left: 0;
|
|
|
width: 6px;
|
|
|
background: $u-type-primary;
|
|
|
border-radius: 4px;
|
|
|
+ transition: all .3s ease;
|
|
|
+ }
|
|
|
+ .menu-content-bar {
|
|
|
+ z-index: -2;
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ width: 100%;
|
|
|
+ background-color: $iph-standby-bg;
|
|
|
+ transition: all .3s ease;
|
|
|
}
|
|
|
}
|
|
|
</style>
|