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

news/2024/12/2 19:44:36/

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" circletitle="后退"/><el-button icon="ArrowRight" circletitle="前进"/><el-button icon="refresh" circle title="刷新"/><el-button icon="setting" circletitle="设置"/></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" circleclass="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.ppmy.cn/news/78591.html

相关文章

【Tomcat下载及使用说明】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1.什么是Tomcat 2.Tomcat下载流程及注意问题 …

关于图片加载,你需要学习一下

目录 &#x1f60a; 从何而来 &#x1f955; 设计思路 &#x1f36d; 初步设计 &#x1f6a9; 成功和失败 &#x1f6a7; 加载失败 &#x1f42c; 回调函数 ⌛ 懒加载 &#x1f6a5; 对外接口 &#x1f6a9; 测试使用 &#x1f3c6; 完整代码 &#x1f60a; 从何而…

如何成为一名黑客?小白必学的12个基本步骤

黑客攻防是一个极具魅力的技术领域&#xff0c;但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度&#xff0c;具备很深的计算机系统、编程语言和操作系统知识&#xff0c;并乐意不断地去学习和进步。 如果你想成为一名优秀的黑客&#xff0c;下…

微信小程序【发送给朋友】和【复制链接】功能,灰色不可用

每日鸡汤&#xff1a;悲观者可能正确&#xff0c;但是乐观者往往成功 假设你是一个用户&#xff0c;你随便找一个小程序可以看到这几个功能 转发给朋友分享到朋友圈复制链接 很常见的功能&#xff0c;但是如果你作为开发者&#xff0c;这几个功能就需要自己做喽&#xff0c;并…

跨境电商的三大平台Amazon、eBay、速卖通,你怎么选择?

很多刚刚开始决定做跨境电商的朋友&#xff0c;第一个难点就是&#xff1a;我要从哪个平台开始做呢&#xff1f;在没有正式做过之前&#xff0c;很难去了解到每个平台的不同&#xff0c;但是也不可能同时去运营太多个平台。考虑到这个难处&#xff0c;龙哥今天就从亚马逊、ebay…

如何利用CiteSpace快速锁定领域内最新研究热点并制作精美的可视化专题图

在科研工作中&#xff0c;我们常常需要面对海量的文献进行阅读和分析&#xff0c;如何在这些文献当中找出值得精读、细读的关键文献&#xff0c;挖掘学科前沿&#xff0c;找到研究热点就成为了开展研究之前首先需要解决的问题。CiteSpace作为一款优秀的文献计量学软件&#xff…

QT5.15.0使用gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf交叉编译的问题总结

目录 一、交叉编译 二、操作中踩过的坑 1、环境变量未生效 2、交叉编译QT代码操作 3、烧录时报错缺少xcb问题 4、小白的细小错误 三、--platform命令 3、1 -platform linuxfb 详细文档请点击此处 我的文档在原文档的基础上添加了非常详细的提醒&#xff0c;可以少走弯路…

请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨)为什么很多人说崖山海战以后无中国

目录 请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨) 为什么很多人说崖山海战以后无中国 请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨) 以下是我对《unravel - TK from 凛冽时雨》这首歌词的理解&#xff1…