电子新窗口定位

时间:2017-10-26 08:23:03

标签: position window electron

我需要知道如何打开当前窗口位置稍微偏移的新窗口(第一个窗口将在中心打开)

我的代码如下:

// index.js

const {app,BrowserWindow,Menu,MenuItem,dialog}=require('electron');

function window_open(path){
  win = new BrowserWindow({show: false})
  win.loadURL(path);
  win.once('ready-to-show', () => {win.show()})
}


let win

app.on('ready',event=>{
  'use strict';
  window_open(`file://${__dirname}/index.html`)
});

这将打开中心的初始窗口。我也在新窗口命令(cmd + n)中传递此函数

{
  label: 'File',
  submenu: [
    {label: 'New Window', accelerator: 'CmdOrCtrl+N', click: () => (
     window_open(`file://${__dirname}/index.html`))
},

代码工作正常,除了每个窗口位于中心位置相同。我希望每个新窗口都能稍微偏移。

实现这一目标的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

您可以在构造函数选项xy中定义窗口的位置。可以使用getPosition()检索当前活动窗口的位置,因此您可以从中定义新窗口的偏移量。

例如,请参阅此虚拟应用程序:

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

let win = null
app.once('ready', () => {
  const openWindow = () => {
    const opts = {
      show: false
    }
    if (win) {
      const pos = win.getPosition()
      Object.assign(opts, {
        x: pos[0] + 10,
        y: pos[1] + 10
      })
    }
    win = new BrowserWindow(opts)
    win.loadURL('http://google.com')
    let thisWin = win
    win.once('ready-to-show', () => {
      thisWin.show()
    })
  }
  setInterval(openWindow, 5000)
})

答案 1 :(得分:1)

我了解到我需要这两件事:

  1. BrowserWindow.getFocusedWindow()
  2. win.getPosition()
  3. 结合@ pergy的响应,我得到了以下代码,如果有任何偏移窗口并从其位置偏移新窗口,则会找到焦点窗口,否则在中心创建一个新窗口:

    let win = null
    function window_open(path){
      const opts = {show: false}
      if (BrowserWindow.getFocusedWindow()) {
        current_win = BrowserWindow.getFocusedWindow()
        const pos = current_win.getPosition()
        Object.assign(opts, {
          x: pos[0] + 22,
          y: pos[1] + 22
        })
      }
      win = new BrowserWindow(opts)
      win.loadURL(path)
      win.once('ready-to-show', () => {win.show()})
    }
    
    app.once('ready',event=>{
      window_open(`file://${__dirname}/index.html`)
    });
    

    这是我在原始问题中所要求的,所以我决定发布这个。但是,我觉得产生新窗口的速度很慢,所以我不会将此标记为答案,看看是否有更快的方法。

    <强>更新 我发现等待'ready-to-show'是因为等待准备状态导致它变慢。我接受了这个作为答案,因为我觉得速度问题取决于内容而不是浏览器。随意添加评论,因为我还是张开耳朵。