前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >electron仿制qq(2) 主界面制作

electron仿制qq(2) 主界面制作

作者头像
李昊天
发布于 2019-05-26 00:41:37
发布于 2019-05-26 00:41:37
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

制作从头开始 最后会将写好的组件放到一起的! 之前写了好几天的纯css 有点累 本章中将使用sass 如果代码太长 会分两个或多个章节写 代码中会有详细的注释 以便于大家阅读and理解 界面可能会有部分偏差 比较是仿制的


官方界面尺寸

默认宽度: 280px (大约 我之前拉伸过 被记录了 所以没法准确的测量) 默认高度: 652px (也是大约值) 最小高度: 528px 最小宽度: 280px 最大高度: 1041px (可能不太准确 有可能是根据分辨率来显示的) 最大宽度: 605px 顶部头像区域高度: 140px 底部选项区域高度: 40px 搜索框高度: 30px 头像直径/高度: 50px 右键菜单宽度: 180px

下载安装

安装electron-vue

这几天不知道什么情况 老是下载很慢 如果太慢就挂代理吧!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#cd F:\electron
vue init simulatedgreg/electron-vue qq_main
cd qq_main 
npm install
npm run dev

开始制作

创建路由和界面

路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default new Router({
    routes: [
        {path: '/', name: 'main', component: () => import('@/components/LandingPage')},
        {path: '/main', name: 'main', component: () => import('@/view/main/index')},
        {path: '*', redirect: '/'}
    ]
})

创建的第一个窗口 主窗口 不能使用窗口透明 这也就意味着我们不能使用圆角 所以我们要自己再创建一个窗口 让窗口边透明! 将主窗口 show:false 暂时不让显示 之后再创建一个main.js 让他来创建我们要做的窗口!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {BrowserWindow} from 'electron'

let main = null;

function createMainWindow() {
    main = new BrowserWindow({
        width: 280, //窗口创建的默认宽度
        height: 652,    //默认高度
        minWidth: 280,  //最小宽度
        minHeight: 528, //最小高度
        maxHeight: 1041,    //最大高度
        maxWidth: 605,  //最大宽度
        alwaysOnTop: true,  //窗口置顶
        useContentSize: true,   //使用web网页size, 这意味着实际窗口的size应该包括窗口框架的size,稍微会大一点,默认
        frame: false,   //去掉顶部
        transparent: true,  //透明窗口
         type: 'toolbar',    //工具栏窗口
        webPreferences: {
            devTools: false,    //关闭调试工具
        }
    });
}

createMainWindow();

页面文件和样式文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
    <div id="main">
        <header>
            <div class="toolbar-header"></div>
            <div class="search-box"></div>
        </header>
        <footer></footer>
    </div>
</template>

<script>
    export default {
        name: "index"
    }
</script>

<style lang="sass">
    #main
        position: absolute
        width: 100%
        height: 100%
        background-color: red
        border-radius: 4px
    header
        position: relative
        border-radius: 4px 4px 0 0
        height: 140px
        background-color: blue
        width: 100%
        .toolbar-header
            position: absolute
            top: 0
            height: 33px
            width: 100%
            background-color: yellow
        .search-box
            position: absolute
            bottom: 0
            width: 100%
            height: 32px
            background-color: black
    footer
        border-radius: 0 0 4px 4px
        height: 40px
        background-color: black
        position: absolute
        bottom: 0
        width: 100%
</style>

效果

顶部

由于图标有点难找 所以找了几个类似的

顶部按钮组

界面代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<header>
            <div class="toolbar-header">
                <i class="logo iconfont icon-qq"></i>
                <div class="buttons">
                    <span class="iconfont icon-xunzhang"></span>
                    <span class="iconfont icon-yifu"></span>
                    <span class="iconfont icon-Group-"></span>
                    <span class="iconfont icon-qqkongjian"></span>
                    <span class="iconfont icon-winfo-icon-zuixiaohua"></span>
                    <span class="iconfont icon-close close"></span>
                </div>
            </div>
            <div class="search-box"></div>
        </header>

css代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        header
            position: relative
            -webkit-app-region: drag
            height: 140px
            background: url("../../assets/img/bg.png") no-repeat
            background-size: 100% 100%
            width: 100%
            border-radius: 4px 4px 0 0
            .toolbar-header
                position: absolute
                border-radius: 4px 4px 0 0
                top: 0
                height: 33px
                width: 100%
                line-height: 33px
                background-color: rgba(255, 255, 255, 0)
                display: flex
                .logo
                    color: #808080
                    margin-left: 10px
                    width: 30px
                .buttons
                    margin-left: auto
                    color: #FFFFFF
                    -webkit-app-region: no-drag
                    span
                        display: inline-block
                        height: 30px
                        text-align: center
                        width: 30px
                        border-radius: 3px
                        &:hover
                            background-color: rgba(255, 255, 255, 0.3)
                    .close:hover
                        background-color: red
                        border-radius: 0 4px 0 0

搜索框

界面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="search-box">
                <div class="search">
                    <i class="iconfont icon-sousuo"></i>
                    <input type="text" class="search-input" placeholder="搜索">
                </div>
</div>

css代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            .search-box
                position: absolute
                bottom: 0
                width: 100%
                height: 32px
                background-color: rgba(255, 255, 255, 0.2)
                -webkit-app-region: no-drag
                cursor: text
                color: #FFFFFF
                line-height: 32px
                .search
                    i
                        position: absolute
                        left: 10px
                        top: 3px
                .search-input
                    width: 100%
                    background-color: rgba(255, 255, 255, 0)
                    height: 32px
                    outline: none
                    text-indent: 2rem
                    border: none
                    color: #FFFFFF
                    &::placeholder
                        color: #FFFFFF

底部

界面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <footer>
            <div class="left_menu">
                <span class="iconfont icon-menu3caidan3"></span>
                <span class="iconfont icon-tianjiahaoyou"></span>
                <span class="iconfont icon-wendang"></span>
            </div>
            <div class="pull-right">
                <span class="iconfont icon-live_icon"></span>
                <span class="iconfont icon-shipin1"></span>
                <span class="iconfont icon-yinle"></span>
                <span class="iconfont icon-anquan"></span>
                <span class="iconfont icon-tubiaozhizuomobanyihuifu-"></span>
            </div>
        </footer>

css代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        footer
            border-radius: 0 0 4px 4px
            height: 40px
            line-height: 40px
            position: absolute
            bottom: 0
            width: 100%
            display: flex
            color: #333
            border-top: 1px solid #BDD0DB
            .pull-right
                margin-left: auto
            span
                display: inline-block
                width: 30px
                height: 40px
                text-align: center
                font-size: 18px
                &:hover
                    background-color: #BDD0DB

最后效果

比对qq

给main 加一个背景就差不多了 其实qq主界面的背景色是一整个图 然而我们并没有采取这种方式

版权声明

本文只学习electron使用 不做任何商业用途,文章中使用的腾讯qq相关图片和相关Logo都作为学习使用,如果侵犯了腾讯的相关权益,请联系作者删除!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Swift入门:协议扩展
Swift最强大的功能之一就是能够同时扩展整个数据类型。 这被称为协议扩展,它们通常用于在大型应用程序中构建灵活性。
韦弦zhy
2020/03/19
8490
Swift入门:结构体
结构体是复杂的数据类型,这意味着它们由多个值组成。然后创建结构的实例并填充其值,然后可以在代码中将其作为单个值传递。例如,我们可以定义一个Person结构体类型,它包含两个属性:clothes和shoes:
韦弦zhy
2020/03/19
4500
Swift — 协议(Protocol)
协议定义了一个蓝图,规定了用来实现某一特定任务或者功能的方法、属性,以及其他需要的东西。类、结构体和枚举都可以遵循协议,并为协议定义的这些要求提供具体实现。某个类型能够满足某个协议的要求,就可以说该类型遵循这个协议。
Swift社区
2021/11/26
1.1K0
Swift — 协议(Protocol)
Swift基础 协议
翻译自:https://docs.swift.org/swift-book/LanguageGuide/Protocols.html
郭顺发
2023/07/17
1590
Swift 中的抽象类型和方法
在面向对象的编程中,抽象类型提供了一个基础实现,其他类型可以从中继承,以获得某种共享的、共同的功能。抽象类型与普通类型的区别在于,它们永远不会被当作原样使用(事实上,一些编程语言甚至阻止抽象类型被直接实例化),因为它们的唯一目的是作为一组相关类型的共同父类。
韦弦zhy
2022/03/30
8260
Swift入门:扩展
扩展允许我们以一种非常干净的方式修改Swift的数据类型以添加新的功能——我们的新代码与现有代码没有区别。
韦弦zhy
2020/03/19
1.1K0
20.Swift学习之协议
协议为方法、属性、以及其他特定的任务需求或功能定义一个大致的框架。协议可被类、结构体、或枚举类型采纳以提供所需功能的具体实现。满足了协议中需求的任意类型都叫做遵循了该协议。
YungFan
2018/12/12
3240
Swift入门: 数组
数组允许您将许多值组合到一个集合中,然后根据它们在集合中的位置访问这些值。Swift使用类型推断来确定数组保存的数据类型,如下所示:
韦弦zhy
2020/03/19
7780
Swift 5.1 中引入的部分有用的新特性
Swift 5.1现在已经正式发布,尽管只是次要版本,它包含了大量的更改和改进。从基本的新功能,例如模块稳定性(使SDK供应商可以交付预编译的Swift框架)到所有SwiftUI以及其他功能的新语法功能。
韦弦zhy
2020/02/18
1.4K0
Swift 5.1 中引入的部分有用的新特性
Swift入门: 函数
函数使您可以定义执行特定功能的可重用代码段。通常,函数能够接收一些值来修改其工作方式,但这不是必需的。
韦弦zhy
2020/03/19
7490
Swift入门:枚举
枚举(Enumerations)通常称为“ enum”,发音为“ ee-num”,是一种在Swift中定义自己的值的方法。在某些编程语言中,它们只是简单的小事,但是Swift给它们增加了巨大的功能。
韦弦zhy
2020/03/20
7860
Swift入门:枚举
Swift 中的反射 Mirror
前言 Mirror是Swift中的反射机制,对于C#和Java开发人员来说,应该很熟悉反射这个概念。反射就是可以动态的获取类型以及成员信息,同时也可以在运行时动态的调用方法和属性等。
Swift社区
2021/11/26
5.1K0
Swift 中的反射 Mirror
Swift 中的 Sendable 和 @Sendable 闭包
Sendable 和 @Sendable 是 Swift 5.5 中的并发修改的一部分,解决了结构化的并发结构体和执行者消息之间传递的类型检查的挑战性问题。
韦弦zhy
2022/11/14
1.5K0
Swift 中的 Sendable 和 @Sendable 闭包
Swift 5.6到5.10新特性整理
当你编写涉及共享状态的代码时,如果你不确保这个共享状态在跨线程使用时是安全的,你就会在许多地方遇到数据竞争的问题。
小刀c
2024/04/03
2.2K0
Swift 5.6到5.10新特性整理
Swift入门:属性
结构体和类(统称为“类型”)可以有自己的变量和常量,这些称为属性。这些方法允许您将值附加到类型以唯一地表示它们,但因为类型也可以有方法,所以您可以让它们根据自己的数据进行操作。
韦弦zhy
2020/03/19
5850
Swift 3到5.1新特性整理
Swift 5.0 最重要的自然是ABI Stability, 对此可以看这篇 Swift ABI 稳定对我们到底意味着什么 。
小刀c
2022/08/16
4.8K0
Swift 3到5.1新特性整理
Swift入门:类
Swift有另一种方法来构建称为类的复杂数据类型。它们看起来类似于结构体,但有许多重要的区别,包括:
韦弦zhy
2020/03/19
7610
Swift学习:协议
本篇将详细总结介绍Swift协议的用法; 协议是定义一些规范(属性、功能方法),然后由类、结构体或者枚举遵循并实现这些规范,这一过程被称为遵循了协议。
梧雨北辰
2018/08/09
4920
Swift入门:静态属性和方法
在Swift中,您可以创建属于类型而不是类型实例的属性和方法。这有助于通过存储共享数据来有意义地组织数据。
韦弦zhy
2020/03/19
1.3K0
Swift入门:多态性与类型转换
因为类可以相互继承(例如CountrySinger可以从Singer继承),这意味着一个类实际上是另一个类的超集:B类拥有A类所拥有的所有东西,还有一些额外的东西。这反过来意味着你可以把B当作B型或者A型,这取决于你的需要。
韦弦zhy
2020/03/19
9620
相关推荐
Swift入门:协议扩展
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文