一、出现的问题:
u-dropdown内容自定义时设置高度,滑动时会带动父级,真机滑动会出现问题
这时就需要处理两个问题:
- 定义内容时设置高度并设置可滑动,可以配合scroll-view组件使用
- 处理真机滑动出现问题的情况(防止滑动穿透)
二、解决办法:
1、定义内容时设置高度并设置可滑动,可以配合scroll-view组件使用
如下代码里的scroll-view组件,主要代码:
<scroll-view scroll-y="true" style="height: 80vh;">
2、处理真机滑动出现问题的情况(防止滑动穿透)
如下代码里的@touchmove.stop.prevent,防止滑动穿透,方法里置空即可,主要代码:
@touchmove.stop.prevent="() => {}"
但此时发现滑动完下拉菜单后,如果父级高度超过屏幕高度,则会继续往上滑,用户体验极差,这时需要手动在总父级上加个样式,监听u-dropdown的下拉状态,控制是否加此样式:
.layer-hidden{
height: 100vh;
overflow: hidden;
}
具体代码如下:
<template>
<view class="open-door-list" :class="layerHidden ? 'layer-hidden' : ''">
<view class="dropdown-style">
<u-dropdown ref="uDropdown" class="key-dropdown" @open="handleOpen" @close="handleClose">
<u-dropdown-item :title="currentDrop3">
<view class="slot-content" style="background-color: #FFFFFF;">
<scroll-view scroll-y="true" style="height: 80vh;" class="u-text-center u-content-color" @touchmove.stop.prevent="() => {}">
<u-cell-group>
<u-cell-item v-for="(item,index) in selectData3" :key="index" :title="item.name" :arrow="false" @click="changeAccountData3(item)">
<u-icon name="checkbox-mark" color="#0796FF" v-if="item.checked"></u-icon>
</u-cell-item>
</u-cell-group>
</scroll-view>
</view>
</u-dropdown-item>
</u-dropdown>
</view>
</view>
</template>
<script>
export default {
data() {
return {
layerHidden: false
}
},
methods: {
handleOpen(index) {
this.layerHidden = true;
},
handleClose(index) {
this.layerHidden = false;
},
}
}
</script>
<style lang="scss">
.layer-hidden{
height: 100vh;
overflow: hidden;
}
</style>
大功告成!