《Vue3+TS》开发一个自己的起始页(1)

本文详细描述了一个基于Vue3的项目开发过程,涉及组件结构(如布局组件、背景组件和时钟组件),技术选型(如使用lowdb缓存数据,TypeScript类型安全,less预处理器),以及提供了一份前端开发学习资料概览。作者还分享了面试题和开发感悟。
摘要由CSDN通过智能技术生成

首页

主要用途是搜索,有搜索框组件和时钟组件组成,并且搜索框组件聚焦时可以看到历史记录以及热门搜索,同时聚焦时背景图上有一个放大以及毛玻璃的效果;

在这里插入图片描述

快捷页

快捷入口的集合,打开时背景图同样有一个放大以及毛玻璃的效果;

在这里插入图片描述

另外,在整个项目里,使用到了lowdb来对数据进行缓存和读取(其实就是localstage),使用到了loadsh作为函数库

初始化项目

===============================================================

既然是基于Vue,那么开始必须是基于Vue3的脚手架搭建项目,具体命令如下:

vue create start

注意的是,在配置项目的时候需要选择安装TypeScript,以及使用到了CSS的预处理器:less,实际上我觉得Sass更符合我个人的使用习惯,但是公司的项目都是用的less,那么这里也就继续使用less作为预处理器,两者其实差不多,没什么根本性的不同;

功能点

=============================================================

感觉没有必要将每一行代码都放在博客里,那样的话感觉整篇博客都是长篇代码而且效果也不好,博客里又不能调试,要看整体代码直接下载项目就是了,还能一边看一边调试,本文主要记录一下涉及到的功能点的代码,方便理解Vue3+Typescript(由于代码写的比较早,现在回过头来看还是又一些可以优化的地方的,写的不好的地方多多见谅);

布局组件


这个组件的主要目的是用来做布局,因为新的界面交付到我们开发手里时,不能直接开始写代码,肯定要写一些布局组件,用来对页面进行合理的布局,布局组件写完后,只要在对应的位置填入对应的组件就行了,这样就不用在每一个页面都写一遍布局,这样不科学也太累,一旦需求发生变化,如果每个页面都是进行布局那工作了就成倍的增加了;

布局组件部分代码如下,在本项目中这个布局组件除了用来布局,还用来做各个子组件的数据的一个交互的链接点,因为不管是快捷入口还是搜索栏组件都会对背景组件的状态产生修改,一旦状态发生变化,那么这个组件就可以用来临时做数据的中转:

<template #backgourndImage>

<base-background

:glass=“glass”

@changeGlass=“changeGlass”

:shortcuts=“shortcuts”

@changeShortcuts=“changeShortcuts”

<template #clock>

<clock-component

:glass=“glass”

:search=“searchState”

v-show=“!shortcuts”

/>

<template #search>

<search-component

@changeFocus=“changeFocus”

:glass=“glass”

v-show=“!shortcuts”

/>

<template #copyright>

<template #shortcuts>

// 组件、库、接口等引入

我们写了一个base-layout的组件用来做布局,并且在组件中预留了4个插槽,分别用来放置背景组件,主界面,快捷入口,版权信息,这样整体的结构不会凌乱,而base-layout部分代码如下:

就是做了一个布局,对每一块内容都进行圈定范围,并且预留了插槽用来内容填充;

背景组件


这个组件主要的功能就是背景图的放大以及毛玻璃,这两块效果其实都是CSS实现的,JS实现的主要是在什么时机触发这个效果,在本项目中,触发的时机一共有两个:

  1. 处于首页的时候,输入框聚焦,此时的背景组件会触发放大和毛玻璃效果;

  2. 右击首页,打开快捷入口的时候,也会触发放大和毛玻璃效果;

部分代码如下:

另外,这里还有一个骨架屏的效果,就是当背景图还没有被加载的时候,整个背景图处于灰色,并且有一个从左往右的动效,代表正在加载中,骨架屏效果代码如下:

.threeS-loading {

background-color: #f2f2f2;

background: linear-gradient(

100deg,

rgba(255, 255, 255, 0) 40%,

rgba(255, 255, 255, 0.5) 50%,

rgba(255, 255, 255, 0) 60%

)

#f6f6f6;

background-size: 200% 100%;

background-position-x: 120%;

animation: 1s loading ease-in-out infinite;

}

@keyframes loading {

to {

background-position-x: -20%;

}

}

时钟组件


这个组件的难点在于实现电子数字的格式,这个是最复杂的,而时间的获取就是基于浏览器Date对象,这个很简单,获取时间的方法部分如下:

/**

  • 获得时间

  • @returns {String} 当前时间

*/

function getTime(): string {

const date = new Date();

const hour = date.getHours();

const minute = date.getMinutes();

return (

(hour >= 10 ? hour : “0” + hour) +

“:” +

(minute >= 10 ? minute : “0” + minute)

);

}

当获取到时间以后,需要将转成电子格式的,这部分的原理就是先拼出一个电子格式的8,然后,不同的数字只是去掉8中的某一个笔划,这样就达到了0-9的数字,这里我挑一部分CSS代码

.digits div span {

opacity: 0;

position: absolute;

-webkit-transition: 0.25s;

-moz-transition: 0.25s;

transition: 0.25s;

}

.digits div span:before,

.digits div span:after {

content: “”;

position: absolute;

width: 0;

height: 0;

border: @fontSize solid transparent;

}

.digits .d1 {

height: @fontSize;

width: 16px;

top: 0;

left: 6px;

}

.digits .d1:before {

border-width: 0 @fontSize @fontSize 0;

border-right-color: inherit;

left: -@fontSize;

}

.digits .d1:after {

border-width: 0 0 @fontSize @fontSize;

border-left-color: inherit;

right: -@fontSize;

}

.digits .d2 {

height: @fontSize;

width: 16px;

top: 24px;

left: 6px;

}

.digits .d2:before {

border-width: 3px 4px 2px;

border-right-color: inherit;

left: -8px;

}

.digits .d2:after {

border-width: 3px 4px 2px;

border-left-color: inherit;

right: -8px;

}

这里是1和2的组成,通过类似的方法将0-9的CSS都写完,之后获取到时间,在填入的时候判断需要填入的是哪个数字就行:

/**

  • 填入时间

  • @param {String} time - 时间

  • @param {HTMLElement} timerClock - 填入时间的DOM

  • @returns 无

*/

function clocknum(time: string, timerClock: HTMLElement): void {

timerClock.innerHTML = “”;

var html = “”;

var strarr: any[] = time.toString().split(“”);

var digit_to_name = “zero one two three four five six seven eight nine”.split(

" "

);

for (var i = 0; i < strarr.length; i++) {

if (strarr[i] == “:”) {

html += ‘

’;

} else {

var clasname = digit_to_name[strarr[i]];

html +=

‘<div class="’ +

clasname +

‘">’ +

’ +

’ +

’ +

’ +

’ +

’ +

’ +

“”;

}

}

timerClock.innerHTML = html;

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

前端面试题汇总


前端面试题是我面试过程中遇到的面试题,每一次面试后我都会复盘总结。我做了一个整理,并且在技术博客找到了专业的解答,大家可以参考下:

由于篇幅有限,只能分享部分面试题,完整版面试题及答案可以【点击我】阅读下载哦~

感悟

图片转存中…(img-1gm0Vvzg-1712553247289)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-7eqDSH0h-1712553247289)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

前端面试题汇总


前端面试题是我面试过程中遇到的面试题,每一次面试后我都会复盘总结。我做了一个整理,并且在技术博客找到了专业的解答,大家可以参考下:

由于篇幅有限,只能分享部分面试题,完整版面试题及答案可以【点击我】阅读下载哦~

感悟

春招面试的后期,运气和实力都很重要,自己也是运气比较好,为了回馈粉丝朋友们(毕竟自己也玩了这么久哈哈哈),整理个人感悟和总结以上。最后祝愿大家能够收获理想offer!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值