国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于Electron快速開發(fā)MacOS Menubar app

Aldous / 704人閱讀

摘要:基于開發(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

相關(guān)文章

  • 使用React、Electron、Dva、Webpack、Node.js、Websocket快速構(gòu)建

    摘要:是一個(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...

    Caicloud 評(píng)論0 收藏0
  • 使用React、Electron、Dva、Webpack、Node.js、Websocket快速構(gòu)建

    摘要:是一個(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...

    Me_Kun 評(píng)論0 收藏0
  • 使用 Electron 獲取應(yīng)用和用戶系統(tǒng)信息

    摘要:使用獲取應(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. 可以 ...

    xuxueli 評(píng)論0 收藏0
  • Electron 快速入門

    摘要:當(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)用豐...

    Drummor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<