本文概述
- 实现
- 重要笔记
- 例子
const {BrowserWindow} = require('electron')let win = new BrowserWindow({width: 800, height: 600, transparent:true, frame: false})win.show()
最好, 如果透明窗口是唯一的且是初始的, 则应在main.js文件中进行更改:
function createWindow () {// Create the browser window.mainWindow = new BrowserWindow({width: 800, height: 600, transparent: true, frame:false})// and load the index.html of the app.mainWindow.loadURL(`file://${__dirname}/index.html`)// Open the DevTools.//mainWindow.webContents.openDevTools()// Emitted when the window is closed.mainWindow.on('closed', function () {// Dereference the window object, usually you would store windows// in an array if your app supports multi windows, this is the time// when you should delete the corresponding element.mainWindow = null})}
那应该已经使你的窗口透明。将以下标记设置为index.html文件的内容:
<
!DOCTYPE html>
<
html>
<
head>
<
meta charset="UTF-8">
<
title>
Transparent Window<
/title>
<
/head>
<
body>
<
div>
<
img src="http://ourcodeworld.com/resources/img/ocw-empty.png" width="300" height="300"/>
<
/div>
<
/body>
<
/html>
并使用npm start执行项目, 你的应用程序将如下所示:
文章图片
如你所见, 该窗口是完全透明的, 并且你可以在后台看到VSCode。
局限性
- 你不能单击透明区域。我们将引入一个API来设置窗口形状以解决此问题, 有关详细信息, 请参见该问题。
- 透明窗口不可调整大小。将resizable设置为true可能会使透明窗口在某些平台上停止工作。
- 模糊过滤器仅适用于网页, 因此无法将模糊效果应用于窗口下方的内容(即在用户系统上打开的其他应用程序)。
- 在Windows操作系统上, 禁用DWM时透明窗口将不起作用。
- 在Linux上, 用户必须在命令行中添加– enable-transparent-visuals – disable-gpu以禁用GPU并允许ARGB生成透明窗口, 这是由上游错误导致的, 该错误是Alpha通道在某些NVidia上不起作用Linux上的驱动程序。
- 在Mac上, 本机窗口阴影不会显示在透明窗口上。
【如何使用Electron Framework创建透明窗口】可能没有人想要不能移动的静态窗口, 因此可以使用CSS将拖动功能拖放到元素上:
.draggable-area{-webkit-app-region: drag;
}
通过将draggable-area类添加到任何元素, 它将允许用户从该点拖动整个窗口。在某些平台上, 可拖动区域将被视为非客户端框架, 因此, 当你右键单击它时, 将弹出一个系统菜单。为了使上下文菜单在所有平台上都能正常运行, 你永远不要在可拖动区域使用自定义上下文菜单。
例子 以下文档将创建一个非常简单的透明窗口, 其中包含几个按钮操作和一个可拖动区域:
<
!DOCTYPE html>
<
html>
<
head>
<
meta charset="UTF-8">
<
title>
Transparent Window<
/title>
<
style>
.draggable-area{width:300px;
height:300px;
background-color:blue;
color:white;
-webkit-app-region: drag;
}<
/style>
<
/head>
<
body>
<
div>
<
img src="http://ourcodeworld.com/resources/img/ocw-empty.png" width="300" height="300"/>
<
div>
<
input type="button" id="close" value="http://www.srcmini.com/Close app"/>
<
input type="button" id="devtools" value="http://www.srcmini.com/Open DEV Tools"/>
<
div class="draggable-area">
Drag the window here<
/div>
<
/div>
<
/div>
<
script>
var app = require('electron').remote;
// Close app document.getElementById("close").addEventListener("click", () =>
{app.BrowserWindow.getFocusedWindow().close();
}, false);
// Close app document.getElementById("devtools").addEventListener("click", () =>
{app.BrowserWindow.getFocusedWindow().openDevTools();
}, false);
<
/script>
<
/body>
<
/html>
先前的标记应生成一个类似以下的应用:
文章图片
玩得开心 !
推荐阅读
- 如何在Electron Framework中使用最小化,最大化和关闭控件创建自定义无框架窗口(无标题栏)
- 如何在Electron Framework中实现和启用语法和拼写检查器
- 如何使用Kali Linux通过字典攻击来入侵Wi-Fi网络(WPA/WPA2)
- 使用intent和get方法时Android应用程序崩溃
- 泄露的意图接收器rxAndroidble UPDATED
- Whatsapp喜欢通过短信实现邀请,只是短信,而不是通过意图选择器
- java.lang.ClassCastException(在尝试通过Instagram共享打印屏幕时,无法将byte []强制转换为android.os.Parcelable错误)
- android.net.wifi.STATE_CHANGE意图处理(在Activity中)
- Android Photo Gallery不会从OnActivityResult中的数据返回正确的Uri