效果如下图

原生的如下图(原生的用在自己的app上面太丑了,并且还带边框,所以重写了左上角的三个功能键)

1.首先了解一下nw底下的package.json 文件

{
"name": "nw-quick-start-demo", //(字符串)包的名字,必须为独一无二的,可由字母,数字,下划线组成,不能有空格。(
"version": "0.0.1",
"main": "app/test/dist/index.html",//字符串)当node-webkit打开时的默认页面。
"single-instance":false,
"node.js": true, //(布尔型)nodejs是否node-webkit中启用。
"window": { //控制窗口的样子
"icon": "app/images/logo.png", //(字符串)图标的路径。
"toolbar": true, //(布尔值)是否显示工具栏。
"title": "zm", //(字符串)默认打开的窗口的名字。
"resizable":true, //(字符串)只可能是这么几个值null center mouse。null指无定位,center指在显示器中间,mouse指在鼠标的位置。
"show_in_taskbar":true, //(布尔值)是否在任务栏上显示。
"position": "center",
"frame": false, //(布尔值)是否显示窗口框架。
"width": 430, //定义窗口的宽高
"height": 350,
"resizable":false //(布尔值)窗口是否可调整大小。
},
"webkit": { //控制webkit特性是否启用
"plugin": true
},
"dependencies": {
"vue-router": "^2.3.0"
}
}

 2.无窗口模式下实现可以拖拽 

如果frame 为false的话。程序将无边框显示。无边框显示则无法执行拖拽等功能。

可以设置以下代码让窗口可以拖拽

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

 但是统一在body加上这个样式的话可以拖拽了,但是所有点击等事件都会失去焦点了。

解决方法:就是在头部header元素加上可以拖拽样式。但是header里面的按钮等带有事件的元素加上样式【-webkit-app-region:no-drag;】让带有事件的元素可以点击。

3.无窗口模式下实现窗口最大化最小化关闭等 窗口功能键

html代码写好样式(项目中使用vue和ES6 所以事件的调用方法是用vue的)
<div id="toolBtns"  class="noDrag" @click="focusWindow()"> //功能键上必须加上不可以拖拽样式,不然点击没有反应
<a href="javascript:;" class="noDrag" @click="miniWindow()"><i id="minisizeBtn"></i></a>
<a href="javascript:;" class="noDrag mr-10 ml-10" @click="resizeWindow()"><i id="resizeBtn"></i> </a>
<a href="javascript:;" class="noDrag" @click="closeWindow()"><i id="closeBtn"></i> </a> </div>

  js实现

//node-webkit带有丰富的api,可以直接调用api来调整窗口
var gui = require('nw.gui'); //要访问api 首先需要先加载“nw.gui”模块
var win = gui.Window.get(); //需要将其功能添加到窗口 用get(),通过win.则可获取窗口对象
var flag=1;
console.log(gui);
win.on('resize', function () { //resize对象在窗体大小被重置时触发的事件。把标志放在resize中改变大小,
//目的是为了不让拖拽让窗口变大变小后影响 最大化最小化功能键的功能
if(flag==1) {
flag=0;
}else {
flag=1;
}
})
//功能键点击事件
miniWindow() { //实现窗口的最小化
win.minimize();
},
closeWindow() { //实现窗口的关闭
win.close();
},
resizeWindow() { //实现窗口的最大化最小化,通过全局的flag来控制不受拖拽影响
if(flag==1) {
//win.enterFullscreen();
win.maximize(); //窗口最大化事件。
}else {
win.restore(); //恢复窗口到上一状态。
}
},

  注意:如果功能键事件没有写在启动文件里面时,加载“nw.gui”模块 依旧需要写在启动文件里面,不然获取不到!

附上nw.js的中文学习文档 https://wizardforcel.gitbooks.io/nwjs-doc/content/wiki/index.html共勉。

node-webkit学习之【无边框窗口用JS实现拖动改变大小等】的更多相关文章

  1. 【Qt编程】基于Qt的词典开发系列<四>--无边框窗口的缩放与拖动

    在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词 ...

  2. PyQt4中无边框窗口的移动(拖动)

    import sys from PyQt4.QtGui import * from PyQt4.Qt import * from PyQt4.QtCore import * class AboutUs ...

  3. node-webkit无边框窗口用纯JS实现拖动改变大小

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head>     & ...

  4. 【Qt编程】基于Qt的词典开发系列<五>--无边框窗口的拖动

    在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口 ...

  5. WPF系列:无边框窗口

    <Window x:Class="Ares.Animations.Window3" xmlns="http://schemas.microsoft.com/winf ...

  6. 让Qt的无边框窗口支持拖拽、Aero Snap、窗口阴影等特性

    环境:Desktop Qt 5.4.1 MSVC2013 32bit 需要的库:dwmapi.lib .user32.lib 需要头文件:<dwmapi.h> .<windowsx. ...

  7. Qt5:无边框窗口拖动

    在窗口程序中,无边框窗口程序一般需要特殊处理才能拖动 Qt中,要实现无边框窗口的拖动,需要重新实现 mousePressEvent 和 mouseMoveEvent 俩虚函数 void Widget: ...

  8. [Winform]无边框窗口悬浮右下角并可以拖拽移动

    摘要 简单实现了一个这样的功能,程序启动时,窗口悬固定在右下角,并可以通过鼠标拖拽移动. 核心代码块 无边框窗口并不出现在任务栏 //无边框 this.FormBorderStyle = System ...

  9. 【转】MFC 无边框窗口的拖动

    MFC中无边框窗口的拖动 void CXXXXDialog::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDO ...

随机推荐

  1. 记录一次EF优化

    问题描述:1.第一次加载过慢(EntityFramework 6 code-first).2.一段时间间不访问页面同样变慢. 原因分析:1.第一次启动(Code First)会对比程序中的Model与 ...

  2. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-3

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 创建.查询.更新.删除 这章主要讲解使用EF完成 增删改查的功能. 自定义"详情信息"页面 我们通过基架生成的代 ...

  3. Html<img>标签特写 2017-03-10 AM

    1.插入图片 <img src="picture1.gif" width="300" height="100" title=" ...

  4. 2292: 【POJ Challenge 】永远挑战

    2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 553  Solved: 230[Submit][ ...

  5. IE浏览器下使用AJAX登陆接口请求缓存与登陆不了的问题解决

    问题: 在IE浏览器下面,登陆的时候老是登陆不上,但是打开控制台的时候再登陆却能登陆上. 分析: 通过抓包,发现,在不打开控制台的时候,少了一个接口的请求,却返回了改接口的返回信息,但是返回信息并不是 ...

  6. Android自学反思总结(中)

    后来在导员的推荐加上自己的好奇心给电脑装上了Ubuntu,因为Android的内核就是Linux,导员想让我们及早接触,及早熟悉,这也是我后来一直冷落Windows的原因,装Ubuntu的过程是艰辛的 ...

  7. 【好记性不如烂笔头】死锁之java代码

    死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称 ...

  8. 使用Struts2校验器

    今天遇到了这样的问题:我的jsp页面.web.xml.struts.xml.UserAction-validation.xml等内容写的都正确,就是无法使用校验器!在网上找了半天就是不出来,迫不得已我 ...

  9. node.js 模板 ejs 转

    node.js 模板引ejs. 搜了一把推荐用ejs的最多. 速度比对:http://www.cnblogs.com/fengmk2/archive/2011/04/28/2031971.html e ...

  10. flask mega-tutorial 1.0 documentation学习记录

    本文主要是记录在[用户登录]一节中出现的问题: 报错位置是在 if g.user is not None and g.user.is_authenticated(): return redirect( ...