最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用electron實現(xiàn)百度網(wǎng)盤懸浮窗口功能的示例代碼

 更新時間:2018年10月24日 09:46:09   作者:李昊天  
這篇文章主要介紹了使用electron實現(xiàn)百度網(wǎng)盤懸浮窗口功能的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

相關(guān)依賴

里面使用了vuex vue vue-route storeJs

storeJs 用來持久化vuex狀態(tài)

展示


介紹說明

沒有使用electron內(nèi)置的-webkit-app-region: drag 因為使用他那個有很多問題

比如事件無法使用 右鍵無法使用 以及不能使用手型等!

安裝

安裝的時候沒有截圖 所以就參考下我其他的文章吧

storeJs 安裝

npm install storejs

準(zhǔn)備寫代碼

配置路由文件

export default new Router({
  routes: [
    {path: '/', name: 'home', component: ()=> import('@/view//home')},
    {path: '/suspension', name: 'suspension', component: ()=> import('@/view/components/suspension')}
  ]
})

寫懸浮窗頁面

頁面路徑 /src/renderer/view/components/suspension.vue

<template>
  <div id="suspension">
    <div class="logo"></div>
    <div class="content_body">
      <div class="upload">拖拽上傳</div>
    </div>
  </div>
</template>

<script>
  export default {
    name: "suspension",
    mounted() {
      let win = this.$electron.remote.getCurrentWindow();
      let biasX = 0;
      let biasY = 0;
      let that = this;
      document.addEventListener('mousedown', function (e) {
        switch (e.button) {
          case 0:
            biasX = e.x;
            biasY = e.y;
            document.addEventListener('mousemove', moveEvent);
            break;
          case 2:
            that.$electron.ipcRenderer.send('createSuspensionMenu');
            break;
        }
      });

      document.addEventListener('mouseup', function () {
        biasX = 0;
        biasY = 0;
        document.removeEventListener('mousemove', moveEvent)
      });

      function moveEvent(e) {
        win.setPosition(e.screenX - biasX, e.screenY - biasY)
      }
    }
  }
</script>

<style>
  * {
    padding: 0;
    margin: 0;
  }
  .upload {
    height: 25px;
    line-height: 25px;
    font-size: 12px;
    text-align: center;
    color: #74A1FA;
  }

  .logo {
    width: 40px;
    background: #5B9BFE url("../../assets/img/logo@2x.png") no-repeat 2px 3px;
    background-size: 80%;
  }

  .content_body {
    background-color: #EEF4FE;
    width: 100%;
  }

  #suspension {
    -webkit-user-select: none;
    cursor: pointer;
    overflow: hidden;
  }

  #suspension {
    cursor: pointer !important;
    height: 25px;
    border-radius: 4px;
    display: flex;
    border: 1px solid #3388FE;
  }
</style>

主進程創(chuàng)建懸浮窗頁面代碼

路徑: /src/main/window.js

import {BrowserWindow, ipcMain, screen, Menu, shell, app, webContents} from 'electron'

var win = null;
const window = BrowserWindow.fromWebContents(webContents.getFocusedWebContents());
const winURL = process.env.NODE_ENV === 'development' ? `http://localhost:9080/#/suspension` : `file://${__dirname}/index.html/#/suspension`;
ipcMain.on('showSuspensionWindow', () => {
  if (win) {
    if (win.isVisible()) {
      createSuspensionWindow();
    } else {
      win.showInactive();
    }
  } else {
    createSuspensionWindow();
  }

});

ipcMain.on('createSuspensionMenu', (e) => {
  const rightM = Menu.buildFromTemplate([
    {label: '開始全部任務(wù)', enabled: false},
    {label: '暫停全部任務(wù)', enabled: false},
    {label: '本次傳輸完自動關(guān)機'},
    {type: 'separator'},
    {
      label: '隱藏懸浮窗',
      click: () => {
        window.webContents.send('hideSuspension', false);
        win.hide()
      }
    },
    {type: 'separator'},
    {
      label: '加入qq群',
      click: () => {
        shell.openExternal('tencent://groupwpa/?subcmd=all&param=7B2267726F757055696E223A3831343237303636392C2274696D655374616D70223A313533393531303138387D0A');
      }
    },
    {
      label: 'GitHub地址',
      click: () => {
        shell.openExternal('https://github.com/lihaotian0607/auth');
      }
    },
    {
      label: '退出軟件',
      click: () => {
        app.quit();
      }
    },
  ]);
  rightM.popup({});
});

function createSuspensionWindow() {
  win = new BrowserWindow({
    width: 107, //懸浮窗口的寬度 比實際DIV的寬度要多2px 因為有1px的邊框
    height: 27, //懸浮窗口的高度 比實際DIV的高度要多2px 因為有1px的邊框
    type: 'toolbar',  //創(chuàng)建的窗口類型為工具欄窗口
    frame: false,  //要創(chuàng)建無邊框窗口
    resizable: false, //禁止窗口大小縮放
    show: false,  //先不讓窗口顯示
    webPreferences: {
      devTools: false //關(guān)閉調(diào)試工具
    },
    transparent: true, //設(shè)置透明
    alwaysOnTop: true, //窗口是否總是顯示在其他窗口之前
  });
  const size = screen.getPrimaryDisplay().workAreaSize;  //獲取顯示器的寬高
  const winSize = win.getSize(); //獲取窗口寬高

  //設(shè)置窗口的位置 注意x軸要桌面的寬度 - 窗口的寬度
  win.setPosition(size.width - winSize[0], 100);
  win.loadURL(winURL);

  win.once('ready-to-show', () => {
    win.show()
  });

  win.on('close', () => {
    win = null;
  })
}

ipcMain.on('hideSuspensionWindow', () => {
  if (win) {
    win.hide();
  }
});

store文件

路徑: /src/renderer/store/modules/suspension.js

import storejs from 'storejs'

const state = {
  show: storejs.get('showSuspension')
};

const actions = {
  showSuspension: function ({state, commit}) {
    let status = true;
    storejs.set('showSuspension', status);
    state.show = status;
  },

  hideSuspension: function ({state, commit}) {
    let status = false;
    storejs.set('showSuspension', status);
    state.show = status;
  },
};

export default ({
  state,
  actions
});

遺留問題

  • 在軟件關(guān)閉之后重啟會導(dǎo)致懸浮窗口的位置重置 也曾嘗試在主進程中使用store.js 但是不能用!
  • 如果想解決這個問題 可以在渲染進程中將拖動的最后坐標(biāo)保存到storejs中
  • 在渲染進程給主進程發(fā)送異步消息的時候?qū)⒆鴺?biāo)攜帶進去 也可以使用nedb在主進程中存儲坐標(biāo)!

github地址

使用electron制作百度網(wǎng)盤客戶端: https://github.com/lihaotian0607/baidupan
使用electron制作百度網(wǎng)盤懸浮窗: https://github.com/lihaotian0607/electron-suspension

目前這個開源代碼中沒有懸浮窗 有時間了會加上去!!!

相關(guān)文章

  • 如何使用three.js 制作一個三維的推箱子游戲

    如何使用three.js 制作一個三維的推箱子游戲

    這篇文章主要介紹了如何使用three.js 制作一個三維的推箱子游戲,文中代碼非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • js中如何對json數(shù)組進行排序

    js中如何對json數(shù)組進行排序

    這篇文章主要介紹了js中如何對json數(shù)組進行排序的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • ECMAScript?數(shù)據(jù)類型之Number類型

    ECMAScript?數(shù)據(jù)類型之Number類型

    這篇文章主要介紹了?ECMAScript?數(shù)據(jù)類型之Number類型,Number類型使用IEEE?754格式表示整數(shù)和浮點值,更多相關(guān)內(nèi)容請需要的小伙伴參考下面文章內(nèi)容
    2022-06-06
  • JS中split()用法(將字符串按指定符號分割成數(shù)組)

    JS中split()用法(將字符串按指定符號分割成數(shù)組)

    這篇文章主要介紹了JS中split()用法(將字符串按指定符號分割成數(shù)組)的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • javascript將DOM節(jié)點添加到文檔的方法實例分析

    javascript將DOM節(jié)點添加到文檔的方法實例分析

    這篇文章主要介紹了javascript將DOM節(jié)點添加到文檔的方法,對比分析了javascript的兩種節(jié)點創(chuàng)建的方法,涉及javascript節(jié)點操作及運行時間計算的相關(guān)技巧,需要的朋友可以參考下
    2015-08-08
  • JavaScript插件化開發(fā)教程 (二)

    JavaScript插件化開發(fā)教程 (二)

    本系列的開篇文章我們一起探討了jQuery如何開發(fā)插件,今天這篇文章,我們來繼續(xù)插件開發(fā)之旅,希望大家能夠喜歡。
    2015-01-01
  • JS對象數(shù)組去重的3種方法示例及對比

    JS對象數(shù)組去重的3種方法示例及對比

    這篇文章主要給大家介紹了關(guān)于JS對象數(shù)組去重的3種方法,三種方法分別包括使用filter和Map、使用reduce以及for循環(huán),文中每個方法都給出了示例代碼,需要的朋友可以參考下
    2021-07-07
  • js實現(xiàn)input密碼框顯示/隱藏功能

    js實現(xiàn)input密碼框顯示/隱藏功能

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)input密碼框顯示和隱藏功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • javascript 一些用法小結(jié)

    javascript 一些用法小結(jié)

    JavaScript的一些用法總結(jié)
    2009-09-09
  • countUp.js實現(xiàn)數(shù)字滾動效果

    countUp.js實現(xiàn)數(shù)字滾動效果

    這篇文章主要為大家詳細(xì)介紹了countUp.js實現(xiàn)數(shù)字滾動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評論

扶风县| 广昌县| 鲁甸县| 鹿邑县| 宁河县| 连云港市| 盐山县| 岑巩县| 苗栗市| 曲阳县| 祥云县| 洛浦县| 博乐市| 格尔木市| 新疆| 土默特左旗| 紫金县| 高要市| 隆回县| 新宁县| 焉耆| 南丹县| 五华县| 三河市| 义马市| 安丘市| 长春市| 读书| 晋宁县| 龙州县| 珲春市| 花莲市| 黄平县| 盘山县| 盐山县| 崇阳县| 通化县| 福鼎市| 秀山| 曲松县| 上饶县|