Tauri应用开发(三):自定义拖拽区域

news2024/11/26 9:34:34

1. 自定义拖拽:data-tauri-drag-region

tauri默认的顶部可拖拽,有时候我们不需要这个拖拽,或者需要自定义拖拽区域时,就需要通过tauri提供的data-tauri-drag-region属性来自定义拖拽区。
![在这里插入图片描述](https://img-blog.csdnimg.cn/de155809350d4f3ba39cc4078b7e593d.png

接下来我们就实现一个美化过后的拖拽区。

2. 定义Header组件

我们定义一个Vue组件,名为Header,添加如下代码,需要注意的,在需要拖拽的区域需要添加属性data-tauri-drag-region,但仅仅添加这个属性是不够的,因为当div嵌套多层时,data-tauri-drag-region是无效的,解决办法是在递归获取所有子元素,添加拖拽属性,相关代码请看下文的第4小结。

<template>
    <div class="box">
        <div class="header" data-tauri-drag-region>
            <el-page-header :icon="null">
                <template #title>
                    <div @click="$router.push('/')" class="flex-center">
                        <el-avatar class="image ml20" src="/vite.svg"/>
                        <el-link :underline="false" class="title">
                            你的Logo
                        </el-link>
                    </div>
                </template>
                <template #content>
                    <el-row>
                        <el-col :span="10" none-drag-region>
                            <div style="width: 400px">
                                <el-button icon="house" circle
                                           @click="this.$router.push('/')"/>
                                <el-button icon="ArrowLeft" circle
                                           title="后退"/>
                                <el-button icon="ArrowRight" circle
                                           title="前进"/>
                                <el-button icon="refresh" circle title="刷新"/>
                                <el-button icon="setting" circle
                                           title="设置"/>
                            </div>
                        </el-col>
                        <el-col :span="12" none-drag-region>
                            <el-input prefix-icon="search"
                                      placeholder="搜索一下"/>
                        </el-col>
                    </el-row>
                </template>
                <template #extra>
                    <div class="flex-center">
                        <el-avatar :size="30" class="" src="/vite.svg"/>
                        <div none-drag-region>
                            <el-button type="" class="mr20">
                                用户名
                            </el-button>
                        </div>
                        <div none-drag-region class="flex">
                            <el-button icon="FullScreen" circle/>
                            <el-button icon="minus" circle/>
                            <el-button icon="close" circle
                                       class="mr10"/>
                        </div>
                    </div>
                </template>
            </el-page-header>
        </div>
    </div>
</template>

<script>

export default {
  name: '',
}
</script>

<style>
</style>
<style scoped lang="scss">
.box {
  height: 60px;
  position: relative;
  user-select: none;
  background: var(--theme-color-primary, linear-gradient(135deg, #43CBFF 10%, #9708CC 100%));
}

.header {
  position: absolute;
  top: 50%;
  transform: translate(0, -50%);
  width: 100%;
  z-index: 1;

  .title {
    width: 73px;
    color: var(--theme-color-header-text, #ffffff);
  }

  .el-button {
    background: transparent;
    color: var(--theme-color-header-text, #ffffff);
    border: none;
  }

  :deep(.el-badge__content) {
    top: 3px;
    border: none;
    scale: 0.9;
  }

  :deep(.el-input__wrapper) {
    background: transparent;
    box-shadow: none;
    --el-input-text-color: var(--theme-color-header-text, #FFFFFF);
    --el-input-placeholder-color: var(--theme-color-header-placeholder, #FFFFFF);
    border: rgba(0, 0, 0, .05) solid 1px;
    color: white;
  }
}

.image {
  background: transparent;
}

</style>

在这里插入图片描述

3. 关闭tauri默认的顶部栏

由于默认的顶部栏是开启的,所以需要手动关闭。

tauri.conf.json配置文件中,启用window相关的所有配置(设置"all": true),并找到windows配置项,添加decorations:false即可。具体配置项请参考官方文档:https://tauri.app/v1/api/config

"tauri": {
  "allowList": {
    ...
    "window": {
        "all": true
      }
  }
  ...
  
  "windows": [
    {
      "decorations": false,
      ...
    }
  ]
}

在这里插入图片描述

4. 添加拖拽功能

上文提到:data-tauri-drag-region在多层级的div下是不生效的,所以我们通过递归的方式为每个子元素设置data-tauri-drag-region属性。并在不需要拖拽的元素上添加none-drag-region属性。

<script setup>
import {onMounted, getCurrentInstance} from 'vue'

const {proxy} = getCurrentInstance();

const loadTree = (parent, excludeClassNames, callback) => {
  if (parent.getAttributeNames().includes(...excludeClassNames)) {
    return;
  }
  for (let i = 0; i < parent.children.length; i++) {
    let child = parent.children[i];
    loadTree(child, excludeClassNames, callback);
  }
  if (callback) {
    callback(parent);
  }
}

onMounted(() => {
  loadTree(proxy.$el, ['none-drag-region'], (ele) => {
    ele.setAttribute("data-tauri-drag-region", "")
  })
})
</script>

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

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

相关文章

基于Python的图书信息管理系统

1引言 进入21世纪以来&#xff0c;信息技术从根本上推动了图书馆的飞速发展&#xff0c;计算机和计算机管理系统已成为图书馆进行图书管理的主要设备和系统。虽然目前很多大型的图书馆已经有一整套比较完善的管理系统&#xff0c;但是在一些中小型的图书馆中&#xff0c;大部分…

【Python 虚拟环境创建】解决遇到的问题并在vscode上测试

目录 一、前提准备 二、python虚拟环境创建 解决问题&#xff1a;‘virtualenv’/‘mkvirtualenv‘ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 解决问题&#xff1a;pycharm终端提示无法加载文件 E:\software\python_pycharm\venv\Scripts\activat…

Kuberntes云原生实战09 Kubernetes高可用安装小结

大家好,我是飘渺。 今天咱们继续更新Kubernetes云原生实战系列,本节文章是我们在安装过程中可能会遇到的问题以及解决方法。(都是我踩过的坑,你们大概率也会遇到~) 1. kubesphere平台无法使用kubectl命令行工具 问题现象 如果你给你的KubeSphere在Nginx上配置了域名访…

【2023 雷泽杯 · Misc】png的秘密

一个关于png结构的题目 一、题目 一张打不开的png文件&#xff0c;唉。 二、解题思路 少了头&#xff0c;就给他加上。我比较笨&#xff0c;还是萌新&#xff0c;采用导出16进制&#xff0c;添加后&#xff0c;010editor导入16进制。 添加之后&#xff0c;顺眼多了。然后用png…

阿里云服务器 之 mqtt服务器搭建及使用

本文主要是对mqtt的学习使用&#xff0c;其中服务器是基于阿里云服务器的mqtt功能&#xff0c;客户端使用的是mqttx软件。 一、服务器部分搭建说明 1、如果是首次使用&#xff0c;则需要经过注册与认证的步骤。 2、找到"产品与服务"-->"物联网平台"&…

DAY 60 mysql的备份与恢复

数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中&#xff0c;数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因&#xff1a; 程序错误人为操作错误运算错误磁盘故障灾难&#xff08;如火灾、地震&#xff09;和盗窃 数据库备份…

redis 高可用与优化

一、Redis高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提…

成绩管理系统

系列文章 任务28 成绩管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试读入数据浏览全部信息增加学生信息保存数据删除学生信息修改学生…

加密与解密 基础篇/win API/小端序大端序

1.1加密和解密的概念 是侧重于windows 的加密保护和解密技术 首先我们先要了解 软件逆向工程 可执行程序->反编译->源代码这就是逆向工程 接着 逆向分析技术是什么 静态调试 和动态调试 主要分为这俩类1.通过软件的执行 来分析程序 我们可以通过阅读程序的执行 或…

这个Set接口真牛逼

偶然间看到 java.util 包下的 Set 接口&#xff0c;看着好搞笑哈哈哈哈哈哈哈 包括了如下几个方法&#xff1a; 创建包含0个元素的不可修改的Set集合创建包含1个元素的不可修改的Set集合创建包含2个元素的不可修改的Set集合创建包含3个元素的不可修改的Set集合创建包含4个元素…

ROS:laser激光雷达数据格式、发送laser数据、订阅laser数据

一.激光雷达数据格式 图片来源&#xff1a;ROS-订阅与处理激光雷达scan话题_ros激光雷达数据处理_zhhao1326的博客-CSDN博客 # 测量的激光扫描角度&#xff0c;逆时针为正 # 设备坐标帧的0度面向前&#xff08;沿着X轴方向&#xff09; Header header # Header也是一…

Java学习路线(8)——面向对象基础(2)

一、static关键字 概念&#xff1a; static是静态的意思&#xff0c;可以修饰成员变量和成员方法。当修饰成员变量时&#xff0c;在内存中只存储一份&#xff0c;可以被共享访问、修改。当修饰成员方法时&#xff0c;可以被共享访问&#xff0c;也被称为公共方法。 静态成员变…

【linux网络】防火墙规则二:SNAT策略与DNAT策略

防火墙规则 一、SNAT策略1.1SANT的原理与应用1.2SNAT实验 二、DNAT策略2.1DNAT的原理与应用2.2DNAT实验 三、Linux的抓包工具tcpdump3.1补充知识 四、防火墙规则的备份和还原 一、SNAT策略 1.1SANT的原理与应用 SNAT 应用环境&#xff1a;局域网主机共享单个公网IP地址接入In…

2023.05.21 学习周报

文章目录 摘要文献阅读1.题目2.背景3.现存问题和解决方法4.方法4.1 Variational mode decomposition (VMD)4.2 Bidirectional LSTM 5.实验5.1 数据标准化5.2 评价指标5.3 实验过程及结果 6.结论和展望 优劣解距离法有限元1.求解一个简单的传热问题2.有限元如何实现 总结 摘要 …

vscode远程到服务器(包括WSL)进行GDB调试

工欲善其事必先利其器&#xff0c;这句话不容小觑&#xff0c;调试工具做的好&#xff0c;对开发工作可起到事半功倍。 本文主要讲vscode远程到服务器进行在线GDB调试手段&#xff0c;包含对WSL的远程调试&#xff0c;可以轻松对照源码进行应用程序调试。 文章目录 一、vscode…

【SpringCloud】一、认识微服务

文章目录 1、学习提纲2、和单体架构的比较3、认识微服务4、微服务技术常用框架5、SprigCloud6、服务拆分7、微服务远程调用 1、学习提纲 相比传统单体架构&#xff0c;微服务的整体架构如下图&#xff1a; 再引入日志、监控、持续集成、持续部署&#xff0c;就成了下面这个图&…

RocketMQ 的介绍和基本使用

介绍 在 RabbitMQ 的基本概念和五种模式使用示例 前半部分介绍了 MQ 的应用场景&#xff0c;以及多个 MQ 产品的对比&#xff0c;那时说到 RocketMQ 的客户端版本只有 Java , 现在 Apache RocketMQ 社区中也增加了 C NodeJS Python Go 的客户端。 RocketMQ 是阿里巴巴开源的一…

iOS正确获取图片参数深入探究及CGImageRef的使用(附源码)

一 图片参数的正确获取 先拿一张图片作为测试使用 图片参数如下&#xff1a; 图片的尺寸为&#xff1a; -宽1236个像素点 -高748个像素点 -色彩空间为RGB -描述文件为彩色LCD -带有Alpha通道 请记住这几个参数&#xff0c;待会儿我们演示如何正确获取。 将这张图片分别放在…

从零开始 Spring Boot 32:AOP II

从零开始 Spring Boot 32&#xff1a;AOP II 图源&#xff1a;简书 (jianshu.com) 之前写过一篇文章从零开始 Spring Boot 26&#xff1a;AOP - 红茶的个人站点 (icexmoon.cn)&#xff0c;讨论了AOP的基本用法&#xff0c;但那篇文章相当粗疏&#xff0c;对Spring中的AOP技术讨…

免费快速部署ChatGPT线上聊天网页:ChatGPT API + Github + Railway

1、使用工具 &#xff08;1&#xff09;需要自己生成的openai api&#xff0c;获取API的网站&#xff1a;openAI API 获取方式&#xff1a;OpenAI的API key获取方法 &#xff08;2&#xff09;本次使用该参考项目进行部署&#xff1a;chatweb 需要将该项目fork到自己的仓库里 …