electron13+vite2+elementPlus仿mac桌面

概述

运用最新前端技术Vite2.x+Electron+ElementPlus+Echarts等技术构架开发跨端仿Mac桌面管理系统ElectronMacUI | 基于vue3+electron13模仿Mac桌面UI客户端。

详细

一、项目介绍

基于vite.js框架整合electron.js跨端技术开发一款类似mac big sur11桌面管理系统EXE平台。

二、效果预览

p3.gif

三、功能特点

✅经典的图标+dock菜单模式

✅流畅的操作体验

✅可拖拽桌面+dock菜单

✅符合macOS big sur操作窗口管理

✅丰富的视觉效果,自定义桌面壁纸

✅可视化创建多窗口,支持拖拽/缩放/最大化,可传入自定义组件页面。

360截图20210624102026720.png

四、实现过程

①、electron创建无边框窗口

为了保持整体项目UI的一致性,窗口采用了无边框模式 frame:false
顶部导航条采用自定义组件实现功能。同时支持自定义标题、背景及文字颜色等功能。

<template>
    <WinBar bgcolor="rgba(39,39,39,.5)" color="#fff" zIndex="1010">
        <template #menu>
            ...
            <el-dropdown placement="bottom-start" @command="handleMenuClicked">
                <a class="menu menu-label">首页</a>
                <template #dropdown>
                    <el-dropdown-menu>
                        <el-dropdown-item command="home">首页</el-dropdown-item>
                        <el-dropdown-item command="dashboard">控制台</el-dropdown-item>
                        <el-dropdown-item command="breadnav">自定义面包屑导航</el-dropdown-item>
                    </el-dropdown-menu>
                </template>
            </el-dropdown>
            ...
        </template>
        <template #wbtn>
            <MsgMenu />
            <a class="menu" title="换肤" @click="handleSkinWin"><i class="iconfont el-icon-magic-stick"></i></a>
            <a class="menu" :class="{'on': isAlwaysOnTop}" :title="isAlwaysOnTop ? '取消置顶' : '置顶'" @click="handleAlwaysTop"><i class="iconfont icon-ding"></i></a>
            <a class="menu" title="搜索"><i class="iconfont el-icon-search"></i></a>
            <Setting />
            <a class="menu menu-label">{{currentDate}}</a>
            <el-divider direction="vertical" />
            <Avatar @logout="handleLogout" />
            <el-divider direction="vertical" />
        </template>
    </WinBar>
</template>
②、electron实现mac桌面

如下图:项目中桌面模块分为顶部导航+桌面菜单+底部鱼眼dock菜单三个区域。

<template>
    <div class="macui__wrapper" :style="{'--themeSkin': store.state.skin}">
        <div v-if="!route.meta.isNewin" class="macui__layouts-main flexbox flex-col">
            <!-- //顶部导航 -->
            <div class="layout__topbar">
                <TopNav />
            </div>
             
            <div class="layout__workpanel flex1 flexbox" @contextmenu="handleCtxMenu">
                <div class="panel__mainlayer flex1 flexbox" style="margin-bottom: 70px;">
                    <DeskMenu />
                </div>
            </div>
 
            <!-- //底部Dock菜单 -->
            <Dock />
        </div>
        <router-view v-else class="macui__layouts-main flexbox flex-col macui__filter"></router-view>
    </div>
</template>

</template>

③、electron+vue3实现鱼眼dock效果

 

preview

项目中很多地方都使用了毛玻璃模糊效果。

<template>
    <div class="macui__dock">
        <div class="macui__dock-wrap macui__filter" ref="dockRef">
            <a class="macui__dock-item"><span class="tooltips">appstore</span><img src="/static/mac/appstore.png" /></a>
            <a class="macui__dock-item active"><span class="tooltips">launchpad</span><img src="/static/mac/launchpad.png" /></a>
            ...
        </div>
    </div>
</template>

五、项目结构目录

360截图20210623181546491.png

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
为了实现Electron+Vue3+Vite仿微信截图功能,你可以按照以下步骤进行: 1.首先,需要在项目中安装electron-screenshots依赖,可以在终端中使用以下命令进行安装: ```shell npm install electron-screenshots --save ``` 2.在vite.config.js中配置externals,将electron-screenshots作为外部依赖项引入: ```javascript // vite.config.js module.exports = { // ... externals: { "electron-screenshots": 'require("electron-screenshots")' } } ``` 3.在主进程中引入initScreenshoots函数并在应用程序准备就绪后调用该函数: ```javascript // main.js const { app } = require('electron') const { initScreenshoots } = require('./screenshoots') app.whenReady().then(() => { // 初始化截图工具 initScreenshoots() }) ``` 4.在渲染进程中创建一个截图组件,并在需要截图时调用该组件的截图方法: ```vue <template> <div> <button @click="takeScreenshot">截图</button> <img :src="screenshot" v-if="screenshot" /> </div> </template> <script> import { ref } from 'vue' import { remote } from 'electron' export default { setup() { const screenshot = ref(null) const takeScreenshot = async () => { const { screen } = remote const { width, height } = screen.getPrimaryDisplay().workAreaSize const image = await window.electronScreenshots.captureScreen({ x: 0, y: 0, width, height }) screenshot.value = `data:image/png;base64,${image.toPNG().toString('base64')}` } return { screenshot, takeScreenshot } } } </script> ``` 在上述代码中,我们使用了electron-screenshots提供的captureScreen方法来进行截图,并将截图结果以base64编码的形式显示在页面上。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西安未央

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值