本文记录了在 Tauri 应用中为窗口配置磨砂玻璃背景效果的两种主要方法:通过 tauri.conf.json 配置文件或 使用Rust代码。
一.通过 tauri.conf.json 配置文件
1.配置基础窗口
下面代码省略了很多配置项
{
"windows": [
{
"label": "main", // 窗口标识
"title": "Raykit",
"url": "/app",
"width": 800,
"height": 600,
"center": true,
"transparent": true,
}
]
}
transparent参数必须要设置为true,让窗口背景透明,不然后续磨砂背景设置会不生效
2.启用磨砂玻璃效果
在窗口配置对象中添加 windowEffects 属性来定义磨砂效果。
{
"windows": [
{
"label": "main",
"title": "Raykit",
"url": "/app",
"width": 800,
"height": 600,
"decorations": false,
"center": true,
"transparent": true,
"windowEffects": {
"effects": ["hudWindow", "acrylic", "mica"],
"radius": 12
}
}
]
}
-
effects(Array): 指定要应用的材质效果列表。Tauri 会尝试应用列表中当前系统支持的第一个效果。"hudWindow": macOS 专属的磨砂效果(类似 HUD 面板)。"acrylic": Windows 10/11 的亚克力效果(半透明+背景模糊)。"mica": Windows 11 专属的云母效果(动态主题+半透明)。
-
radius(Number): 当decorations: false时,在 macOS 上此属性是必需的。它定义了窗口的圆角半径(单位:点)。Windows 忽略此属性。
二.使用 Rust 代码
1.创建基础窗口 (WebviewWindowBuilder)
在 setup 钩子中使用 WebviewWindowBuilder 创建窗口。
pub fn run() {
tauri::Builder::default()
.setup(|app| {
WebviewWindowBuilder::new(app, "main", WebviewUrl::default())
// 设置窗口标题
.title("Raykit")
// 设置窗口大小
.inner_size(800.0, 600.0)
// 去除标题栏
.decorations(false)
// 窗口透明背景
.transparent(true)
.build()
.unwrap();
Ok(())
})
.plugin(tauri_plugin_opener::init())
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
transparent参数必须要设置为true,让窗口背景透明,不然后续磨砂背景设置会不生效
2.创建并应用磨砂效果 (EffectsBuilder)
pub fn run() {
tauri::Builder::default()
.setup(|app| {
let effects = EffectsBuilder::new()
.effects(vec![Effect::HudWindow,Effect::Acrylic])
.radius(12.0)
.build();
WebviewWindowBuilder::new(app, "main", WebviewUrl::default())
.title("Raykit")
.inner_size(800.0, 600.0)
.decorations(false)
.transparent(true)
.effects(effects)
.build()
.unwrap();
Ok(())
})
.plugin(tauri_plugin_opener::init())
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
-
effects(): 接收一个Vec<Effect>。Tauri 会尝试应用列表中当前系统支持的第一个效果。Effect::HudWindow: 对应配置文件中的"hudWindow"。Effect::Acrylic: 对应配置文件中的"acrylic"。Effect::Mica: 对应配置文件中的"mica"。
-
radius(f64): 当.decorations(false)时,在 macOS 上此属性是必需的。设置窗口圆角半径。
3.(可选) 设置窗口主题色 (暗色/亮色)
磨砂背景主题默认是根据当前系统的主题来设置的,想设置暗色磨砂背景如下,亮色同理
pub fn run() {
tauri::Builder::default()
.setup(|app| {
let effects = EffectsBuilder::new()
.effects(vec![Effect::HudWindow,Effect::Acrylic, Effect::Blur])
.radius(12.0)
.build();
WebviewWindowBuilder::new(app, "main", WebviewUrl::default())
.title("Raykit")
.inner_size(800.0, 600.0)
.decorations(false)
.transparent(true)
.effects(effects)
.theme(Some(Theme::Dark))
.build()
.unwrap();
Ok(())
})
.plugin(tauri_plugin_opener::init())
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
参考文档: tauri::window::EffectsBuilder Rust Docs
关于 JavaScript API
Tauri 也提供了 JavaScript API 来动态设置窗口效果。但这通常需要在窗口创建完成(即 JS 代码执行环境准备好)之后才能调用。如果需要在应用启动时即展示磨砂效果,使用配置文件或 Rust 代码在窗口创建阶段直接配置是更推荐、更可靠的方式。
项目分享
我正在使用 Tauri 开发一款桌面小工具 Raykit,其中就应用了上述的磨砂玻璃效果。项目仍在积极开发中,欢迎关注或贡献!
- GitHub 仓库: Raykit
- 功能预览: 包含本文描述的磨砂窗口实现。
如果您觉得这个项目有趣或有潜力,欢迎给个 ⭐️ Star 支持!