美文网首页Electron
用electron写应用

用electron写应用

作者: 休息了亲 | 来源:发表于2019-10-31 22:37 被阅读0次

    从一个简单的应用开始:

    main.js :

    const { app,BrowserWindow } = require('electron');
    app.on('ready',function(){
      // 创建窗口
      let win = new BrowserWindow ();
      // 窗口内加载本地html文件,也可以通过win.loadURL('https://github.com')加载远程url
      win.loadFile('index.html');
    })
    
    

    index.html :

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <h1>HELLO WORLD</h1>
    </body>
    </html>
    
    

    npm start结果 :

    如何创建一个无边框的窗口:

    main.js :

    const { app,BrowserWindow } = require('electron');
    app.on('ready',function(){
      let win = new BrowserWindow ({
          //这里设置,
          frame : false
      });
      win.loadFile('index.html');
    })
    
    

    有边框窗口,我们可以鼠标按住标题栏进行拖拽。无边框窗口因为没有标题栏,我们无法进行拖拽。

    无边框窗体可拖拽及一些问题

    可拖拽设置是在渲染窗口上进行设置,也就是在index.html这个文件中进行设置。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
        <style>
            html,body{
                height: 100%;
            }
            body{
                margin: 0;
                /* 设置body可拖拽 */
                -webkit-app-region: drag;
            }
        </style>
    </head>
    <body>
        <h1>HELLO WORLD</h1>
    </body>
    </html>
    

    这样设置后,无边框窗口就可以拖拽了。

    问题:鼠标事件无法触发

    这样设置后,我们是可以拖拽了。但是,当我们创建个按钮时,就会发现,按钮事件无法触发。
    我们可以试试:

    main.js :

    const { app,BrowserWindow } = require('electron');
    app.on('ready',function(){
      let win = new BrowserWindow ({
        frame : false,
      });
      win.loadFile('index.html');
      //开启调试
      win.webContents.openDevTools();
    })
    

    index.html :

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
        <style>
            html,body{
                height: 100%;
            }
            body{
                margin: 0;
                -webkit-app-region: drag;
            }
        </style>
    </head>
    <body>
        <h1>HELLO WORLD</h1>
        <button type="submit">aa</button>
    </body>
    <script>
        let btn = document.querySelector("button");
        btn.addEventListener('click',function(){
            console.log("111")
        })
    </script>
    </html>
    

    运行后,发现按钮无法被触发。

    解决方法:

    我们可以将需要触发事件的地方取消可拖拽。

    button{
         -webkit-app-region: none;
    }
    

    这样,按钮就可以触发事件了。

    圆形无边框窗体

    主进程窗体控制中,并没有设置窗体圆角的选项。但是有个特别的设置项transparent透明。
    所以,我们的思路就是将窗体设为透明,然后在渲染页面添加一个有背景颜色的div,最后将这个div设置成圆角就实现了。

    main.js :

    const { app,BrowserWindow } = require('electron');
    app.on('ready',function(){
      let win = new BrowserWindow ({
        frame : false,
        //设置一个宽、高为500px的窗体
        width : 500,
        height : 500,
        //透明窗体
        // transparent : true,
        //取消最大化
        //maximizable : false,
        webPreferences : {
          nodeIntegration : true,
        }
      });
      win.loadFile('index.html');
    })
    

    index.html :

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
        <style>
            body{
                margin: 0;
                -webkit-app-region: drag;
            }
            .circular{
                width: 500px;
                height: 500px;
                border-radius: 50%;
                background-color: #ffc540;
            }
        </style>
    </head>
    <body>
        <!-- <h1>HELLO WORLD</h1> -->
        <div class="circular">
    
        </div>
    </body>
    <script>
        
    </script>
    </html>
    
    未设置透明的窗体 设置透明后窗体

    细心的会发现,说圆形窗体是不准确的。它仍是矩形窗体,只是四个边透明了而已。当用鼠标拖拽透明部分,仍然可以拖动。

    取消鼠标双击放大

    我们完成这个以后,鼠标双击窗体,窗体变成最大化。这个圆形的div就原形毕露了,圆形跑到屏幕的左上角了。所以,我们不想鼠标双击窗体最大化。

    解决方法:

    在创建窗体的配置中加入maximizable : false就可以禁止窗体放大。注意,这个是禁止窗体最大化,不是取消鼠标双击事件。我们可以在窗体上右键,就会发现最大化选项是灰色(无法选择的)。

    相关文章

      网友评论

        本文标题:用electron写应用

        本文链接:https://www.haomeiwen.com/subject/stotbctx.html