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

uni-app项目实战笔记15--使用uni-popup实现弹出层和uni-rate实现评分效果

关于uni-popup组件可访问uniapp官网查看更多:uni-popup 弹出层 | uni-app官网。

重要属性配置:

属性名类型默认值说明
animationBooleantrue是否开启动画
typeString'center'弹出方式
mask-click [即将废弃]Booleantrue蒙版点击是否关闭弹窗
is-mask-click [1.7.4新增]Booleantrue蒙版点击是否关闭弹窗
mask-background-color [1.7.4新增]rgbargba(0,0,0,0.4)蒙版颜色,建议使用 rgba 颜色值
background-colorString'none'主窗口背景色
borderRadiusString设置圆角(左上、右上、右下和左下) 示例:"10px 10px 10px 10px"
safe-areaBooleantrue是否适配底部安全区

下面是uni-popup的使用示例:

<uni-popup ref="infoPopup" type="bottom"><view class="infoPopup"><view class="popHeader"><view class="title">壁纸信息</view><view class="close" @click="closeInfoPopup"><uni-icons type="closeempty" size="18" color="#999"></uni-icons></view></view><scroll-view scroll-y><view class="content"><view class="row" ><view class="label">壁纸ID:</view><text selectable class="value" >13897856890321</text></view><view class="row" ><view class="label">分类:</view><text class="value classify" >明星美女</text></view><view class="row" ><view class="label">发布者:</view> <text class="value" >咸虾米</text></view><view class="row" ><view class="label">评分:</view><view class="value rateBox"><uni-rate readonly touchable value="3.5" size="16" /><text class="score" >5分</text></view></view><view class="row" ><view class="label">摘要:</view><text class="value" >内容提要内容提要内容提要</text></view><view class="row" ><view class="label">标签:</view><view class="value tabs"><view class="tab" v-for="item in 3">标签名</view></view></view><view class="copyright">声明:本图片来自用户投稿,非商业使用,用于免费学习交流,如侵犯您的权益,您可以拷贝壁纸ID举报至平台,邮箱:1056378750@qq.com,管理员将删除侵权壁纸,维护您的权益。</view></view></scroll-view></view></uni-popup><uni-popup ref="scorePopup" :is-mask-click="false"><view class="scorePopup"><view class="popHeader"><view class="title">壁纸评分</view><view class="close" @click="closeScorePopup"><uni-icons type="closeempty" size="18" color="#999"></uni-icons></view></view><view class="content"><uni-rate v-model="userScore" allowHalf /><text class="text" >{{userScore}}分</text></view><view class="footer"><button @click="submitScore" :disabled="!userScore" type="default" size="mini" plain>确认评分</button></view></view></uni-popup>

 使用ref为弹出层指定一个名称,

JS代码:

<script setup>const maskState = ref(true)const infoPopup = ref(null)const scorePopup = ref(null)const userScore = ref(0)function maskChange(){maskState.value = !maskState.value}function getInfo(){infoPopup.value.open()}function closeInfoPopup(){infoPopup.value.close()}//点击打开弹窗function clickScore(){scorePopup.value.open()}//关闭弹窗function closeScorePopup(){scorePopup.value.close()//关闭弹窗后将评分置为初始值userScore.value = 0}function submitScore(e){console.log("用户提交了评分")}
</script>

CSS代码:

<style lang="scss" scoped>.preview{width: 100%;height: 100vh;position: relative;swiper{width: 100%;height: 100%;image{width: 100%;height: 100%;}}.mask{&>view{position: absolute;left: 0;margin: auto;right: 0;color: #fff;width: fit-content;}.goBack{}.count{top:10vh;background: rgba(0,0,0,0.3);font-size: 28rpx;border-radius: 40rpx;padding: 8rpx 28rpx;backdrop-filter: blur(10rpx);}.time{font-size: 140rpx;top:calc(10vh + 80rpx);font-weight: 100;line-height: 1em;text-shadow: 0 4rpx rgba(0,0,0,0.3);}.date{font-size: 34rpx;top:calc(10vh + 230rpx);text-shadow: 0 2rpx rgba(0,0,0,0.3);}.footer{background: rgba(255,255,255,0.8);bottom:10vh;width: 65vw;height: 120rpx;border-radius: 120rpx;color:#000;display: flex;justify-content: space-around;align-items: center;box-shadow: 0 2rpx 0 rgba(0, 0, 0, 0.1);backdrop-filter: blur(20rpx);.box{display: flex;flex-direction: column;align-items: center;justify-content: center;padding: 2rpx 12rpx;.text{font-size: 20rpx;color: $text-font-color-2;}}}}.popHeader{display: flex;justify-content: space-between;align-items: center;.title{color: $text-font-color-2;font-size: 26rpx;}.close{padding: 6rpx;}}.infoPopup{background: #fff;padding:30rpx;border-radius: 30rpx 30rpx 0 0;overflow: hidden;scroll-view{max-height: 60vh;.content{.row{display: flex;padding: 16rpx 0;font-size: 32rpx;line-height: 1.7em;.label{color:$text-font-color-3; width: 140rpx;text-align: right;font-size: 30rpx;}.value{flex:1;width: 0;}.rateBox{display: flex;align-items: center;.score{font-size: 26rpx;color:$text-font-color-2;padding-left: 10rpx;}}.tabs{display: flex;flex-wrap: wrap;.tab{border:1px solid $brand-theme-color;color: $brand-theme-color;font-size: 22rpx;padding: 10rpx 30rpx;border-radius: 40rpx;line-height: 1em;margin: 0 10rpx 10rpx 0;}}.classify{color: $brand-theme-color;}}.copyright{font-size: 28rpx;padding: 20rpx;background: #F6F6F6;color: #666;border-radius: 10rpx;margin: 20rpx 0;line-height: 1.6em;}}}}.scorePopup{background: #fff;padding: 30rpx;width: 70vw;border-radius: 30rpx;.content{padding: 30rpx 0;display: flex;align-items: center;justify-content: center;.text{color:#FFCA3E;padding-left: 10rpx;width: 80rpx;line-height: 1em;text-align: right;}}.footer{padding: 10rpx 0;display: flex;align-items: center;justify-content: center;}}}     
</style>

重要知识点:

1.控制弹出方向:<uni-popup ref="infoPopup" type="bottom"> type指定弹出的类型,bottom从底部弹出,不带type即为中间层弹出;

2.评分组件:<uni-rate v-model="userScore" allowHalf />

allowHalf允许小数点半分,比如半颗星。

效果:

http://www.lqws.cn/news/441847.html

相关文章:

  • 【python】多次重试调用ai大模型
  • FPGA基础 -- Verilog 命名事件
  • Cursor Pro取消500次请求限制,无限用的体验更好了吗?
  • 【vim】通过vim编辑器打开、修改、退出配置文件
  • 新生活的开启:从 Trae AI 离开后的三个月
  • 【研发工具】.Net创建多项目模板(Visual Studio)
  • 轻量化社交管理方案:Skout与云手机的巧妙搭配
  • 暑期前端训练day1
  • SpringBoot扩展——应用Web Service!
  • 【 感知集群】大规模分布式基础设施的AI赋能蓝图
  • 深度学习之目标检测YOLO简介和YOLO v1模型算法流程详解说明(超详细理论篇)
  • Redis
  • 动态规划算法思路详解
  • 【高录用】2025年数字金融,大数据与商业管理国际会议 (DFBBM 2025)
  • 蚀刻效果解释
  • LeetCode | 一文弄懂树:定义、原理、应用与题型分类
  • SpringBoot新闻项目学习day3--后台权限的增删改查以及权限管理分配
  • 算法导论第十九章 并行算法:解锁计算新维度
  • Oracle 数据库性能优化之重做日志(redo)
  • 刘波卸任OPPO法定代表人、经理等职务,段要辉“接棒”
  • FPGA基础 -- Verilog 禁止语句
  • django rest_framework 自定义403 Forbidden错误页面
  • NetworkManager介绍与用法
  • 【Bluedroid】蓝牙启动之 btif_init_ok 流程源码解析
  • 二叉树基本学习
  • “开放原子园区行”太原站:openKylin以开源之力,赋能产业发展
  • Go 运维巡检系统(opsxj)开发与实践
  • 01.线性代数是如何将复杂的数据结构转化为可计算的数学问题,这个过程是如何进行的
  • 前端跨域解决方案(5):websocket
  • SQL注入安全研究