“‘
<template>
<view class="box">
<view class="arcbar-left" :style="{ top: leftTop + 'rpx' }"></view>
<view class="arcbar-right" :style="{ top: rightTop + 'rpx' }"></view>
<view class="nav"> </view>
<view class="fotter"> </view>
</view>
</template>
<script setup>
import { computed, defineProps } from 'vue'
// 接收外部传入的进度值(0-1)和主标题(心率数字)
const props = defineProps({
progressValue: {
type: Number,
default: 0,
},
})
// 将0-1的scale转为0-100的进度百分比
const progressPercent = computed(() => Math.min(Math.max(props.progressValue * 100, 0), 100))
// 左侧进度块的top值(适配66rpx容器)
const leftTop = computed(() => {
// 0-50%时
if (progressPercent.value <= 50) {
return 46 - (progressPercent.value / 50) * 46
}
return 0
})
// 右侧进度块的top值(适配66rpx容器)
const rightTop = computed(() => {
// 0-50%时
if (progressPercent.value <= 50) {
return -46
}
// 50%-100%时
return -46 + ((progressPercent.value - 50) / 50) * 46
})
</script>
<style scoped>
.box {
width: 66rpx;
height: 66rpx;
border-radius: 50%;
position: relative;
overflow: hidden;
transform: translate3d(0, 0, 0);
clip-path: inset(0 0 0 0);
background-color: #f2f2f2;
z-index: 5;
}
.nav {
width: 56rpx;
height: 56rpx;
border-radius: 50%;
background-color: #000;
position: absolute;
top: 5rpx;
left: 5rpx;
z-index: 10;
}
/ 左侧进度块(0-50%) /
.arcbar-left {
width: 33rpx;
height: 46rpx;
background-color: #f63a29;
position: absolute;
left: 0;
z-index: 2;
transition: top 0.3s ease;
}
/ 右侧进度块(50-100%) /
.arcbar-right {
width: 33rpx;
height: 46rpx;
background-color: #f63a29;
position: absolute;
right: 0;
z-index: 2;
transition: top 0.3s ease;
}
.fotter {
width: 66rpx;
height: 20rpx;
background-color: #000;
position: absolute;
bottom: 0;
left: 0;
z-index: 8;
}
</style>
’”
1 个回复
Ask小助手 - Ask社区AI助手
【结论】
在 nvue 里
overflow: hidden、clip-path等裁剪样式确实会被忽略,这不是框架 bug,而是 nvue 原生渲染引擎的已知限制。官方文档已明确说明 nvue 仅支持 flex 布局子集,不支持 overflow/clip-path 等属性。因此,要实现“超出父级部分隐藏”,只能绕开样式裁剪,采用以下任一替代思路:
✅ 推荐方案 1:物理遮罩(最简单)
把父容器做成一个实心圆,让子元素始终不超出圆边界即可。
示例思路:
.box保持66rpx × 66rpx并设置border-radius: 50%。transform: rotate()控制半圆环的旋转角度,而不是移动top。这样天然不会超出圆形区域,也不需要 overflow。
✅ 推荐方案 2:canvas 2d 绘制(最灵活)
nvue 支持
<canvas>组件,可直接用 Canvas 2d API 画圆环进度:优点:
✅ 推荐方案 3:改用 vue 页面
如果业务允许,把当前页面改为
.vue后缀即可完整使用overflow: hidden、clip-path、border-radius等标准样式。⚠️ 注意事项
一句话总结
在 nvue 中无法通过样式裁剪超出内容,请改用“物理遮罩 + 半圆环旋转”、“canvas 绘制”或“迁移到 vue 页面”三种方式之一即可达成需求。
要回复问题请先登录或注册
公告
更多>相关问题