uniapp配置全局消息提醒

news2024/12/26 20:29:35

1.H5使用根标签插入dom的方式实现。
2.app端使用plus.nativeObj.View的方式绘制实现

  • H5端
  • app端

H5端

创建组件orderAlert.vue

<template>
  <div class="view">
    <div class="content" v-if="visible">
      <div class="message">{{ message }}</div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
		visible:false
    }
  },
  props: ['message'],
  methods: {	
	  open() {
	      this.visible = true;
	    },
	  close() {
	      this.visible = false;
		  console.log(this.visible);
	  }
	
	
  }
}
</script>
<style lang="stylus" scoped>
.content {
  position: absolute;
  top: 70rpx;
  left: 0%;
  width: 100%;
  background-color: #ea3e49;
  border-radius: 10rpx;
  color: #fff;
  opacity: 0.95;
  z-index: 1000000;

  .message {
    line-height: 50rpx;
    font-weight: 700;
    font-size: 18rpx;
    text-align: center;
  }
}
</style>

创建createDialog.js

import { createVNode, render } from 'vue';
import orderAlert from '@/components/common/orderAlert/orderAlert.vue';

export function createDialog(options) {
	console.log(options);
  // 创建 DOM 容器
  const container = document.createElement('div');
  document.getElementById('app').appendChild(container);
  // 创建组件实例
  const vnode = createVNode(orderAlert, {
    ...options,
    onClose: () => {
      // 销毁组件
      render(null, container);
      document.body.removeChild(container);
    }
  });

  // 渲染组件
  render(vnode, container);

  // 获取组件实例
  const instance = vnode.component?.proxy;
  console.log(instance);
  // 返回组件实例以调用 open 方法
  instance.open();

  setTimeout(()=>{
	 instance.close() 
  },3000)
  
  return instance;
}


全局调用
import {
createDialog
} from “@/utils/createDialog.js”

createDialog({
	message: 'hello'
})

app端

创建nativePanel.js

let nativePanel = null;

/**
 * 显示顶部悬浮消息
 * @param {string} message - 消息内容
 * @param {object} options - 配置选项
 * options.backgroundColor: 背景颜色 (默认: #ea3e49)
 * options.textColor: 文字颜色 (默认: #ffffff)
 * options.fontSize: 文字大小 (默认: 18rpx)
 * options.duration: 自动隐藏时间 (默认: 2000ms)
 */
export function showNativePanel(message, options = {}) {
  const {
    backgroundColor = "#ea3e49",
    textColor = "#ffffff",
    fontSize = "18px",
    duration = 2000,
  } = options;

  // 将 rpx 转换为 px(假设屏幕宽度为 750rpx)
  const rpxToPx = (value) => (value / 750) * plus.screen.resolutionWidth;

  const styles = {
    top: `${rpxToPx(70)}px`,
    left: "0px",
    width: `${plus.screen.resolutionWidth}px`,
    height: `${rpxToPx(100)}px`,
  };

  if (!nativePanel) {
    // 创建原生 View
    nativePanel = new plus.nativeObj.View("nativePanel", {
      top: styles.top,
      left: styles.left,
      width: styles.width,
      height: styles.height,
    });

    // 绘制背景矩形
    nativePanel.drawRect({
      color: backgroundColor,
      radius: `${rpxToPx(10)}px`,
    });

    // 绘制文字
    nativePanel.drawText(
      message,
      {
        top: "0px",
        left: "0px",
        width: styles.width,
        height: styles.height,
      },
      {
        size: fontSize,
        color: textColor,
        align: "center",
        verticalAlign: "middle",
        weight: "bold",
      }
    );

    // 显示面板
    nativePanel.show();

    // 自动隐藏
    setTimeout(() => {
      hideNativePanel();
    }, duration);
  } else {
    // 更新面板内容
    nativePanel.draw([
      {
        tag: "rect",
        color: backgroundColor,
        rectStyles: { radius: `${rpxToPx(10)}px` },
        position: {
          top: "0px",
          left: "0px",
          width: styles.width,
          height: styles.height,
        },
      },
      {
        tag: "font",
        text: message,
        textStyles: {
          size: fontSize,
          color: textColor,
          align: "center",
          verticalAlign: "middle",
          weight: "bold",
        },
        position: {
          top: "0px",
          left: "0px",
          width: styles.width,
          height: styles.height,
        },
      },
    ]);

    nativePanel.show();

    // 自动隐藏
    setTimeout(() => {
      hideNativePanel();
    }, duration);
  }
}

/**
 * 隐藏顶部悬浮面板
 */
export function hideNativePanel() {
  if (nativePanel) {
    nativePanel.hide();
  }
}

全局调用

	import { showNativePanel, hideNativePanel } from "@/utils/nativePanel.js";

showNativePanel('消息消息消息消息', {
	backgroundColor: "#ea3e49",
	textColor: "#ffffff",
	fontSize: "18px",
	duration: 3000, // 显示 3 秒
});

//主动隐藏
hideNativePanel();

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

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

相关文章

鸿蒙开发-HMS Kit能力集(地图服务、华为支付服务)

地图服务 Map Kit&#xff08;地图服务&#xff09;是鸿蒙生态下的一个地图服务&#xff0c;为开发者提供强大而便捷的地图能力&#xff0c;助力全球开发者实现个性化地图呈现、地图搜索和路线规划等功能&#xff0c;轻松完成地图构建工作。 Map Kit提供了千万级别的 Poi&…

【四轴】基于IIC通信读写MPU6050寄存器

1. 基本原理 在这篇【四轴】软件IIC通信的实现 – Dukis Blog博客中&#xff0c;我介绍了软件IIC的实现方式。而MPU6050&#xff0c;正是一种通过IIC进行通信的传感器外设。 1.1 什么是MPU6050 MPU6050 是 InvenSense 公司推出的一款6 轴惯性传感器模块&#xff0c;广泛应用于姿…

arkTS:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage)

arkUI&#xff1a;使用ArkUI实现用户信息的持久化管理与自动填充&#xff08;PersistentStorage&#xff09; 1 主要内容说明2 例子2.1 登录页2.1.1登陆页的相关说明2.1.1.1 持久化存储的初始化2.1.1.2 输入框2.1.1.3 记住密码选项2.1.1.4 登录按钮的逻辑2.1.1.5 注册跳转 2.1.…

基于SpringBoot+Vue的美妆购物网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【SpringBoot+Vue】x-admin管理系统跟做

技术栈 前端技术说明Vue前端框架Vuex全局状态管理框架ElementUI前端UI框架Axios前端HTTP框架vue-element-admin项目脚手架 后端技术说明SpringBoot容器MVC框架MyBatisORM框架MyBatis-plusMyBatis增强工具Redis非关系型数据库 数据库准备 SET NAMES utf8mb4; SET FOREIGN_KE…

【Docker】Docker配置远程访问

配置Docker的远程访问&#xff0c;你需要按照以下步骤进行操作&#xff1a; 1. 在Docker宿主机上配置Docker守护进程监听TCP端口 Docker守护进程默认只监听UNIX套接字&#xff0c;要实现远程访问&#xff0c;需要修改配置以监听TCP端口。 ‌方法一&#xff1a;修改Docker服务…

LeetCode hot100(自用背诵、部分题目、非最优解)

点击题目可以跳转到LeetCode 哈希 两数之和 public int[] twoSum(int[] nums, int target) {int lengthnums.length;int[] ans new int[2];for (int i 0; i <length-1 ; i) {for (int j i1; j < length; j) {if(nums[i]nums[j]target){ans[0]i;ans[1]j;}}}return an…

Android -- 简易音乐播放器

Android – 简易音乐播放器 播放器功能&#xff1a;* 1. 播放模式&#xff1a;单曲、列表循环、列表随机&#xff1b;* 2. 后台播放&#xff08;单例模式&#xff09;&#xff1b;* 3. 多位置同步状态回调&#xff1b;处理模块&#xff1a;* 1. 提取文件信息&#xff1a;音频文…

基础Web安全|SQL注入

基础Web安全 URI Uniform Resource Identifier&#xff0c;统一资源标识符&#xff0c;用来唯一的标识一个资源。 URL Uniform Resource Locator&#xff0c;统一资源定位器&#xff0c;一种具体的URI&#xff0c;可以标识一个资源&#xff0c;并且指明了如何定位这个资源…

ESG研究报告白皮书与ESG治理报告合集(2020-2023年)

一.资料范围&#xff1a;&#xff08;1&#xff09;ESG白皮书及指南;&#xff08;2&#xff09;ESG研究报告,&#xff08;3&#xff09;ESG治理报告分析&#xff08;4&#xff09;上市公司ESG报告&#xff08;知名企业&#xff09; 二、资料用途&#xff1a;可以分析研究企业E…

WPF指示灯的实现方式

WPF指示灯的实现方式 样式 XAML <Button x:Name"Btn1" Width"25" Height"25" Grid.Row"0" Grid.Column"1" Margin"10 5 5 5 "><Button.Template><ControlTemplate TargetType"Button"…

初识QT第一天

思维导图 利用Qt尝试做出原神登陆界面 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit# 封装原神窗口类 class Genshin(QWidget):# 构造函数def __init__(self):# 初始化父类…

【Linux】线程池设计 + 策略模式

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 线程池 1-1 ⽇志与策略模式1-2 线程池设计1-3 线程安全的单例模式1-3-1 什么是单例模式1-3-2 单例模式的特点1-3-3 饿汉实现⽅式和懒汉实现⽅式1-3-4 饿汉…

vim插件管理器vim-plug替代vim-bundle

文章目录 vim-plug与vim-bundle对比vim-plug安装vim-plug管理安装插件相关文章 vim-plug与vim-bundle对比 vim-plug 和 vim-bundle 都是 Vim 的插件管理器&#xff0c;但它们有一些关键的区别。以下是两者的主要对比&#xff1a; 易用性和简洁性 vim-plug: 易用性: vim-plug …

107.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…

【代码随想录day48】【C++复健】739. 每日温度;496.下一个更大元素 I;503.下一个更大元素II

739. 每日温度 一顿操作猛如虎&#xff0c;一看击败5%。一眼顶针&#xff0c;鉴定为在存栈的时候把值和下标一起存了&#xff0c;所以导致了问题。 class Solution { public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<vector<…

vscode + conda + qt联合开发

安装vscode 安装conda 清华大学开源软件镜像(Anaconda下载)_清华大学镜像-CSDN博客 conda create新建一个环境&#xff0c;激活这个环境&#xff0c;然后安装pyside6 pip install pyside6 -i https://pypi.tuna.tsinghua.edu.cn/simple 安装成功后输入 pip list查看是否安装…

第十一篇 绘图matplotlib.pyplot的使用

文章目录 摘要安装方法入门案例使用plt绘图使用ax绘图plt.figure参数plot参数案例一 绘制红色实心的点状图案例二 绘制红色的破折线图案例三 绘制两条线颜色总结设置标题、轴名称、图例使用plt实现绘图使用ax实现绘图legend()中loc设置刻度plt自定义刻度ax自定义刻度plt.title …

Unity-Particle System属性介绍(一)基本属性

什么是ParticleSystem 粒子系统是Unity中用于模拟大量粒子的行为的组件。每个粒子都有一个生命周期&#xff0c;包括出生、运动、颜色变化、大小变化和死亡等。粒子系统可以用来创建烟雾、火焰、水、雨、雪、尘埃、闪电和其他各种视觉效果。 开始 在项目文件下创建一个Vfx文件…

计算机的错误计算(一百七十二)

摘要 探讨 MATLAB 对于算式 的计算误差。 例1. 在 MATLAB 中计算 的值。 直接贴图吧&#xff1a; 这样&#xff0c;MATLAB 的输出中只有3位正确数字&#xff0c;有效数字的错误率为 (16-3)/16 81.25% . 因为16位的正确输出为 0.2971242332737277e-18&#xff08;ISReals…