uniapp nvue页面 使用两个滚动嵌套的替代方案

308 阅读2分钟
为什么要使用nuve因为项目的平板端(安卓app)涉及到map组件,而app端使用nvue文件才能发挥map组件的作用,不会有些api用不了
官网也有提到(下图)

image.png

为什么要两个滚动因为开发的平板使用的app,左边菜单是固定的,所以右边需要滚动;
为什么需要替代方案因为相同方向的两个滚动组件(list,scroll-view)其中子组件会滚动不了,官网也有提到(下图) ;
之前也使用过subNVue 原生子窗体,想着子窗体应该不会影响,确实是没有影响,但是出现两个问题:
1、由于我是使用组件进行内容滚动,子窗体设置positionstatic无法跟着页面滚动;
2、为了解决第一个问题,设置根据滚动条设置位置,但是滚动起来子窗体是在抖着动,用户体验不好,所以摈弃了原生子窗体的方案

image.png

1、先看替代方案的实现效果(只能说是可以用,各位大佬有其他方案可以评论区提一提)

655456.gif

2、如何实现

  • 寻找替代组件 既然滚动组件不行,那其他组件是否可以,直到我看到安全验证的滑块

image.png

这个滑块不也是类似滚动的嘛,立马操作起来
使用的组件官网链接
movable-area | uni-app官网 (dcloud.net.cn)

部分代码实现,实现穿梭框左边部分

<movable-area style="width: 302px; height: 530px; position: relative" v-if="showLeftData.length > 0">
    <movable-view
            :direction="directionLeft"
            :damping="16"
            :friction="1"
            x="0"
            :y="y"
            :style="{ width: '292px', height: listLengthHeight }"
            @change="onChangeLeft"
    >
            <u-checkbox-group v-model="groupAllLeft" placement="column" activeColor="#EB6100" style="width: 292px">
                    <u-checkbox
                            v-for="(item, index) in showLeftData"
                            style="margin-top: 4px; margin-bottom: 10px; margin-left: 10px; width: 282px"
                            :checked="item.check"
                            :label="item.realName"
                            :key="item.uid"
                            :name="item.uid"
                    ></u-checkbox>
            </u-checkbox-group>
    </movable-view>
</movable-area>
  • 实现过程出现的问题
  1. 由于我是实现类似穿梭框的功能,需要搜索功能,但是滑块滑动到某一位置后,进行搜索,此时滑块还是在那一位置,而相关搜索关键字的数据较少,不在movable-area的可视范围,所有使用搜索的时候要设置滑块回到顶部;解决:在input触发change搜索关键字的时候,设置回到滑块回到顶部
  2. 设置回到顶部又会有问题,在设置过y回到顶部后再次设置无法回到顶部,这个uniapp官网也给出了解决方案;解决:uniapp.dcloud.net.cn/tutorial/vu…

文章只为提供方案,源代码就不贴了,相信各位大佬可以的!

Jerry握手_爱给网_aigei_com.gif

使用uniapp开发app端还是有挺多坑的,希望uniapp x可以完美开发app端(虽然还没用过uniapp x🤭)