Electron應(yīng)用顯示隱藏時(shí)展示動(dòng)畫(huà)效果實(shí)例
最終效果

實(shí)現(xiàn)思路
窗口設(shè)置透明
建立系統(tǒng)托盤
獲取托盤坐標(biāo),實(shí)現(xiàn)應(yīng)用在托盤上方出現(xiàn)
CSS 里面寫上加載和退出的動(dòng)畫(huà)
添加加載動(dòng)畫(huà)的事件,即給元素套上動(dòng)畫(huà)
設(shè)置單擊事件,單擊顯示或者隱藏程序(或者添加 blur 事件,隱藏應(yīng)用)
給托盤添加右鍵菜單退出應(yīng)用
實(shí)現(xiàn)過(guò)程
窗口設(shè)置透明
const win = new BrowserWindow({
width: 300,
height: 400,
frame: false, // 窗口邊框
skipTaskbar: true, // 窗口是否不顯示在任務(wù)欄上面
alwaysOnTop: true, // 窗口置頂
transparent: true, // 窗口透明
resizable: false,
webPreferences: {
// 通信文件 后面會(huì)用到
preload: path.join(__dirname, "preload.js"),
backgroundThrottling: false, // 后臺(tái)運(yùn)行是否禁止一些操作
},
});建立系統(tǒng)托盤
import { Tray } from "electron";
// 傳入圖標(biāo)路徑
tray = new Tray(path.join(__dirname, "../../public/imgs/logo.ico"));
// 鼠標(biāo)懸浮托盤時(shí)顯示的文字
tray.setToolTip("Todo");獲取托盤坐標(biāo),實(shí)現(xiàn)應(yīng)用在托盤上方
// 獲取托盤所在位置信息
const { width, height, x, y } = tray.getBounds();
// 獲取窗口信息 win 是 BrowserWindow 對(duì)象
const [w, h] = win.getSize();
// 剛好在正上方
win.setPosition(x + width / 2 - w / 2, y - h - 10);
// 封裝成函數(shù)
const aboveTrayPosition = (win, tray) => {
const { width, height, x, y } = tray.getBounds();
const [w, h] = win.getSize();
return [x + width / 2 - w / 2, y - h - 10]
}CSS 里面寫上加載和退出的動(dòng)畫(huà)
動(dòng)畫(huà)應(yīng)該添加到HTML根元素上,根元素必須得是 寬高 100%
@keyframes show {
0% {
opacity: 0;
transform: translateY(300px) scale(0);
}
100% {
opacity: 1;
transform: translateY(0) scale(1);
}
}
@keyframes hide {
0% {
opacity: 1;
transform: translateY(0) scale(1);
}
100% {
opacity: 0;
transform: translateY(300px) scale(0);
}
}添加加載動(dòng)畫(huà)的事件
// preload.js
import { ipcRenderer } from "electron";
// 對(duì)應(yīng)下面的 win.webContents.send("show");
// 默認(rèn)有個(gè) event 事件參數(shù)
ipcRenderer.on("show", (e) => {
const root = document.querySelector(".root") as HTMLElement;
root.style.animation = "show 0.3s linear forwards";
});
// 對(duì)應(yīng)下面的 win.webContents.send("hide", s);
ipcRenderer.on("hide", (e, s: number) => {
const root = document.querySelector(".root") as HTMLElement;
root.style.animation = `hide ${s}s linear forwards`;
});設(shè)置單擊事件,單擊顯示或者隱藏程序并加載動(dòng)畫(huà)
// 添加托盤圖標(biāo)單擊事件
tray.on("click", () => {
// 窗口是否隱藏
if (!win.isVisible()) {
win.setPosition(...aboveTrayPosition(win, tray));
win.show();
// 展示加載動(dòng)畫(huà)
win.webContents.send("show");
} else {
const s = 0.3;
// 展示退出動(dòng)畫(huà)
win.webContents.send("hide", s);
// 退出動(dòng)畫(huà)加載完之后再隱藏程序
setTimeout(() => {
win.hide();
}, s * 1000);
}
});給托盤添加右鍵菜單退出應(yīng)用
import { Menu } from "electron";
// 創(chuàng)建菜單
let menu: Menu = Menu.buildFromTemplate([
{
label: "Quit",
click() {
app.quit();
},
},
]);
// 掛載到托盤右鍵上
tray.setContextMenu(menu);總結(jié)
到此這篇關(guān)于Electron應(yīng)用顯示隱藏時(shí)展示動(dòng)畫(huà)的文章就介紹到這了,更多相關(guān)Electron顯示隱藏展示動(dòng)畫(huà)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript最全公共方法匯總并解析(前端開(kāi)發(fā)收藏必備)
JavaScript掌握各種常用的公共方法更是提升開(kāi)發(fā)效率和代碼質(zhì)量的關(guān)鍵,無(wú)論你是初學(xué)者還是資深開(kāi)發(fā)者,了解并熟練運(yùn)用這些方法都能讓你的代碼更加簡(jiǎn)潔、高效,本篇博客將為你詳細(xì)匯總并解析最全的JavaScript公共方法,涵蓋數(shù)組、對(duì)象、字符串、日期等各個(gè)方面的常用技巧2024-06-06
Javascript操縱Cookie實(shí)現(xiàn)購(gòu)物車程序
Javascript操縱Cookie實(shí)現(xiàn)購(gòu)物車程序...2006-11-11
javascript中的void運(yùn)算符語(yǔ)法及使用介紹
void是javascript中的一個(gè)操作符,void會(huì)計(jì)算表達(dá)式的值,但是會(huì)丟棄表達(dá)式的返回值接下來(lái)將詳細(xì)介紹下,感興趣的你可以參考下或許對(duì)你有所幫助2013-03-03
基于javascript數(shù)組實(shí)現(xiàn)圖片輪播
這篇文章主要為大家詳細(xì)介紹了基于javascript數(shù)組實(shí)現(xiàn)圖片輪播的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
JS+HTML實(shí)現(xiàn)經(jīng)典游戲吃豆人
吃豆游戲可以說(shuō)是我們80,90后共同的回憶錄,小時(shí)候常常在學(xué)習(xí)機(jī)上玩,所以也就有了強(qiáng)烈的欲望去寫。所以本文將利用JS+HTML實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下2022-04-04
結(jié)合ES6?編寫?JavaScript?設(shè)計(jì)模式中的結(jié)構(gòu)型模式
這篇文章主要介紹了結(jié)合ES6編寫JavaScript?設(shè)計(jì)模式中的結(jié)構(gòu)型模式,設(shè)計(jì)模式是軟件設(shè)計(jì)中常見(jiàn)問(wèn)題的解決方案,這些模式很容易重復(fù)使用并且富有表現(xiàn)力2022-07-07
通過(guò)JS和PHP兩種方法判斷用戶請(qǐng)求時(shí)使用的瀏覽器類型
在做微站點(diǎn)項(xiàng)目開(kāi)發(fā)的時(shí)候,我們需要判斷當(dāng)前瀏覽器類型是什么。接下來(lái)小編給大家分享通過(guò)JS和PHP兩種方法判斷用戶請(qǐng)求時(shí)使用的瀏覽器類型,非常不錯(cuò),感興趣的朋友一起學(xué)習(xí)吧2016-09-09
JS實(shí)現(xiàn)的新浪微博大廳文字內(nèi)容滾動(dòng)效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)的新浪微博大廳文字內(nèi)容滾動(dòng)效果代碼,可實(shí)現(xiàn)頁(yè)面圖文元素定時(shí)滾動(dòng)的效果,涉及JavaScript時(shí)間函數(shù)定時(shí)改變頁(yè)面元素的相關(guān)技巧,需要的朋友可以參考下2015-11-11

