当前位置: 首页 > 后端技术 > Node.js

electron-vue开发音乐播放器窗口的mini模式

时间:2023-04-03 18:50:56 Node.js

在electron-vue窗口的mini模式electron中打开一个新窗口,通常是打开一个新的html页面。vue是单页,只有一个入口文件,它的路由跳转是H5所在的位置;想象添加一个新的入口文件,也就是添加一个新的html,但是这样就失去了单页的功能,Vue无法在两个不同的html中运行该方法。我个人的方法是在子窗口打开同一个html文件,但是路由地址不同。不,为了布局这些,设置了窗口的最小尺寸。设置后,窗口的setSize方法的宽高如果小于最小宽高则无效。最小化只能创建一个新窗口实现//main/index.jsfunctioncreateWindow(){//初始化窗口为mainWindow,省略BrowserWindow.mainWindow=mainW;//必须加上判断是否创建新的子窗口,否则会继续创建BrowserWindow.miniWindow=null;}//监听窗口状态ipc.on('winreduction',(event,state)=>{//监听从mini窗口变回原来的大小if(state=='mini'){//主要是这里,发送一个窗口从mini模式恢复到原来的大小,eventemitevent.sender.send('full','reduction')frommini.vue}else{mainWindow.unmaximize();}event.sender.send('statechange','reduction');})//app.vue//在appvue中创建一个新的子窗口constelectron=require("electron");constipc=electron.ipcRenderer;constcurrWin=electron.remote.getCurrentWindow();import{setTimeout,clearTimeout,setImmediate}from"timers";让miniWindow=null;函数createMiniWin(){让miniWindow=newelectron.remote.BrowserWindow({width:280,height:48,frame:false,titleBarStyle:"hidden",//macOsuseContentSize:true,show:false,center:true,resizable:false,webPreferences:{webSecurity:false//禁用同源策略}});让winURL=window.location.href;让uri=winURL+winURL.substring(0,winURL.indexOf("#")+1);如果(/#/.test(uri)){uri+="mini";}else{uri+="#/mini";}miniWindow.loadURL(uri);miniWindow.once("ready-to-show",()=>{miniWindow.hide();//mainWindow.setAlwaysOnTop(true,'status');//总是在顶部if(miniWindow.moveTop){miniWindow.moveTop();}});miniWindow.on("closed",()=>{miniWindow=null;});returnminiWindow;}//这是在index中设置BrowserWindow.miniWindow的原因,这样只会创建一次=createMiniWin();ipc.send("迷你创建",miniWindow);}exportdefault{name:'app',data(){return{state:"reduction",}},mounted(){ipc.on("statechange",(event,data)=>{this.state=data;mainWindow:electron.remote.BrowserWindow.mainWindow,miniWindow:electron.remote.BrowserWindow.miniWindow,});ipc.on("full",(event,state)=>{this.state=状态;/*这是一个陷阱,我本来以为路由会跳回,但是会造成窗口延迟,就像打开网页一样,因为我正在学习和使用,所以没有看到所有的API.找了半天终于找到了back的goBack方法,没有延迟,感觉和原来一样*/this.mainWindow.webContents.goBack();//minihides,maindisplaysthis.miniWindow.hide();this.mainWindow.show();});},//省略watch:{state(old,news){if(old=="mini"){//点击缩小按钮,路由跳转到mini,并隐藏主窗口,迷你窗口显示this.$router.push({name:"mini"});this.miniShow();}}}}//mini.vueconstelectron=require("electron");constremote=electron.remote;constipc=electron.ipcRenderer;exportdefault{name:"mini",data(){return{mainWindow:remote.BrowserWindow.mainWindow,};},created(){},方法:{close(){ipc.send("winclose");},full(){ipc.send("winreduction","mini");//发送迷你窗口变回原来的大小}}};效果如图,mini还没画出来,请在线告知electron实现播放器。找了很久也没办法小型化。花了很多时间。然后还有一个问题,读取本地文件夹,也就是上图中打开本地文件时如何读取音乐,获取时长、信息、作者、专辑。我使用的是ffmpeg模块,但是随之而来的是必须先安装ffmpeg才能使用。我们最终打包了不同的客户端。不可能强迫客户安装其他软件来使用我们的应用程序。网上没有解决的例子,不知道c、c++或者其他具体的方法下一篇