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

为什么要用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.mzph.cn/bicheng/61998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全——SpringBoot配置文件明文加密

一、前言 在日常开发中&#xff0c;项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件 中。 如果这些信息以明文的方式存储&#xff0c;你的电脑被拿去修理&#xff0c;就会容易泄露&#xff0c;一旦被其他人获取到…

Linux系统编程之进程基础知识

概述 在Linux系统中&#xff0c;进程是指一个正在运行的程序实例。每个进程都有一个唯一的进程标识符&#xff0c;即PID&#xff0c;操作系统通过这个PID来唯一识别和管理各个进程。进程不仅仅是程序代码的运行实例&#xff0c;它还包含了程序运行时所需的各种资源&#xff0c;…

2024智能机器人与自动控制国际学术会议 (IRAC 2024)

主办&#xff0c;承办&#xff0c;支持单位 会议官网 www.icirac.org 大会时间&#xff1a;2024年11月29-12月1日 大会简介 2024智能机器人与自动控制国际学术会议 &#xff08;IRAC 2024&#xff09;由华南理工大学主办&#xff0c;会议将于2024年11月29日-12月1日在中国广…

【Pytest+Yaml+Allure】实现接口自动化测试框架

一、框架思想 requestsyamlpytestallure实现接口自动化框架。结合数据驱动和分层思想&#xff0c;将代码与数据分离&#xff0c;易维护&#xff0c;易上手。使用yaml编写编写测试用例&#xff0c;利用requests库发送请求&#xff0c;使用pytest管理用例&#xff0c;allure生成…

利用 Jsoup 进行高效 Web 抓取与 HTML 处理

Jsoup 是一款 Java 的 HTML 解析器&#xff0c;可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API&#xff0c;可通过 DOM&#xff0c;CSS 以及类似于 JQuery 的操作方法来取出和操作数据。 官网&#xff1a;https://jsoup.org/ 中文文档&#xff1a;Jsou…

蓝桥杯不知道叫什么题目

小蓝有一个整数&#xff0c;初始值为1&#xff0c;他可以花费一些代价对这个整数进行变换。 小蓝可以花贵1的代价将教数增加1。 小蓝可以花费3的代价将整数增加一个值,这个值是整数的数位中最大的那个(1到9) .小蓝可以花费10的代价将整数变为原来的2倍, 例如&#xff0c;如果整…

【JavaEE初阶】枫叶经霜艳,梅花透雪香-计算机是如何运行的?

本篇博客给大家带来的是与计算机相关的知识点, 包括:计算机的组成, 指令, 进程(重点). 文章专栏: JavaEE初阶 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 1. 计算机的组成 1.1 计算机的发展史 计算…

SuperMap Objects组件式GIS开发技术浅析

引言 随着GIS应用领域的扩展&#xff0c;GIS开发工作日显重要。一般地&#xff0c;从平台和模式上划分&#xff0c;GIS二次开发主要有三种实现方式&#xff1a;独立开发、单纯二次开发和集成二次开发。上述的GIS应用开发方式各有利弊&#xff0c;其中集成二次开发既可以充分利…

Linux网络——NAT/代理服务器

一.NAT技术 1.NAT IP转换 之前我们讨论了, IPv4 协议中, IP 地址数量不充足的问题&#xff0c;NAT 技术就是当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能。 NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是一种将私有 IP 和全局IP 相互转化的技术方法: 很…

使用八爪鱼爬虫抓取汽车网站数据,分析舆情数据

我是做汽车行业的&#xff0c;可以用八爪鱼爬虫抓取汽车之家和微博上的汽车文章内容&#xff0c;分析各种电动汽车口碑数据。 之前&#xff0c;我写过很多Python网络爬虫的案例&#xff0c;使用requests、selenium等技术采集数据&#xff0c;这次尝试去采集小米SU7在微博、汽车…

C语言笔记(自定义类型:结构体、枚举、联合体 )

前言 本文对自定义类型的结构体创建、使用、结构体的存储方式和对齐方式&#xff0c;枚举的定义、使用方式以及联合体的定义、使用和存储方式展开叙述&#xff0c;如有错误&#xff0c;请各位指正。 目录 前言 1 结构体 1.1 结构体的声明 1.2 结构体的自引用 1.3 结构体变…

【消息序列】详解(6):深入探讨缓冲区管理与流量控制机制

目录 一、概述 1.1. 缓冲区管理的重要性 1.2. 实现方式 1.2.1. HCI_Read_Buffer_Size 命令 1.2.2. HCI_Number_Of_Completed_Packets 事件 1.2.3. HCI_Set_Controller_To_Host_Flow_Control 命令 1.2.4. HCI_Host_Buffer_Size 命令 1.2.5. HCI_Host_Number_Of_Complete…

Element Plus的快速入门

一、什么是Element Plus Element : 是饿了么团队研发的&#xff0c;基于Vue3&#xff0c;面向设计师和开发者的组件库。 组件&#xff1a;组成网页的部分&#xff0c;例如超链接&#xff0c;按钮&#xff0c;图片&#xff0c;表格&#xff0c;表单&#xff0c;分页条等等。 …

健身房小程序服务渠道开展

健身不单单是锻炼身体、保持身材&#xff0c;也是一种社交方式&#xff0c;城市里门店不少&#xff0c;每家都有一定流量和老客&#xff0c;但仅靠传统线下拉客/自然流量前往和线上朋友圈、短视频发硬广等方式还不够。 商家需要找到更多潜在目标客户&#xff0c;而消费者也对门…

Docker--通过Docker容器创建一个Web服务器

Web服务器 Web服务器&#xff0c;一般指网站服务器&#xff0c;是驻留于因特网上某种类型计算机的程序。 Web服务器可以向浏览器等Web客户端提供文档&#xff0c;也可以放置网站文件以供全世界浏览&#xff0c;或放置数据文件以供全世界下载。 Web服务器的主要功能是提供网上…

HTMLCSS:3D金字塔加载动画

效果演示 这段代码通过CSS3的3D变换和动画功能&#xff0c;创建了一个旋转的金字塔加载动画&#xff0c;每个侧面都有不同的颜色渐变&#xff0c;底部还有一个模糊的阴影效果&#xff0c;增加了视觉的立体感。 HTML <div class"pyramid-loader"><div cl…

selinux及防火墙

selinux说明 SELinux 是 Security-Enhanced Linux 的缩写&#xff0c;意思是安全强化的 linux 。 SELinux 主要由美国国家安全局&#xff08; NSA &#xff09;开发&#xff0c;当初开发的目的是为了避免资源的误用。 httpd进程标签&#xff08;/usr/share/nginx/html &#…

vue 富文本图片如何拖拽

在Vue项目中实现富文本编辑器&#xff08;如vue-quill-editor&#xff09;的图片拖拽功能&#xff0c;需要结合Quill.js及其相关插件进行配置 安装必要的依赖包&#xff1a; 你需要安装vue-quill-editor作为富文本编辑器的基础组件。为了支持图片拖拽功能&#xff0c;你还需要…

秋招面试基础总结,Java八股文基础(串联知识),四万字大全

目录 值传递和引用传递 静态变量和静态代码块的执行顺序 Java​​​​​​​集合的框架&#xff0c;Set,HashSet,LinkedHashSet这三个底层是什么 多线程篇 Java实现多线程的方式 假设一个线程池&#xff0c;核心线程数是2&#xff0c;最大线程数是3&#xff0c;阻塞队列是4…

MySQL原理简介—12.MySQL主从同步

大纲 1.异步复制为MySQL搭建一套主从复制架构 2.半同步复制为MySQL搭建一套主从复制架构 3.GTID为MySQL搭建一套主从复制架构 4.并行复制降低主从同步延迟或强制读主库 1.异步复制为MySQL搭建一套主从复制架构 (1)MySQL主从复制的原理 (2)搭建主从复制架构的配置 (1)MySQ…