当前位置: 首页 > news >正文

uni-app:踩坑路---scroll-view内使用fixed定位,无效的问题

前言:

        emmm,说起来这个问题整得还挺好笑的,本人在公司内,奋笔疾书写代码,愉快的提交测试的时候,测试跟我说,在苹果手机上你这个样式有bug,我倒是要看看,是什么bug。

安卓vs苹果

ok,我相信已经看出了差异了,安卓的遮罩层正常显示,而苹果的遮罩层只在我的绿色框内,被截断了,我赶忙看代码:

CustomItem.vue:自定义组件

蓝色的正方形,外加上一个遮罩层,点击蓝色方块的时候,显示遮罩层,遮罩层内写我的要展示的一些内容。

<template><view class=""><view class="item" @click="visible = true"></view><view class="mask" v-if="visible" @click="visible = false"></view></view>
</template><script>
export default {name: 'CustomItem',data() {return {visible: false};}
};
</script><style lang="scss" scoped>
.item {width: 100rpx;height: 100rpx;background-color: #00aaff;
}
.mask {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background-color: rgba(#000, 0.5);
}
</style>

 父组件:引用CustomItem组件;

<template><view class="index"><scroll-view scroll-x class="scroll"><view class="list"><custom-item class="item" v-for="i in 10" :key="i"></custom-item></view></scroll-view></view>
</template><script>
import CustomItem from '@/components/CustomItem/index.vue';
export default {components: {CustomItem}
};
</script><style lang="scss" scoped>
.index {width: 100vw;height: 100vh;display: flex;align-items: center;justify-content: center;
}.scroll {width: 400rpx;height: 150rpx;background-color: #aaaa7f;
}
.list {padding: 20rpx;display: flex;align-items: center;.item {margin-right: 20rpx;}
}
</style>

如此:就造成了上面的结果,在ios上显示不正常;于是我立马进入百度啦,问心一言啦,通义千问啦,最后哈,在社区找到了这么一个帖子;帖子看这里。

emmm,寻求解决办法:

1.弃用scroll-view,改用view,使用css滚动;

<view class="list"><custom-item class="item" v-for="i in 10" :key="i"></custom-item>
</view><style lang="scss" scoped>
.list {width: 400rpx;height: 150rpx;background-color: #aaaa7f;padding: 20rpx;overflow-x: scroll;display: flex;align-items: center;.item {margin-right: 20rpx;}
}
</style>

2.如非必要,可以更改接口,其实上面的自定义组件CustomItem看着好像没有什么问题,是机型系统差异导致的,但是我们也并不能将全部原因归结于系统。 

当我们把它合起来看的话,就会发现在结构上似乎有一些问题了,遮罩层这一块的元素就需要循环10次,如果列表很长的话,那不就妥妥增加了很多的dom,浪费性能不说,结构设计也看着很怪, 所以有时候我们在封装组件的时候,不妨也这样考虑一下,可能这么写真的不太合适,最好的方案就是再划分下结构,只需要记得mask内的元素在放在scroll-view的外层即可!

<scroll-view scroll-x class="scroll"><view class="list"><view class="" v-for="i in 10" :key="i"><view class="item" @click="visible = true"></view><view class="mask" v-if="visible" @click="visible = false"></view></view></view>
</scroll-view>

 告辞!

 

http://www.lryc.cn/news/406483.html

相关文章:

  • MySQL4.索引及视图
  • MongoDB - 聚合阶段 $match、$sort、$limit
  • ModuleNotFoundError: No module named ‘scrapy.utils.reqser‘
  • vue3+ts+vite+electron+electron-packager打包成exe文件
  • 使用脚本搭建MySQL数据库基础环境
  • Parameter index out of range (2 > number of parameters, which is 1【已解决】
  • rk3588s 定制版 USB adb , USB2.0与USB3.0 区别,adb 由typeC 转换到USB3.0(第二部分)
  • Cookie与Session 实现登录操作
  • 通过IEC104转MQTT网关轻松接入阿里云平台
  • lua 游戏架构 之 游戏 AI (五)ai_autofight_find_way
  • vue3+openLayers点击标记事件
  • 深入分析 Android ContentProvider (三)
  • 养宠浮毛异味双困扰?性价比高的宠物空气净化器推荐
  • maven项目容器化运行之3-优雅的利用Jenkins和maven使用docker插件调用远程docker构建服务并在1Panel中运行
  • docker 打包orbbec
  • 无涯·问知财报解读,辅助更加明智的决策
  • 【Apache Doris】数据副本问题排查指南
  • 【HarmonyOS】关于鸿蒙消息推送的心得体会(二)
  • 零基础入门:创建一个简单的Python爬虫管理系统
  • 【Node.js基础04】node.js模块化
  • 数据库——单表查询
  • dsa加训
  • SpringBoot源码(1)ApplicationContext和BeanFactory
  • CANoe编程实例--TCP/IP通信
  • Neuron协议网关的北向应用插件开发
  • 【BUG】已解决:You are using pip version 10.0.1, however version 21.3.1 is available.
  • electron-builder打包vue2项目不显示element-ui图标
  • controller层-请求格式为json-请求方法为get
  • 【Linux】网络通信基础:应用层协议、HTTP、序列化与会话管理
  • @NotNull、@NotEmpty 和 @NotBlank 区别