用electron+vue写一个悬浮窗天气挂件
electron介绍
安装环境依赖
没有安装node.js环境的,需要先安装node.js,
- 全局安装electron
npm install electron -g
2.全局安装vue-cli
npm install vue-cli
初始化工程
vue init simulatedgreg/electron-vue my-project
控制台出现downloading template,在等上几分钟之后,回答初始化要的配置就好了。
? Application Name my-project ? Application Id net.it577.weather ? Application Version 0.0.1 ? Project description An electron-vue project ? Use Sass / Scss? No ? Select which Vue plugins to install vue-electron ? Use linting with ESLint? No ? Set up unit testing with Karma + Mocha? No ? Set up end-to-end testing with Spectron + Mocha? No ? What build tool would you like to use? (Use arrow keys)
electron-builder (https://github.com/electron-userland/electron-builder) electron-packager (https://github.com/electron-userland/electron-packager)
这时候去下载eletron包去了,又是要漫长等待
运行项目
npm run dev
编写页面代码
新建一个weather.vue文件
在文件位置src enderercomponentsWeather.vue建好文件
写路由
在文件src enderer outerindex.js,加上一行
{
path: /,
name: Weather,
component: require(@/components/Weather).default
}
安装request-promise网络请求库
npm install request-promise
不使用axios是因为我不熟,还有遇到了CORS跨域问题,而request-promise却没问题。
写代码逻辑
<template>
<el-tag type="success">{
{weather}}</el-tag>
</template>
<script>
import request from request-promise
export default {
data() {
return {
weather:
}
},
mounted() {
const city = encodeURIComponent(温州)
request({
uri: `http://apis.juhe.cn/simpleWeather/query?city=${city}&key=bb888175aa5ed3bac588aa34d1eec123`,
method: GET,
json: true
}).then(res => {
this.weather = `${res.result.realtime.info} ${res.result.realtime.temperature}℃`
})
}
}
</script>
查看结果
配置
制作悬浮窗
打开文件srcmainindex.js,修改createWindow方法如下:
mainWindow = new BrowserWindow({
height: 120,
useContentSize: true,
frame: false, //要创建无边框窗口
resizable: false, //禁止窗口大小缩放
webPreferences: {
devTools: false //关闭调试工具
},
width: 160,
transparent: true, //设置透明
alwaysOnTop: true, //窗口是否总是显示在其他窗口之前
})
具体看上面的注释就可以,主要是frame这个参数设置为false
让悬浮窗可拖曳
在mounted方法里加上如下代码
let win = this.$electron.remote.getCurrentWindow()
let biasX = 0
let biasY = 0
let that = this;
document.addEventListener(mousedown, function (e) {
switch (e.button) {
case 0:
biasX = e.x
biasY = e.y
document.addEventListener(mousemove, moveEvent);
break
case 2:
that.$electron.ipcRenderer.send(createSuspensionMenu);
break
}
})
document.addEventListener(mouseup, function () {
biasX = 0
biasY = 0
document.removeEventListener(mousemove, moveEvent)
})
function moveEvent(e) {
win.setPosition(e.screenX - biasX, e.screenY - biasY)
}
修改窗口标题
修改srcindex.ejs的title标签,<title>我的天气</title>
修改打包exe的应用名称
打开package.json文件,修改如下
"build": {
"productName": "BTC",
}
修改图标
打开项目下buildicons文件夹,换成自己的图标,ico图标可以通过在线网站制作,
打包exe安装
npm build
打包后的安装包在目录uild下
