电子调整无框窗口的大小

Mic*_*rtz 5 javascript window resizable electron

我正在开发一个具有无框架窗口且具有html5视频元素的应用程序,该元素显示以100%填充document.body的网络摄像头。

我已mainWindow设置为可调整大小,mainWindow.isResizable(true)但无法调整窗口大小。

当我使用chrome dev工具进行调试时,只能调整侧面chrome dev工具打开时的窗口大小。(不确定是否有帮助,但是我正在基于Ubuntu 14.04的称为发行版Elementary OS Freya的Linux发行版上进行开发)

有人可以解释为什么即使将mainWindow设置为可调整大小后,我也无法调整其可调整大小的窗口吗?

另外我该怎么做才能解决这个问题?

var app = require("app");
var BrowserWindow = require("browser-window");

var mainWindow = null;

// Quit when all windows are closed.
app.on("window-all-closed", function() {
  app.quit();
});

app.on("ready", function() {
  mainWindow = new BrowserWindow({
    width: 640,
    height: 480,
    frame: false
  });
  mainWindow.loadUrl("file://" + __dirname + "/index.html");

  // Set Window Resizable
  mainWindow.isResizable(true);

  mainWindow.focus();
});
Run Code Online (Sandbox Code Playgroud)

Mic*_*rtz 6

我设法弄清楚问题是什么,然后发现这根本不是JavaScript问题,我所要做的就是修改CSS以实现我想要的可拖动对象和不想要的对象。

因为我的html和body也都设置为可拖动,所以我无法调整大小。这是我的解决方案...

我必须创建一个新元素(div.dialog)并将其内容包含在其中。以及以下CSS。

.dialog {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: #000;
  background: rgba(0, 0, 0, 0.5);
  -webkit-app-region: no-drag;
}
.tips {
  position: absolute;
  top: 4px;
  left: 4px;
  right: 4px;
  bottom: 4px;
  -webkit-app-region: drag;
}
Run Code Online (Sandbox Code Playgroud)

HTML

<div class="dialog" data-action="toggle">
  <header class="tips" data-action="toggle">
    <div>
      <nav>
        [Space] for Snapshot<br>
        [Esc] to Close
        <p data-action="toggle-tips">[Tab] to Toggle Dialog</p>
      </nav>
    </div>
  </header>
</div>
Run Code Online (Sandbox Code Playgroud)


Omk*_*jam 6

/sf/answers/2302846591/ 中提到的答案是可以的,但还有另一种方法不会影响您的任何其他样式,并且可以放在您拥有的任何无框窗口中。 使用电子创建的VS Code使用类似的方法来允许从标题调整大小。

因此,您通常具有如下结构,标题栏具有-webkit-app-region: drag;

.title-bar {
  display: flex;
  height: 30px;
  border: 1px solid gray;
  align-items: center;
  -webkit-app-region: drag;
}

.title {
  margin-left: 10px;
}

.title-bar-btns {
  margin-left: auto;
  -webkit-app-region: no-drag;
}
Run Code Online (Sandbox Code Playgroud)
<div class="title-bar">
  <div class="title">Window Header</div>
  <div class="title-bar-btns">
    <button id="min-btn">-</button>
    <button id="max-btn">+</button>
    <button id="close-btn">x</button>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

现在,您可以titlebar-drag-region在标题栏中添加一个带有类的 div ,设置position:relative;为标题栏并-webkit-app-region: drag;从中删除。

什么.titlebar-drag-region所做的是,它创建一个可拖动的区域,该区域在尺寸稍短相比标题(标题栏)。我们在边框处留下的 6px 间隙用于调整大小。就是这样。您将拥有一个可拖动以及从所有边缘调整大小的标题。 在此处输入图片说明

因此,只需创建.titlebar-drag-region一次,然后<div class="titlebar-drag-region">放入所有窗口的标题。

.titlebar-drag-region {  /*added*/
  top: 6px;
  left: 6px;
  display: block;
  position: absolute;
  width: calc(100% - 12px);
  height: calc(100% - 6px);
  z-index: -1;
  -webkit-app-region: drag;
}

.title-bar {
  display: flex;
  height: 30px;
  border: 1px solid gray;
  align-items: center;
  position: relative;  /*added*/
  /*-webkit-app-region: drag;*/  /*removed*/
}

.title {
  margin-left: 10px;
}

.title-bar-btns {
  margin-left: auto;
  -webkit-app-region: no-drag;
}
Run Code Online (Sandbox Code Playgroud)
<div class="title-bar">
  <div class="titlebar-drag-region"></div>  <! –– added ––>
  <div class="title">Window Header</div>
  <div class="title-bar-btns">
    <button id="min-btn">-</button>
    <button id="max-btn">+</button>
    <button id="close-btn">x</button>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


小智 5

您使用的方法错误:

mainWindow.setResizable(false) 设置是否可以由用户手动调整窗口大小。

mainWindow.isResizable() 返回一个布尔值-用户是否可以手动调整窗口的大小。