【uniapp】app端压窗屏设计

news2024/11/25 11:54:57

一、前言

众所周知,在app端中,普通的组件是无法覆盖原生组件,即使是官方提供的cover-view也只是在实体内容中覆盖一些原生的如地图。但是无法覆盖底部的tabbar。

二、了解层级关系

实际上app端每点击一次的层级是这样的,我们可以利用简单粗暴的方法,利用app端的层级关系,设置层级为透明即可,顺便再兼容一下h5端
在这里插入图片描述

三、配置路由关系

在pages.json中进行配置,设置页面为无样式,背景透明即可

{
      "path": "components/popup/index",
      "style": {
        "navigationStyle": "custom",
        "backgroundColor": "transparent",
        "app-plus": {
          "animationType": "fade-in",
          "background": "transparent",
          "popGesture": "none"
        }
      }
    },

四、核心组件代码

components/popup/index中正常去写样式逻辑,全屏,如果是h5端就正常弹窗,如果非h5端就做跳转

<template>
  <view class="mask" @click="msckClose" v-show="isshow">
    <view class="content">
      <view v-if="options.title" class="title">{{ options.title }}</view>
      <component :is="components[options.slot]" />
    </view>
  </view>
</template>
<script lang="ts" setup>
import { ref, defineExpose, provide, markRaw } from 'vue';

import { onLoad } from '@dcloudio/uni-app';
import { objectToQueryString } from '@/utils/tool';
import option from './option';
const isshow = ref(false); // 是否显示
const options = ref<optionType>({
  title: '',
  slot: '',
  maskCloseAble: true,
}); // 配置
const components: any = ref(option);
interface optionType {
  title?: string; // 名称
  slot: string; // 组件名称
  maskCloseAble?: boolean | string; // 背景是否可以点击关闭
}

const initdata = (option: any) => {
  if (option?.title) {
    options.value = option;
  }
  if (option?.type == 'app') {
    isshow.value = true;
  }
};
onLoad((option) => {
  initdata(option);
});
// 打开弹窗
const show = (options: optionType) => {
  // #ifndef H5
  uni.navigateTo({
    url: `/components/popup/index?type=app&${objectToQueryString(options)}`,
  });
  // #endif

  // #ifdef H5
  initdata({
    type: 'app',
    ...options,
  });
  // #endif
};
// 关闭弹窗
const close = () => {
  // #ifndef H5
  uni.navigateBack();
  // #endif

  // #ifdef H5
  isshow.value = false;
  // #endif
};
// 背景是否可以关闭
const msckClose = () => {
  if (JSON.parse(options.value.maskCloseAble as string)) {
    close();
  }
};
provide('popupClose', close);
defineExpose({
  show,
  close,
});
</script>
<style lang="css">
page {
  background: transparent;
}
</style>
<style lang="scss" scoped>
.mask {
  position: fixed;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  /* #ifndef APP-NVUE */
  display: flex;
  /* #endif */
  justify-content: center;
  align-items: center;
  background-color: rgba(0, 0, 0, 0.4);
  z-index: 999;
  .content {
    width: 560rpx;
    min-height: 340rpx;
    background: #ffffff;
    box-shadow: 0rpx -6rpx 37rpx 0rpx rgba(219, 218, 218, 0.25);
    border-radius: 37rpx;
  }
  .title {
    font-size: 32rpx;
    font-weight: 600;
    color: #10275a;
    text-align: center;
    margin: 60rpx auto 20rpx;
  }
}
</style>

我们这里预留了一个动态的component,建立一个popup/option.ts,这样所有的弹窗内容就可以定制化的统一管理

import { markRaw } from 'vue';
import loginOut from './loginOut/index.vue';
import searchTip from './searchTip/index.vue';
export default {
  loginOut: markRaw(loginOut),
  searchTip: markRaw(searchTip),
};

不要忽略:使用时,切记copy一个popup实例,避免直接去引入弹窗index组件导致逻辑互相影响,因为我们调用了组件实例和跳转,可能会冲突,或者你像我这样简单一点复制一个popup,重新命名,重新引入,我这里是popup-app.vue

五、调用案例

<template>
	<Popup ref="popup"></Popup>
</template>
<script setup lang="ts">
import Popup from '@/components/qc-popup/popup-app.vue';
const loginOut = () => {
	popup.value.show({
	  title: '退出登录',
	  slot: 'loginOut',
	  maskCloseAble: false,
	});
};
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/571257.html

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

相关文章

spring security oauth2.0-authorization code

Oauth2.0 spring security 估计很多人都在用,里面有几种安全模式值得大家去摸索. oauth2.0 是一种授权鉴权的机制,主要是用来颁发令牌,验证令牌,刷新令牌. OAuth2.0是OAuth协议的延续版本&#xff0c;但不向前兼容OAuth 1.0(即完全废止了OAuth1.0). 2012年10月&#xff0c…

泛微e-cology9 SQL注入漏洞复现(QVD-2023-5012)

1、产品简介 泛微协同管理应用平台e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。 2、漏洞概述 泛微e-cology9中存在SQL注入漏洞&#xff0c;未…

《数据万象带你玩转视图场景》第三期:图片极智压缩

前言 在本系列的第一期我们介绍了图片 AVIF 压缩&#xff0c;作为最前沿的压缩技术&#xff0c;AVIF 确实有着无数的优点。但时代的进步是循序渐进的&#xff0c;在一些较老的终端或设备上&#xff0c;可能短时间内确实无法支持 AVIF 格式&#xff0c;那如何能让这部分业务享受…

【毕业季征文】你们的未来可期

还有大约一个月即将又有一批大学的学弟学妹们离开学校,走向社会,走上工作岗位。你们是否是既兴奋又迷茫呢?,我相信更多的是憧憬吧。回想我大学毕业那是10年前的事情了,现在的感受是那么遥远,仿佛自己从来都没上过大学。可能是在大学期间过的太过艰苦,以至于不想保留那一…

TDengine客户端连接

目录 TDengine-clinet 下载网址 运行软件 连接默认TD 连接指定TD TDengineGUI 下载地址 使用 连接&#xff1a;端口默认是6041&#xff1b; sql查询时需要制定 库名 TDengine-clinet 下载网址 连接器 | TDengine 文档 | 涛思数据 默认安装即可; 运行软件 连接默认TD…

机器学习期末复习 线性模型

1.线性回归&#xff0c;对数几率回归&#xff0c;线性判别分析是分类还是回归任务&#xff1f;是有监督的学习还是无监督的学习&#xff1f; 有监督学习和无监督学习 解释&#xff1a; 线性模型要做的有两类任务&#xff1a;分类任务、回归任务 分类的核心就是求出一条直线w…

JavaScript之BOM(上)

Window对象 1.BOM(浏览器对象模型) 2.定时器-延时函数 3.JS执行机制 4.location对象 5.navigator对象 6.history对象 一.BOM(浏览器对象模型) 1.BOM(Browser Object Model)是浏览器对象模型 2.window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象 3.像do…

Facebook速推帖子和Facebook广告有什么区别

Facebook速推帖子和Facebook广告是在Facebook平台上推广内容的两种不同方式。虽然它们都可以帮助我们增加品牌曝光和吸引目标受众&#xff0c;但它们在运作方式和效果上有一些区别。让我们来详细了解一下它们之间的差异。 1.内容形式和展示方式&#xff1a; Facebook速推帖子&…

基于北斗+LoRa的落水报警定位方案一 -实现无人区,弱信号地区人员 位置安全监控

人员安全一直是企业管理的重中之重。无人区工地是一个安全事故多发的地方&#xff0c;在施工环境复杂且危险的情况下&#xff0c;工地人员位置监控成为管理工作中的一个难点&#xff0c;一直以来采用粗放的方式&#xff0c;现有的工地项目存在施工人员实时督查难等问题&#xf…

【问题记录】postgreSQL使用默认密码导致kdevtmpfsi挖矿病毒注入

起因 postgreSQL我做错了这几件事情 开启了全部IP登陆权限postgreSQL用的是默认用户名和密码用户postgres也没有设置密码&#xff0c;直接用su - postgres就能登陆 不知道是什么原理&#xff0c;反正服务器被侵入&#xff0c;并且注入了病毒文件 1. 基本信息排查 linux服务器…

大麦链接源码 大麦一键生成订单页面

8.4最新版源码 更新了大麦模版链接 更新了大麦订单页面一键生成

《Web安全基础》01. 基础知识

基础 1&#xff1a;概念名词1.1&#xff1a;域名1.2&#xff1a;DNS1.3&#xff1a;网站开发语言1.4&#xff1a;后门1.5&#xff1a;Web1.6&#xff1a;Web 相关安全漏洞 2&#xff1a;数据包2.1&#xff1a;HTTP2.2&#xff1a;HTTPS2.3&#xff1a;请求数据包2.3.1&#xff…

Linux Centos7 jar包方式安装Jenkins服务

1、本文是在VM虚拟机下安装的Centos7&#xff0c;这一步不赘述&#xff0c;有很多教程。 2、配置好静态IP&#xff0c;可参考Linux配置静态IP地址_cylemon的博客-CSDN博客 3、本文是通过XShell连接linux来操作linux系统的。配置JDK1.8及以上环境。先查看一下当前环境是否已存…

三、JavaWeb从入门到熟练

一、JavaWeb概述 Java Web&#xff0c;是用Java技术来解决相关web互联网领域的技术栈。web包括&#xff1a;web服务端和web客户端两部分。Java在客户端的应用有Java Applet&#xff0c;不过使用得很少&#xff0c;Java在服务器端的应用非常的丰富&#xff0c;比如Servlet&…

chatgpt赋能python:Python做聊天程序:打造智能交流

Python 做聊天程序&#xff1a;打造智能交流 Python 是一种易于学习、灵活性强、最近几年得到广泛应用的编程语言。在当今数字化时代&#xff0c;即便是日常生活中我们都需要与人交流&#xff0c;但人们社交媒体的繁荣已经印证了人们对在线交流工具的需求。以下将对 Python 如…

澳洲学生用ChatGPT代写?澳洲多所高校使用全新反击工具检测

朋友们听句劝 ChatGPT可太危险了 ChatGPT有多火&#xff1f;据2月1日瑞银发布的一项研究报告显示&#xff0c;仅仅发布两个月&#xff0c;ChatGPT月活跃用户已达1亿&#xff0c;这是历史上增长速度最快的应用。要知道达成1亿用户的时间&#xff0c;Instagram用了2.5年&#xf…

【013】C++数组之一维数值数组和二维数值数组

一维数值数组和二维数值数组 引言一、一维数值数组1.1、概念1.2、一维数值数组的定义1.3、一维数值数组的初始化1.4、一维数值数组的元素操作1.5、使用示例 二、二维数值数组2.1、概述2.2、二维数值数组的初始化2.3、二维数值数组的元素操作2.4、使用示例 总结 引言 &#x1f4…

​LeetCode解法汇总1091. 二进制矩阵中的最短路径

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给你一个 n x n 的二进制矩阵 grid 中&#xff0c;返回矩阵中最短 畅通路径 的长…

修改优美移动端中间的老师的轮播图

副标题在高级内容那&#xff0c;如果缩略图上传不上去。那就是改一下图片名字&#xff0c;多刷新几次试试

Java程序设计入门教程--整数类型

举例 int x123; //指定变量x为int型&#xff0c;且赋初值为123 byte b8; //指定变量b为byte型&#xff0c;且赋初值为8 short s10; //指定变量s为short型&#xff0c;且赋初值为10 long y123L,z123l; //指定变量y,z为long型&#xff0c;且分别赋初值为123 示例代…