Electron應用顯示隱藏時展示動畫效果實例
最終效果
實現思路
窗口設置透明
建立系統(tǒng)托盤
獲取托盤坐標,實現應用在托盤上方出現
CSS 里面寫上加載和退出的動畫
添加加載動畫的事件,即給元素套上動畫
設置單擊事件,單擊顯示或者隱藏程序(或者添加 blur 事件,隱藏應用)
給托盤添加右鍵菜單退出應用
實現過程
窗口設置透明
const win = new BrowserWindow({ width: 300, height: 400, frame: false, // 窗口邊框 skipTaskbar: true, // 窗口是否不顯示在任務欄上面 alwaysOnTop: true, // 窗口置頂 transparent: true, // 窗口透明 resizable: false, webPreferences: { // 通信文件 后面會用到 preload: path.join(__dirname, "preload.js"), backgroundThrottling: false, // 后臺運行是否禁止一些操作 }, });
建立系統(tǒng)托盤
import { Tray } from "electron"; // 傳入圖標路徑 tray = new Tray(path.join(__dirname, "../../public/imgs/logo.ico")); // 鼠標懸浮托盤時顯示的文字 tray.setToolTip("Todo");
獲取托盤坐標,實現應用在托盤上方
// 獲取托盤所在位置信息 const { width, height, x, y } = tray.getBounds(); // 獲取窗口信息 win 是 BrowserWindow 對象 const [w, h] = win.getSize(); // 剛好在正上方 win.setPosition(x + width / 2 - w / 2, y - h - 10); // 封裝成函數 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 里面寫上加載和退出的動畫
動畫應該添加到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); } }
添加加載動畫的事件
// preload.js import { ipcRenderer } from "electron"; // 對應下面的 win.webContents.send("show"); // 默認有個 event 事件參數 ipcRenderer.on("show", (e) => { const root = document.querySelector(".root") as HTMLElement; root.style.animation = "show 0.3s linear forwards"; }); // 對應下面的 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`; });
設置單擊事件,單擊顯示或者隱藏程序并加載動畫
// 添加托盤圖標單擊事件 tray.on("click", () => { // 窗口是否隱藏 if (!win.isVisible()) { win.setPosition(...aboveTrayPosition(win, tray)); win.show(); // 展示加載動畫 win.webContents.send("show"); } else { const s = 0.3; // 展示退出動畫 win.webContents.send("hide", s); // 退出動畫加載完之后再隱藏程序 setTimeout(() => { win.hide(); }, s * 1000); } });
給托盤添加右鍵菜單退出應用
import { Menu } from "electron"; // 創(chuàng)建菜單 let menu: Menu = Menu.buildFromTemplate([ { label: "Quit", click() { app.quit(); }, }, ]); // 掛載到托盤右鍵上 tray.setContextMenu(menu);
總結
到此這篇關于Electron應用顯示隱藏時展示動畫的文章就介紹到這了,更多相關Electron顯示隱藏展示動畫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript最全公共方法匯總并解析(前端開發(fā)收藏必備)
JavaScript掌握各種常用的公共方法更是提升開發(fā)效率和代碼質量的關鍵,無論你是初學者還是資深開發(fā)者,了解并熟練運用這些方法都能讓你的代碼更加簡潔、高效,本篇博客將為你詳細匯總并解析最全的JavaScript公共方法,涵蓋數組、對象、字符串、日期等各個方面的常用技巧2024-06-06結合ES6?編寫?JavaScript?設計模式中的結構型模式
這篇文章主要介紹了結合ES6編寫JavaScript?設計模式中的結構型模式,設計模式是軟件設計中常見問題的解決方案,這些模式很容易重復使用并且富有表現力2022-07-07