Electron無邊框窗口(自定義最小化惋砂、最大化、關(guān)閉绳锅、可拖拽)

最近剛開始上手electron西饵,就遇到了各種問題。在此作者記錄一下鳞芙,有需要的朋友也可以來看一看眷柔,
看是否能解決你自己的問題期虾。

這是electron的官網(wǎng),小伙伴們想學(xué)習(xí)的可以去看一看
https://www.electronjs.org

從官網(wǎng)上蕩下來的項目是有邊框的驯嘱,就跟瀏覽器一樣彻消,我們可以檢查。
但是如何去掉邊框呢宙拉。我上網(wǎng)查了查

// frame:false(加這一句就行)
mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    frame:false宾尚,
    webPreferences: {
       preload: path.join(__dirname, 'preload.js')
    }
  })

接下來就是解決自定義最大化等問題了
這是我從網(wǎng)上找到的比較靠譜的博主的文章了,給大家分享一下
https://www.cnblogs.com/mica/p/10794751.html

總結(jié)起來就是要新添加(main.js)

const {
  app,
  BrowserWindow,
  ipcRenderer,
  ipcMain
} = require('electron')

//登錄窗口最小化
ipcMain.on('window-min', function () {
  mainWindow.minimize();
})
//登錄窗口最大化
ipcMain.on('window-max', function () {
  if (mainWindow.isMaximized()) {
    mainWindow.restore();
  } else {
    mainWindow.maximize();
  }
})
//關(guān)閉窗口
ipcMain.on('window-close', function () {
  mainWindow.close();
})

新添加(renderer.js)

var ipc = require('electron').ipcRenderer;
document.getElementById('maxbt').addEventListener('click', () => {
console.log('hello vscode!')
ipc.send('window-max');

})
document.getElementById('minbt').addEventListener('click', () => {
console.log('hello vscode!')
ipc.send('window-min');

})
document.getElementById('closebt').addEventListener('click', () => {
console.log('hello vscode!')
ipc.send('window-close');

})

新添加(index.html)

<!-- 三個操作按鈕 -->
    <section>
      <button type="button" id="maxbt">max</button>
      <button type="button" id="minbt">>min</button>
      <button type="button" id="closebt">>close</button>
    </section>

但是遇到了 一個問題 (require不識別)
上網(wǎng)找了很多方法谢澈,都說要加一個nodeIntegration: true,就可以解決問題
可是我的問題沒有得到解決煌贴,可能我用的是最新版的緣故把
這是我千辛萬苦找到的一個能解決問題的博主的文章
https://blog.csdn.net/adley_app/article/details/118143784

試了試會報一個mainWindow找不到的錯誤,
仔細看了下原因锥忿,是因為是const
于是 我改變了他的數(shù)據(jù)類型用 var

后面又遇到了一個問題 就是 同時打開了 兩個頁面
(我先開始還納悶為什么放大最小化都能生效牛郑,為什么關(guān)閉不生效呢)
后面我把下面的東西給注了,成功了

// app.whenReady().then(() => {
//   createWindow()

//   app.on('activate', function () {
//     // On macOS it's common to re-create a window in the app when the
//     // dock icon is clicked and there are no other windows open.
//     if (BrowserWindow.getAllWindows().length === 0) createWindow()
//   })
// })

關(guān)于可拖拽敬鬓,我也是查了查淹朋。最簡單的就是給你所想要拖拽的最外層盒子加一個這樣的屬性

-webkit-app-region: drag;

我起初加在了行內(nèi)樣式,也就是這樣钉答,發(fā)現(xiàn)不起作用础芍。

<body style = "-webkit-app-region: drag">
</body>

于是我就找問題
發(fā)現(xiàn)只能加在css中,
于是我就改成了這樣

body{
    -webkit-app-region: drag;
}

發(fā)現(xiàn)可用数尿,并且需要將其中需要點擊的東西標記為不可拖拽仑性,否則用戶將無法點擊他們
下面給大家發(fā)一個完整的css(style.css),我里面也就button能點擊

/* styles.css */
html,body{
    width: 100%;
    height: 100%;
}
body {
    margin: 0;
    padding: 0;
    -webkit-app-region: drag;
    -webkit-user-select: none;
}
  
button{
    -webkit-app-region: no-drag;
}
/* Add styles here to customize the appearance of your app */

最后 給大家發(fā)一個完整版的(main,js)

// Modules to control application life and create native browser window
const {
  app,
  BrowserWindow,
  ipcRenderer,
  ipcMain
} = require('electron')
const path = require('path')
var mainWindow
function createWindow() {
  // Create the browser window.
   mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    frame:false,
    webPreferences: {
      // preload: path.join(__dirname, 'preload.js')
      nodeIntegration: true,
      enableRemoteModule: true,
      contextIsolation: false,
    }
  })

  // and load the index.html of the app.
  mainWindow.loadFile('index.html')

  // Open the DevTools.
  // mainWindow.webContents.openDevTools()
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
// app.whenReady().then(() => {
//   createWindow()

//   app.on('activate', function () {
//     // On macOS it's common to re-create a window in the app when the
//     // dock icon is clicked and there are no other windows open.
//     if (BrowserWindow.getAllWindows().length === 0) createWindow()
//   })
// })

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.


//登錄窗口最小化
ipcMain.on('window-min', function () {
  mainWindow.minimize();
})
//登錄窗口最大化
ipcMain.on('window-max', function () {
  if (mainWindow.isMaximized()) {
    mainWindow.restore();
  } else {
    mainWindow.maximize();
  }
})
//關(guān)閉窗口
ipcMain.on('window-close', function () {
  mainWindow.close();
})

app.on('ready', createWindow)

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

以上就是設(shè)置Electron無邊框窗口(自定義最小化、最大化右蹦、關(guān)閉诊杆、可拖拽)的方法了
如果這篇文章對你有幫助,或者在進行中遇到其他問題何陆,歡迎評論區(qū)留言出來晨汹。
我們一起探討~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贷盲,隨后出現(xiàn)的幾起案子淘这,更是在濱河造成了極大的恐慌,老刑警劉巖晃洒,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慨灭,死亡現(xiàn)場離奇詭異,居然都是意外死亡球及,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門呻疹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吃引,“玉大人筹陵,你說我怎么就攤上這事∧鞒撸” “怎么了朦佩?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長庐氮。 經(jīng)常有香客問我语稠,道長,這世上最難降的妖魔是什么弄砍? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任仙畦,我火速辦了婚禮,結(jié)果婚禮上音婶,老公的妹妹穿的比我還像新娘慨畸。我一直安慰自己,他們只是感情好衣式,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布寸士。 她就那樣靜靜地躺著,像睡著了一般碴卧。 火紅的嫁衣襯著肌膚如雪弱卡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天住册,我揣著相機與錄音谐宙,去河邊找鬼。 笑死界弧,一個胖子當著我的面吹牛凡蜻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播垢箕,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼划栓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了条获?” 一聲冷哼從身側(cè)響起忠荞,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎帅掘,沒想到半個月后委煤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡修档,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年碧绞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吱窝。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡讥邻,死狀恐怖迫靖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兴使,我是刑警寧澤系宜,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站发魄,受9級特大地震影響盹牧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜励幼,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一汰寓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赏淌,春花似錦踩寇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掷贾,卻和暖如春睛榄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背想帅。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工场靴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人港准。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓旨剥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浅缸。 傳聞我的和親對象是個殘疾皇子轨帜,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容