电子调整无框尺寸 Window
Electron Resizing a Frameless Window
我正在开发一款具有无框 window 和 html5 视频元素的应用程序,该元素显示网络摄像头以 100% 填充 document.body。
我将 mainWindow
设置为可调整大小 mainWindow.isResizable(true)
但我无法调整 window。
当我使用 chrome 开发工具进行调试时,我只能调整 window 一侧 chrome 开发工具打开的大小。 (不确定它是否有帮助,但我正在基于 Ubuntu 14.04 的 Linux 发行版上开发它,称为 Elementary OS Freya)
有人可以解释为什么我无法调整我的可调整大小 window 即使我将我的 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();
});
我设法找出问题所在,后来发现它甚至不是 javascript 问题,我所要做的就是 mod 我的 CSS对于我想要可拖动的和我不需要的。
因为我的 html 和正文也设置为可拖动,所以我无法调整大小。这是我的解决方案...
我必须创建一个新元素 (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;
}
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>
您使用的方法有误:
mainWindow.setResizable(false)
设置 window 是否可以由用户手动调整大小。
mainWindow.isResizable()
Returns 布尔值 - window 是否可以由用户手动调整大小。
https://whosebug.com/a/32897808/11167389 中提到的答案没问题,但还有另一种方法不会影响您的任何其他风格,并且可以在您拥有的任何无框架 window 中删除。
使用电子创建的 VS Code 使用类似的方法允许从 header 调整大小。
因此,您的结构大多如下 title-bar 具有 -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;
}
<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>
现在,您可以在 title-bar 中添加带有 class titlebar-drag-region
的 div,将 position:relative;
设置为 title-bar 并删除 -webkit-app-region: drag;
来自它。
.titlebar-drag-region
的作用是创建一个可拖动区域,与 header (title-bar) 相比,该区域的尺寸略短。我们在边界留下的 6px 间隙然后用于调整大小。就是这样。您将拥有一个 header ,它可以拖动并且可以从所有边缘调整大小。
因此,只需创建 .titlebar-drag-region
一次,然后将 <div class="titlebar-drag-region">
放入所有 windows 的 header 中。
.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;
}
<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>
我正在开发一款具有无框 window 和 html5 视频元素的应用程序,该元素显示网络摄像头以 100% 填充 document.body。
我将 mainWindow
设置为可调整大小 mainWindow.isResizable(true)
但我无法调整 window。
当我使用 chrome 开发工具进行调试时,我只能调整 window 一侧 chrome 开发工具打开的大小。 (不确定它是否有帮助,但我正在基于 Ubuntu 14.04 的 Linux 发行版上开发它,称为 Elementary OS Freya)
有人可以解释为什么我无法调整我的可调整大小 window 即使我将我的 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();
});
我设法找出问题所在,后来发现它甚至不是 javascript 问题,我所要做的就是 mod 我的 CSS对于我想要可拖动的和我不需要的。
因为我的 html 和正文也设置为可拖动,所以我无法调整大小。这是我的解决方案...
我必须创建一个新元素 (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;
}
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>
您使用的方法有误:
mainWindow.setResizable(false)
设置 window 是否可以由用户手动调整大小。
mainWindow.isResizable()
Returns 布尔值 - window 是否可以由用户手动调整大小。
https://whosebug.com/a/32897808/11167389 中提到的答案没问题,但还有另一种方法不会影响您的任何其他风格,并且可以在您拥有的任何无框架 window 中删除。 使用电子创建的 VS Code 使用类似的方法允许从 header 调整大小。
因此,您的结构大多如下 title-bar 具有 -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;
}
<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>
现在,您可以在 title-bar 中添加带有 class titlebar-drag-region
的 div,将 position:relative;
设置为 title-bar 并删除 -webkit-app-region: drag;
来自它。
.titlebar-drag-region
的作用是创建一个可拖动区域,与 header (title-bar) 相比,该区域的尺寸略短。我们在边界留下的 6px 间隙然后用于调整大小。就是这样。您将拥有一个 header ,它可以拖动并且可以从所有边缘调整大小。
因此,只需创建 .titlebar-drag-region
一次,然后将 <div class="titlebar-drag-region">
放入所有 windows 的 header 中。
.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;
}
<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>