zoukankan      html  css  js  c++  java
  • 无框窗口 | Frameless Window (Frameless Window) – Electron 中文开发手册

    [

    无框窗口 | Frameless Window (Frameless Window) - Electron 中文开发手册
    打开一个没有工具栏、边框或其他图形“铬”的窗口。无框窗口是没有镶边的窗口,窗口的部分(如工具栏)不属于网页的一部分。这些是BrowserWindow类的选择。

    创建无框架窗口

    要创建一个无框窗,你需要设置frame到false在BrowserWindow的options:

    const {BrowserWindow} = require('electron')
    let win = new BrowserWindow({ 800, height: 600, frame: false})
    win.show()

    MacOS上的备选方案

    在MacOS 10.9 Mavericks和更新的版本中,有一种指定无铬窗口的替代方法。您可能希望隐藏标题栏,并将内容扩展为完整的窗口大小,但仍保留标准窗口操作的窗口控件(“交通信号灯”),而不是将其设置frame为false禁用标题栏和窗口控件。您可以通过指定titleBarStyle选项来执行此操作:

    hidden

    结果在一个隐藏的标题栏和一个全尺寸的内容窗口中,但标题栏仍然在左上角具有标准窗口控件(“交通信号灯”)。

    const {BrowserWindow} = require('electron')
    let win = new BrowserWindow({titleBarStyle: 'hidden'})
    win.show()

    hiddenInset

    结果在一个隐藏的标题栏中,另一种方式是交通灯按钮从窗口边缘稍微嵌入。

    const {BrowserWindow} = require('electron')
    let win = new BrowserWindow({titleBarStyle: 'hiddenInset'})
    win.show()

    customButtonsOnHover

    使用自定义绘制关闭、小型化和全屏按钮,这些按钮在窗口左上角悬停时显示。这些自定义按钮可防止标准窗口工具栏按钮发生鼠标事件的问题。此选项仅适用于无框架窗口。

    const {BrowserWindow} = require('electron')
    let win = new BrowserWindow({titleBarStyle: 'customButtonsOnHover', frame: false})
    win.show()

    透明窗

    通过设置transparent选择true,您还可以使无框窗口透明:

    const {BrowserWindow} = require('electron')
    let win = new BrowserWindow({transparent: true, frame: false})
    win.show()

    局限性

    您无法点击透明区域。我们将介绍一个API来设置窗口形状来解决这个问题,请参阅我们的问题以获取详细信息。透明窗口不可调整大小。设置resizable为true可以使某个平台上的透明窗口停止工作。该blur过滤器仅适用于网页,因此无法对窗口下方的内容(即在用户系统上打开的其他应用程序)应用模糊效果。在Windows操作系统上,禁用DWM时透明窗口将无法工作。在Linux上,用户必须--enable-transparent-visuals --disable-gpu在命令行中禁用GPU,并允许ARGB创建透明窗口,这是由于Alpha通道在Linux 上的某些NVidia驱动程序上无法运行的上游缺陷造成的。在Mac上,本机窗口阴影将不会显示在透明窗口上。

    点击窗口

    要创建一个点击窗口,即让窗口忽略所有鼠标事件,可以调用win.setIgnoreMouseEvents(ignore)API:

    const {BrowserWindow} = require('electron')
    let win = new BrowserWindow()
    win.setIgnoreMouseEvents(true)

    拖曳区

    默认情况下,无框窗口是不可拖动的。 应用程序需要指定-webkit-app-region:在CSS中拖动以告诉Electron哪些区域是可拖动的(如操作系统的标准标题栏),应用程序也可以使用-webkit-app-region:no-drag来排除不可拖动 来自可拖动区域的区域。 请注意,目前只支持矩形形状。注意:-webkit-app-region: drag在开发人员工具打开时,已知存在问题。有关更多信息(包括解决方法),请参阅此GitHub问题。要使整个窗口可拖动,可以添加-webkit-app-region: drag如body的样式:

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

    请注意,如果已使整个窗口可拖动,则还必须将按钮标记为不可拖动,否则用户将不可能单击这些按钮:

    button {
      -webkit-app-region: no-drag;
    }

    如果您只是设置一个自定义标题栏为可拖动,您还需要使所有按钮在标题栏不可拖。

    文本选择

    在无框架窗口中,拖动行为可能与选择文本冲突。例如,当拖动标题栏时,可能会意外地选择标题栏上的文本。要防止出现这种情况,需要在以下可拖动区域内禁用文本选择:

    .titlebar {
      -webkit-user-select: none;
      -webkit-app-region: drag;
    }

    上下文菜单

    在某些平台上,可拖动区域将被视为非客户端框架,因此当您右键单击它时,系统菜单将弹出。要使上下文菜单在所有平台上正确运行,您不应该在可拖放的区域上使用自定义上下文菜单。

    ]
    转载请保留页面地址:https://www.breakyizhan.com/javascript/25882.html
  • 相关阅读:
    puppeteer,新款headless chrome!
    圣诞快乐,而且写博客有两年了~
    es2015及es2017对我们的编程方式造成了什么影响?
    Redis的安装和部署
    ActiveMQ5.0实战三:使用Spring发送,消费topic和queue消息
    hsweb 企业后台管理基础框架
    通过Spring Session实现新一代的Session管理
    mod_pagespeed
    unusedjs
    apache模块 合并多个js/css 提高网页加载速度
  • 原文地址:https://www.cnblogs.com/breakyizhan/p/13282702.html
Copyright © 2011-2022 走看看