亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用electron實現百度網盤懸浮窗口功能的示例代碼

2019-11-19 12:38:27
字體:
來源:轉載
供稿:網友

相關依賴

里面使用了vuex vue vue-route storeJs

storeJs 用來持久化vuex狀態

展示


介紹說明

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

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

安裝

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

storeJs 安裝

npm install storejs

準備寫代碼

配置路由文件

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>

主進程創建懸浮窗頁面代碼

路徑: /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: '開始全部任務', enabled: false},    {label: '暫停全部任務', enabled: false},    {label: '本次傳輸完自動關機'},    {type: 'separator'},    {      label: '隱藏懸浮窗',      click: () => {        window.webContents.send('hideSuspension', false);        win.hide()      }    },    {type: 'separator'},    {      label: '加入qq群',      click: () => {        shell.openExternal('tencent://groupwpa/?subcmd=all¶m=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',  //創建的窗口類型為工具欄窗口    frame: false,  //要創建無邊框窗口    resizable: false, //禁止窗口大小縮放    show: false,  //先不讓窗口顯示    webPreferences: {      devTools: false //關閉調試工具    },    transparent: true, //設置透明    alwaysOnTop: true, //窗口是否總是顯示在其他窗口之前  });  const size = screen.getPrimaryDisplay().workAreaSize;  //獲取顯示器的寬高  const winSize = win.getSize(); //獲取窗口寬高  //設置窗口的位置 注意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});

遺留問題

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

github地址

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色悠久久久久综合先锋影音下载| 国产日韩欧美黄色| 国产99久久精品一区二区永久免费| 精品国产一区二区三区久久久狼| 欧美日韩国产一中文字不卡| 亚洲国产精品人久久电影| 最近中文字幕日韩精品| 亚洲精品第一国产综合精品| 欧美一区二区大胆人体摄影专业网站| 亚洲第一精品自拍| 国产日韩欧美日韩| 68精品国产免费久久久久久婷婷| 黑人巨大精品欧美一区免费视频| 欧美激情日韩图片| 欧洲成人在线观看| 国产精品久久久久久久午夜| 91在线视频成人| 欧美另类高清videos| 久久久久国色av免费观看性色| 亚洲色图35p| 亚洲第一区中文99精品| 国产精品久久色| 国产欧美一区二区三区在线看| 精品无人区乱码1区2区3区在线| 欧美一级在线播放| 欧美最猛性xxxxx亚洲精品| 久久国产精品99国产精| 国产va免费精品高清在线观看| 5278欧美一区二区三区| 国产精品一区二区av影院萌芽| 岛国精品视频在线播放| 国产色婷婷国产综合在线理论片a| 在线播放亚洲激情| 日韩欧美国产一区二区| 97精品免费视频| 欧美激情在线视频二区| 亲爱的老师9免费观看全集电视剧| 在线精品视频视频中文字幕| 色综合久久悠悠| 久久九九热免费视频| 中文字幕一区二区三区电影| 亚洲视频在线观看免费| 国产福利成人在线| 成人高h视频在线| 日韩av在线电影网| 97视频在线观看网址| 久久精品国产视频| 国产成人自拍视频在线观看| 欧美日韩国产一区二区三区| 亚洲美女激情视频| 欧美在线一级视频| 国产精品视频免费在线| 人人做人人澡人人爽欧美| 国产成人精品视频在线| 欧美亚洲国产成人精品| 日本久久久久久久久久久| 日韩精品视频在线观看网址| 欧美亚洲日本黄色| 欧美电影《睫毛膏》| 国产精品久久久久aaaa九色| 欧美午夜激情视频| 日韩电影中文字幕一区| 久久久久久九九九| 亚洲国产精品久久久| 91精品国产91久久久久久久久| 成人中文字幕在线观看| 亚洲国产欧美一区二区丝袜黑人| 色阁综合伊人av| 精品电影在线观看| 日韩欧美中文第一页| 欧美在线精品免播放器视频| 欧美亚洲第一页| 欧美成人免费大片| 国语自产偷拍精品视频偷| 欧美激情精品久久久久久免费印度| 亚洲欧美成人在线| 91在线无精精品一区二区| 亚洲视频在线免费看| 国产在线视频不卡| 亚洲国产欧美日韩精品| 久久久99免费视频| 91精品国产色综合久久不卡98口| 91免费精品国偷自产在线| 亚洲第一国产精品| 国产成人午夜视频网址| 一区二区三区四区在线观看视频| 久久精品99久久久久久久久| 亚洲美腿欧美激情另类| 国产精品视频自拍| 日韩av色综合| 国产精品a久久久久久| 国产免费观看久久黄| 欧美性猛交xxxxx水多| 久久躁日日躁aaaaxxxx| 欧美一级大胆视频| 欧美一级淫片videoshd| 亚洲精品v天堂中文字幕| 国内精品久久久久久久久| 琪琪第一精品导航| 国产精品444| 夜夜嗨av色综合久久久综合网| 亚洲va久久久噜噜噜久久天堂| 中文字幕亚洲欧美日韩在线不卡| 欧美精品激情在线观看| 国产日韩亚洲欧美| 国产一区在线播放| 78m国产成人精品视频| 欧美成人剧情片在线观看| 久热精品在线视频| 一本大道香蕉久在线播放29| 日本精品性网站在线观看| 精品久久久久国产| 川上优av一区二区线观看| 91福利视频网| 国产精品免费福利| 国内精品久久久久久久| 久久久久久久久久av| 日韩精品视频中文在线观看| 成人欧美一区二区三区在线湿哒哒| 欧美大码xxxx| 亚洲精品免费在线视频| 国产又爽又黄的激情精品视频| 久久综合电影一区| 亚洲视频免费一区| 国产精品日韩精品| 日本欧美一级片| 国产精品久久久久久久7电影| 国产69精品久久久久9| 成人网在线观看| 亚洲精品免费在线视频| 亚洲成av人片在线观看香蕉| 国产精品揄拍一区二区| 久操成人在线视频| 亚洲人成电影网站| 欧美激情第6页| 欧美激情啊啊啊| 欧美高清视频在线播放| 欧美日韩裸体免费视频| 国产精品91一区| 国产盗摄xxxx视频xxx69| 久久影院资源站| 国产一区二区成人| 色偷偷91综合久久噜噜| 国产精品久久久久免费a∨大胸| 国产精品欧美日韩久久| 欧美午夜激情视频| 欧美激情2020午夜免费观看| 亚洲福利在线播放| 久久69精品久久久久久国产越南| 欧美乱妇高清无乱码| 清纯唯美日韩制服另类| 国产精品免费一区豆花| 在线观看视频99| 欧美激情三级免费| 亚洲一区二区免费在线| 国产ts人妖一区二区三区| 欧美激情videoshd| 成人网在线免费看| 亚洲精品少妇网址| 日本中文字幕不卡免费| 亚洲大尺度美女在线| 一区二区三区 在线观看视| 丝袜亚洲欧美日韩综合| 欧美日韩一区二区三区|