摘要:基于開發(fā)主要涉及的技術(shù)其實(shí)就是的。此外也有人將這個(gè)做了簡單的封裝。這里要用到的是的事件文檔在系統(tǒng)中,檢測到事件,也就是未聚焦于窗口時(shí),調(diào)用把窗口隱藏掉。用于中的,有個(gè)經(jīng)驗(yàn)是將大小設(shè)置為。
基于electron開發(fā)MacOS Menubar app主要涉及的技術(shù)其實(shí)就是Electron的 Tray API。
此外也有人將這個(gè)API做了簡單的封裝:menubar(github) 。
其基本原理就是將Electron的窗口挪到menubar對(duì)應(yīng)app按鈕的下面,也就是點(diǎn)擊menu bar按鈕時(shí),在獲取按鈕的位置,然后在按鈕的下方顯示窗口。
比如在這里有一個(gè)將傳統(tǒng)Electron改造為MacOS Menubar application的例子:
// 檢測是否MacOS darwin if (platform === "darwin" || tray) { const iconPath = join(__dirname, "static/IconTrayMac.png"); const trayIcon = new Tray(iconPath); trayIcon.setToolTip(`${app.getName()}`); // 點(diǎn)擊時(shí)顯示窗口,并修改窗口的顯示位置 trayIcon.on("click", () => { const {screen} = electron; const {width, height} = screen.getPrimaryDisplay().workAreaSize; const [defaultWidth, defaultHeight] = [width, height].map(x => Math.round((x * 3) / 4)); const WINDOW_WIDTH = defaultWidth - 350; const WINDOW_HEIGHT = defaultHeight; const HORIZ_PADDING = 15; const VERT_PADDING = 15; const cursorPosition = screen.getCursorScreenPoint(); const primarySize = screen.getPrimaryDisplay().workAreaSize; const trayPositionVert = cursorPosition.y >= primarySize.height / 2 ? "bottom" : "top"; const trayPositionHoriz = cursorPosition.x >= primarySize.width / 2 ? "right" : "left"; win.setPosition(getTrayPosX(), getTrayPosY()); if (win.isVisible()) { win.hide(); } else { win.show(); } // 計(jì)算位置 function getTrayPosX() { const horizBounds = { left: cursorPosition.x - (WINDOW_WIDTH / 2), right: cursorPosition.x + (WINDOW_WIDTH / 2) }; if (trayPositionHoriz === "left") { return horizBounds.left <= HORIZ_PADDING ? HORIZ_PADDING : horizBounds.left; } return horizBounds.right >= primarySize.width ? primarySize.width - HORIZ_PADDING - WINDOW_WIDTH : horizBounds.right - WINDOW_WIDTH; } function getTrayPosY() { return trayPositionVert === "bottom" ? cursorPosition.y - WINDOW_HEIGHT - VERT_PADDING : cursorPosition.y + VERT_PADDING; } }); return; }
這個(gè)時(shí)候就有了效果:
接下來還有一個(gè)問題,就是怎么實(shí)現(xiàn) 點(diǎn)擊其他地方時(shí),該窗口自動(dòng)隱藏 。
這里要用到的是Electron的 Blur 事件(文檔):
aoWindow.on("blur", () => { if (platform === "darwin") { aoWindow.hide(); } });
在MacOS系統(tǒng)中,檢測到Blur事件,也就是未聚焦于窗口時(shí),調(diào)用 hide 把窗口隱藏掉。
這樣,就實(shí)現(xiàn)了一個(gè)MacOS的Menubar application!
接下來就用 electron-packager 將該App打包成MacOS的dmg包就行了!
Tips: 使用electron-packager打包過程有個(gè)坑,就是使用cnpm安裝依賴的話,會(huì)導(dǎo)致打包時(shí)間極為漫長,用npm重新安裝就好了。
Tips: 用于MacOS中Tray的icon,有個(gè)經(jīng)驗(yàn)是將icon大小設(shè)置為14X14。
最后給出一個(gè)我Fork后修改的Github開源Microsoft To-Do desktop app應(yīng)用的地址:https://github.com/Anderson-L...
原repo地址:https://github.com/klauscfhq/ao
界面很有設(shè)計(jì)感,經(jīng)過改造為Menubar app后效率更是大幅提升!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108154.html
摘要:是一個(gè)使用和等技術(shù)創(chuàng)建原生程序的框架,它負(fù)責(zé)比較難搞的部分,你只需把精力放在你的應(yīng)用的核心上即可。談?wù)劶夹g(shù)選型使用去做底層的繪制,大項(xiàng)目首選狀態(tài)管理的最佳實(shí)踐肯定不是,目前首選,或者。 showImg(https://segmentfault.com/img/bVbtqlI?w=1308&h=565); 目前Electron在github上面的star量已經(jīng)快要跟React-nativ...
摘要:是一個(gè)使用和等技術(shù)創(chuàng)建原生程序的框架,它負(fù)責(zé)比較難搞的部分,你只需把精力放在你的應(yīng)用的核心上即可。談?wù)劶夹g(shù)選型使用去做底層的繪制,大項(xiàng)目首選狀態(tài)管理的最佳實(shí)踐肯定不是,目前首選,或者。 showImg(https://segmentfault.com/img/bVbtqlI?w=1308&h=565); 目前Electron在github上面的star量已經(jīng)快要跟React-nativ...
摘要:使用獲取應(yīng)用和用戶系統(tǒng)信息此系列文章的應(yīng)用示例已發(fā)布于可以或下載后運(yùn)行查看歡迎使用幾個(gè)和模塊您可以收集有關(guān)用戶系統(tǒng)應(yīng)用程序或屏幕的信息相關(guān)文檔的鏈接位于下面的示例中獲取應(yīng)用信息支持進(jìn)程主進(jìn)程的模塊可用于獲取應(yīng)用程序在用戶計(jì)算機(jī)上的位置 使用 Electron 獲取應(yīng)用和用戶系統(tǒng)信息 此系列文章的應(yīng)用示例已發(fā)布于 GitHub: electron-api-demos-Zh_CN. 可以 ...
摘要:當(dāng)一個(gè)實(shí)例被銷毀后,相應(yīng)的渲染進(jìn)程也會(huì)被終止。之所以命名為,主要是為了與主進(jìn)程這個(gè)概念對(duì)應(yīng)。部分在事件觸發(fā)后才能使用。當(dāng)全部窗口關(guān)閉時(shí)退出。主進(jìn)程接收到消息并處理之后,會(huì)返回處理結(jié)果。 簡介 Electron 是一個(gè)可以使用 Web 技術(shù)如 JavaScript、HTML 和 CSS 來創(chuàng)建跨平臺(tái)原生桌面應(yīng)用的框架。借助 Electron,我們可以使用純 JavaScript 來調(diào)用豐...
閱讀 1530·2021-11-23 09:51
閱讀 3643·2021-09-26 09:46
閱讀 2131·2021-09-22 10:02
閱讀 1842·2019-08-30 15:56
閱讀 3326·2019-08-30 12:51
閱讀 2233·2019-08-30 11:12
閱讀 2068·2019-08-29 13:23
閱讀 2329·2019-08-29 13:16