uniapp定义new plus.nativeObj.View实现APP端全局弹窗

news/2024/11/29 2:43:52/

为什么要用new plus.nativeObj.View在APP端实现弹窗?因为uni.showModal在APP端太难看了。

AppPopupView弹窗函数参数定义

参数一:弹窗信息(所有属性可不填,会有默认值)

1.title:"", //标题

2.content:"", //内容

3.confirmBoxColor:"", //确认按钮背景色

4.cancelText:"", //取消按钮文字

5.confirmText:" //确认按钮文字"

6.showCancel: false, // 是否显示取消按钮 是:true(默认) 否:false

7.maskClick: true // 是否允许点击遮罩层关闭弹窗 是:true 否:false(默认)

参数二(cd1):点击确认按钮执行逻辑,

参数三(cd2):点击取消按钮执行逻辑。

/utils/AppPopupView.js 定义弹窗文件

export default AppPopupViewfunction AppPopupView({title = '提示',content = '',confirmBoxColor = '#41a863',cancelText = "取消",confirmText = "确认",showCancel = true,maskClick = false,
} = {}, cd1, cd2) {let screenWidth = plus.screen.resolutionWidthlet screenHeight = plus.screen.resolutionHeightconst popupViewWidth = screenWidth * 0.7const popupViewHeight = 80 + 20 + 20 + 90 + 10const viewContentPadding = 20const viewContentWidth = parseInt(popupViewWidth - (viewContentPadding * 2))let maskLayer = new plus.nativeObj.View('maskLayer', {top: '0px',left: '0px',height: '100%',width: '100%',backgroundColor: 'rgba(0,0,0,0.2)'})let popupViewContentList = [{tag: 'font',id: 'title',text: title,textStyles: {size: '18px',color: "#333",weight: "bold",whiteSpace: "normal"},position: {top: '55px',left: viewContentPadding + "px",width: viewContentWidth + "px",height: "30px",}}]popupViewContentList.push({tag: 'font',id: 'content',text: content || '确认要操作吗?',textStyles: {size: '14px',color: "#666",lineSpacing: "50%",align: "left"},position: {top: "100px",left: viewContentPadding + "px",width: viewContentWidth + "px",height: "18px",}});if (showCancel === true) { // 添加取消按钮popupViewContentList.push({tag: 'rect',id: 'cancelBox',rectStyles: {radius: "3px",borderColor: "#f1f1f1",borderWidth: "1px",},position: {bottom: viewContentPadding + 'px',left: viewContentPadding + "px",width: (viewContentWidth - viewContentPadding) / 2 + "px",height: "30px",}})popupViewContentList.push({tag: 'font',id: 'cancelText',text: cancelText,textStyles: {size: '14px',color: "#666",lineSpacing: "0%",whiteSpace: "normal"},position: {bottom: viewContentPadding + 'px',left: viewContentPadding + "px",width: (viewContentWidth - viewContentPadding) / 2 + "px",height: "30px",}})}popupViewContentList.push({tag: 'rect',id: 'confirmBox',rectStyles: {radius: "3px",color: confirmBoxColor,},position: {bottom: viewContentPadding + 'px',left: ((viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2) + "px",width: (viewContentWidth - viewContentPadding) / 2 + "px",height: "30px",}})popupViewContentList.push({tag: 'font',id: 'confirmText',text: confirmText || '确认',textStyles: {size: '14px',color: "#FFF",lineSpacing: "0%",whiteSpace: "normal"},position: {bottom: viewContentPadding + 'px',left: ((viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2) + "px",width: (viewContentWidth - viewContentPadding) / 2 + "px",height: "30px",}})if (showCancel === false) { // 如果只显示确认按钮需要重新设置按钮的width和leftfor (let i = 0; i < popupViewContentList.length; i++) {let item = popupViewContentList[i]if (item.id === 'confirmBox' || item.id === 'confirmText') {item.position.left = viewContentPadding + "px"item.position.width = viewContentWidth + "px"}}}let popupView = new plus.nativeObj.View("popupView", { //创建底部图标菜单tag: "rect",top: (screenHeight - popupViewHeight) / 2 + "px",left: '15%',height: popupViewHeight + "px",width: "70%"})popupView.drawRect({color: "#FFFFFF",radius: "20px"}, {top: "40px",height: popupViewHeight - 40 + "px",})popupView.addEventListener("click", e => {let maxTop = popupViewHeight - viewContentPaddinglet maxLeft = popupViewWidth - viewContentPaddinglet buttonWidth = (viewContentWidth - viewContentPadding) / 2if (e.clientY > maxTop - 30 && e.clientY < maxTop) {let maxTop = popupViewHeight - viewContentPadding;let maxLeft = popupViewWidth - viewContentPadding;let buttonWidth = (viewContentWidth - viewContentPadding) / 2;if (showCancel) {if (e.clientY > maxTop - 30 && e.clientY < maxTop) {if (e.clientX > viewContentPadding && e.clientX < maxLeft - buttonWidth -viewContentPadding) {// console.log("取消"); maskLayer.hide()popupView.hide()cd2 && cd2()}if (e.clientX > maxLeft - buttonWidth && e.clientX < maxLeft) {// console.log("确认");maskLayer.hide()popupView.hide()cd1 && cd1()}}} else {maskLayer.hide()popupView.hide()cd1 && cd1()}}})popupView.draw(popupViewContentList)// 点击遮罩层maskLayer.addEventListener("click", function() { //处理遮罩层点击if (maskClick) {maskLayer.hide();popupView.hide();}})// 显示弹窗maskLayer.show()popupView.show()
}

在main.js挂载到全局

// #ifdef APP-PLUS
import AppPopupView from '@/utils/AppPopupView.js';
Vue.prototype.AppPopupView = AppPopupView;
// #endif

页面调用全局弹窗

<script>export default {onLoad() {// #ifdef APP-PLUS// 参数一:弹窗信息(所有属性可不填,会有默认值)let AppPopupInfo = {// title:"", //标题// content:"", //内容// confirmBoxColor:"", //确认按钮背景色// cancelText:"", //取消按钮文字// confirmText:" //确认按钮文字",  // showCancel: false, // 是否显示取消按钮 是:true(默认) 否:false// maskClick: true // 是否允许点击遮罩层关闭弹窗 是:true 否:false(默认) }// 参数二:点击确认按钮执行逻辑const affirmBtn = () => {console.log("点击了确认按钮");}// 参数三:点击取消按钮执行逻辑const cancelBtn = () => {console.log("点击了取消按钮");}this.AppPopupView(AppPopupInfo, affirmBtn, cancelBtn)// #endif},}
</script>

效果图


http://www.ppmy.cn/news/1550794.html

相关文章

Ubuntu 常用解压与压缩命令

.zip文件 unzip FileName.zip # 解压 zip DirName.zip DirName # 将DirName本身压缩 zip -r DirName.zip DirName # 压缩&#xff0c;递归处理&#xff0c;将指定目录下的所有文件和子目录一起压缩 zip DirName.zip DirName 行为&#xff1a; 只压缩 DirName 目录本身&#xff…

架构第三章:网站优化

优化启用网站压缩deflate 1.查看并启用mod_deflate ,压缩传输 查看mod_deflate&#xff1a; apachectl -M |grep deflate 如果有显示&#xff0c;则表示已启用压缩&#xff1b;如果没有显示&#xff0c;则需要手动启动deflate模块&#xff1a;vim /usr/local/httpd/conf/http…

Spring Boot英语知识网站:开发策略

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 英语知识应用网站的系统管理员可以对用户信息添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 在线学习管理 系统管理员可以对在线学习信息进行添加&#xff0c;修改&#xff0…

网络安全问题与大忌

“老三样&#xff0c;堵漏洞、做高墙、防外攻&#xff0c;防不胜防。” 日前&#xff0c;中国工程院沈昌祥院士这样概括中国信息安全的基本状况。 信息安全提了这么些年&#xff0c;究竟国内的网络如何脆弱&#xff0c;如何不堪一击&#xff0c;恐怕常人是难以想象的。公安部计…

高效实现定期Excel报表自动化:策略与工具

在数据处理与分析的日常工作中&#xff0c;定期生成Excel报表是一个常见且至关重要的任务。无论是财务、销售、人力资源还是其他领域&#xff0c;都需要根据最新数据做出及时准确的决策。然而&#xff0c;面对频繁更新的数据源和固定的分析需求&#xff0c;手动操作不仅耗时费力…

RAG数据拆分之PDF

引言RAG数据简介PDF解析方法及工具代码实现总结 二、正文内容 引言 本文将介绍如何将RAG数据拆分至PDF格式&#xff0c;并探讨PDF解析的方法和工具&#xff0c;最后提供代码示例。 RAG数据简介 RAG&#xff08;关系型属性图&#xff09;是一种用于表示实体及其关系的图数据…

UE5 纹理平铺

在ue5当中 &#xff0c;我们给一个物体 添加纹理&#xff0c;如果我们无限制的放大物体&#xff0c;纹理也会被缩放&#xff0c;只有我们设置纹理平铺 才能让物体材质看起来更细腻。 如图 如图 物体被拉伸了好几倍的同时纹理被拉伸了 数倍 为了解决这个问题 我们可以采用以下…

AWS EC2设置用户名密码登录

使用AWS EC2 设置用户名密码登录 步骤 1: 访问控制台 登录到AWS管理控制台。导航至 EC2 Dashboard。在左侧导航栏中选择 Instances。选择需要配置的实例。使用 EC2 Instance Connect 访问实例控制台。 步骤 2: 切换到 root 用户 打开终端或命令行工具&#xff0c;通过SSH连…