uniapp 手机端滚动不可用问题解决

作者在使用H5页面中的Drawer组件时遇到滚动失效问题,发现将`<view>`替换为`<scroll-view>`并添加`scroll-y=true`属性后解决了问题,关键在于处理滚动区域的渲染方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在写h5页面的时候,遇到了几次滚动不能用的问题,(正常页面上没有,但是弹窗中就是滑动不了),还是记一下吧

问题代码

<Drawer
    ref="showRight"
    mode="left"
    :mask-click="true"
    :width="clientWidth"
    :height="320"
  >
    <view class="flex-col items-center content">
      <view
        v-for="(item, index) in dataList"
        :key="item.id"
        @click="
          () => {
            clickobj = item;
          }
        "
        class="flex-row justify-center items-center listItem"
        :class="clickobj.id == item.id ? 'activity' : ''"
      >
        {{ item.name }}</view
      >
    </view>
    <view class="submit" @click="emitBack"> 确定 </view>
  </Drawer>

<Drawer>是我封装的弹窗

其中的样式也是看起来没什么问题,当然,高是要固定好的,我这里用的max-height

.content {
  padding: 34px 0px 35px;
  max-height: 195px;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.listItem {
  width: 100%;
  height: 40px;
}
.activity {
  color: $uni-color-primary;
}
.submit {
  width: 100%;
  height: 55px;
  line-height: 55px;
  text-align: center;
  color: $uni-text-color-inverse;
  background-color: $uni-color-primary;
}

可就是不能滑动

解决办法:

将需要滑动的 <view> 直接变成 <scroll-view>就好,并加上属性 scroll-y="true" ,并且没有改样式,就解决了

<Drawer
    ref="showRight"
    mode="left"
    :mask-click="true"
    :width="clientWidth"
    :height="320"
  >
    <scroll-view scroll-y="true" class="flex-col items-center content">
      <view
        v-for="(item, index) in dataList"
        :key="item.id"
        @click="
          () => {
            clickobj = item;
          }
        "
        class="flex-row justify-center items-center listItem"
        :class="clickobj.id == item.id ? 'activity' : ''"
      >
        {{ item.name }}</view
      >
    </scroll-view>
    <view class="submit" @click="emitBack"> 确定 </view>
  </Drawer>

### UniApp 发现页面使用指南 #### 一、发现页面概述 在开发基于 UniApp 的应用时,发现页面通常用于展示一系列可点击进入的内容模块。这些内容可以是文章列表、商品推荐或其他形式的信息集合。为了提升用户体验并确保高效加载,合理的设计和优化至关重要。 #### 二、布局设计原则 采用响应式网格系统来构建发现页的界面结构是一个错的选择。通过设置同的列宽比例适应各种屏幕尺寸下的显示效果[^1]。例如,在手机端可能更适合两栏或三栏排列;而在平板电脑和平板模式下,则可以根据实际需求调整为四到六栏等的形式。 ```html <template> <view class="container"> <!-- 使用flexbox进行弹性布局 --> <view class="item-list flex-wrap"> <block v-for="(item, index) in itemList" :key="index"> <navigator url="/pages/detail/index?id={{item.id}}" hover-class="none" class="list-item"> <image :src="item.coverUrl"></image> <text>{{ item.title }}</text> </navigator> </block> </view> </view> </template> <style scoped lang='scss'> .container { padding: 20rpx; } .item-list { display: flex; gap: 20rpx; .list- 10rpx); /* 手机端每行两个 */ @media (min-width: 768px){ width: calc(33.333% - 10rpx);/* 平板设备上每行三个 */ } image{ width: 100%; height:auto; } text-align:center; } } </style> ``` #### 三、性能优化建议 针对发现页面的数据量较大这一特点,应考虑实施按需加载(即懒加载)机制以减少初次渲染时间。当用户滚动至接近底部区域时再请求新的数据片段追加进来。此外,还可以利用本地存储技术如 `localStorage` 或者 `sessionStorage` 对已浏览过的资源做适当缓存处理,从而加快重复访问速度。 #### 四、错误处理与调试方法 如果遇到诸如网络异常导致无法正常获取远程接口返回值等问题,可以在发起 HTTP 请求之前先判断当前是否有可用互联网连接,并给出友好提示给终端使用者知道发生了什么情况以及该如何操作继续尝试获取所需资料。同时也可以借助浏览器自带开发者工具中的 Network 面板监控整个过程是否存在潜在瓶颈所在之处以便及时排查修复漏洞。 #### 五、集成第三方插件扩展功能 为了让发现页面更加丰富多彩,有时会引入额外的功能组件比如分页器或者是无限滚动条等。此时就需要依赖像 `uni-read-pages` 这样的外部库文件辅助完成特定任务了[^3]。按照官方文档指示执行安装指令后记得重启IDE使更改生效即可正常使用新特性啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值