uni-app nvue 中picker-view mask-style的bug
uni-app nvue 中picker-view mask-style的bug
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 | CLI |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:win10
HBuilderX版本号:3.4.11
手机系统:全部
页面类型:nvue
vue版本:vue3
打包方式:云端
CLI版本号:3.0.0-alpha-3041120220520001
测试过的手机:iphone11
示例代码:
<picker-view
:mask-style="maskStyle"
>
</picker-view>
maskStyle='background-image: linear-gradient(to bottom,rgba(30, 30, 30, 0.9),rgba(104, 104, 104, 0.6))'
非nvue
maskStyle='background-image:linear-gradient(rgba(17, 17, 17, 1.0),rgba(106, 106, 106, 0.2)),linear-gradient(rgba(106, 106, 106, 0.2),rgba(17, 17, 17, 1.0))'
`
alpha 3.6.7 已修复 详情
什么时候正式版更新啊
貌似3.6.15 使用 mask-top-style 修改 background-color 也是没效果哦
可以换一种方式实现,用定位盖在蒙层上
<view class="picker">
<picker-view class="pickerView" :indicator-style="indicatorStyle" :value="[0]">
<picker-view-column class="pickerViewColumn">
<view class="item">
<text class="itemText">苹果</text>
</view>
<view class="item">
<text class="itemText">香蕉</text>
</view>
<view class="item">
<text class="itemText">梨子</text>
</view>
</picker-view-column>
</picker-view>
<view class="pickerMaskTop" :style="{height: `${maskHeight + 1}px`}"></view>
<view class="pickerMaskBottom" :style="{height: `${maskHeight + 1}px`}"></view>
</view>
indicatorStyle: height: 50px;
,
maskHeight: (uni.upx2px(500) - 50) / 2,
.picker {
&View {
width: 750rpx;
height: 500rpx;
&Column {
width: 750rpx;
height: 500rpx;
background-color: #333;
}
}
&Mask {
&Top {
width: 750rpx;
background-image: linear-gradient(to bottom,rgba(17, 17, 17, 0.9),rgba(17, 17, 17, 0.5));
position: absolute;
top: 0;
left: 0;
}
&Bottom {
width: 750rpx;
background-image: linear-gradient(to top,rgba(17, 17, 17, 0.9),rgba(17, 17, 17, 0.5));
position: absolute;
left: 0;
bottom: 0;
}
}
}
.item {
height: 50px;
align-items: center;
justify-content: center;
&Text {
color: #fff;
}
}
这种方式会不会影响上下滑动,视觉上应该可以满足,我晚上回去测试一下
回复 上码: 不会影响滑动
回复 1***@qq.com: 好的 谢谢
回复 1***@qq.com: 这种定位式的覆盖,应该是可以用。就是底部的文字变得暗淡了,因为被盖了二层。免费可以用吧。官方未修复前只能这么用了。
回复 tmui: 嗯嗯,效果上还是可以的
回复 1***@qq.com: 提醒 下各位 :在ios下需要把遮罩事件改为fase会阻止滑动功能。
遇到同样问题 nvue暗色主题下 这个组件完全不能用
试试下面的方法
回复 4***@qq.com: 这两个 style 的书写格式就是 web 的 style 标签的格式。不是填写类名
好像还是不支持background-image,并没有修复…
回复 大良造: 支持啊,你碰到什么问题了?
回复 DCloud_UNI_LXH: 回复到下面了,我现在怀疑是mask-style在nvue下都没有生效,因为不止设置background 其它属性 opacity width都不会生效
就写一个最基本的picker-view
nvue页面
<picker-view class="popupCon" :indicator-style="indicatorStyle" :value="[3]" mask-style="background:red;opacity:0.1">
<picker-view-column class="popupConColumn">
<view class="popupItem" v-for="(item,index) in 10" :key="index">
{{item}}
</view>
</picker-view-column>
</picker-view>
.popupCon{
width: 750rpx;
height: 440rpx;
.popupConColumn{
width: 750rpx;
height: 440rpx;}
}
indicatorStyle: height: 88rpx,
在模拟器上和真机上不一致,模拟器不支持nvue,所以表现正常,真机感觉mask-style就完全没有生效,还是默认的渐变色背景,给mask-style 设置 background 没有生效
使用 mask-top-style、mask-bottom-style 这两个属性
回复 DCloud_UNI_LXH: 这个属性 是不是 有问题呀 怎么现在还是没作用
nvue 页面还是没有作用呀
你试试这么写有没有效果
回复 DCloud_UNI_LXH:这样好像可以
回复 9***@qq.com: 颜色值都换换,可能透明不支持。多换换写法
回复 DCloud_UNI_LXH: border能去掉吗 怎么用border:0 没有用
n回复 DCloud_UNI_LXH: 黑色主题 中间的白色线 能去掉不
回复 9***@qq.com: 哪个白线?截图看看
在 uni-app
的 nvue
环境中,picker-view
组件的 mask-style
属性可能会遇到一些 bug 或兼容性问题。以下是一些常见的问题及其可能的解决方案:
1. mask-style
不生效
- 问题描述:在
nvue
中,picker-view
的mask-style
属性可能无法正确应用样式,导致遮罩层没有按照预期显示。 - 解决方案:
- 确保
mask-style
的样式属性是支持的。mask-style
支持的样式属性可能有限,通常包括backgroundColor
、opacity
等。 - 尝试使用内联样式或直接在
style
标签中定义样式,而不是通过mask-style
属性。 - 如果问题依然存在,可以考虑使用
view
组件手动实现遮罩层,并通过z-index
控制层级。
- 确保
2. 遮罩层样式错乱
- 问题描述:遮罩层的样式可能在某些设备或系统版本上显示异常,例如颜色不正确、透明度不生效等。
- 解决方案:
- 检查
mask-style
中的样式属性是否在所有目标平台上都支持。例如,某些平台可能不支持rgba
颜色格式。 - 尝试使用简单的颜色值(如
#000000
)和透明度(如opacity: 0.5
)来测试遮罩层样式。 - 如果问题依然存在,可以考虑使用
view
组件手动实现遮罩层,并通过position: fixed
和z-index
控制其显示。
- 检查
3. 遮罩层无法覆盖整个屏幕
- 问题描述:遮罩层可能无法覆盖整个屏幕,导致部分内容仍然可见。
- 解决方案:
- 确保
picker-view
的父容器具有正确的尺寸和定位。例如,父容器可以使用position: relative
或position: absolute
。 - 检查
mask-style
中的width
和height
属性是否设置为100%
,以确保遮罩层覆盖整个屏幕。 - 如果问题依然存在,可以考虑使用
view
组件手动实现遮罩层,并通过position: fixed
和z-index
控制其显示。
- 确保
4. 遮罩层与 picker-view
的交互问题
- 问题描述:遮罩层可能会阻止用户与
picker-view
的交互,例如无法滚动选择项。 - 解决方案:
- 确保
mask-style
中的pointer-events
属性设置为none
,以允许用户与picker-view
交互。 - 如果问题依然存在,可以考虑使用
view
组件手动实现遮罩层,并通过pointer-events: none
控制其交互行为。
- 确保
5. 平台兼容性问题
- 问题描述:
mask-style
在某些平台(如 iOS 或 Android)上可能表现不一致。 - 解决方案:
- 使用条件编译(如
#ifdef APP-PLUS
)为不同平台编写不同的样式代码。 - 测试并调整
mask-style
中的样式属性,以确保在所有目标平台上都能正确显示。
- 使用条件编译(如
示例代码
<template>
<view>
<picker-view :mask-style="maskStyle">
<picker-view-column>
<view v-for="item in items" :key="item">{{ item }}</view>
</picker-view-column>
</picker-view>
</view>
</template>
<script>
export default {
data() {
return {
items: ['Item 1', 'Item 2', 'Item 3'],
maskStyle: {
backgroundColor: 'rgba(0, 0, 0, 0.5)',
opacity: 0.5,
pointerEvents: 'none'
}
};
}
};
</script>
<style>
/* 手动实现遮罩层 */
.mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 999;
pointer-events: none;
}
</style>