位置: IT常识 - 正文

vue 3 项目实战一(绘制登录界面)(vue3.0项目实战视频)

编辑:rootadmin
vue 3 项目实战一(绘制登录界面)

目录

一、概述

二、创建vue项目

三、需求分析

四、构建组件

五、vue组件之间的通信


一、概述

推荐整理分享vue 3 项目实战一(绘制登录界面)(vue3.0项目实战视频),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue3.0项目实战视频,vue3项目案例,vue3.0项目实战,最全vue项目实战,vue3项目搭建,vue3项目案例,最全vue项目实战,最全vue项目实战,内容如对您有帮助,希望把文章链接给更多的朋友!

本文记录了项目实现的详细步骤以及原理,十分适合初学vue的萌新练手,也是阶段性学习的一个总结,可能会有些啰嗦,勿怪~。

先从登录界面开始,常规的登录界面不太好看,起不到复习巩固的作用,于是找到了下面这个

 源码:

https://codepen.io/ricardoolivaalonso/pen/YzyaRPNhttps://codepen.io/ricardoolivaalonso/pen/YzyaRPN下面将其拆解并封装,相当于化简为繁,将原本的html+css+js 项目转变为了vue项目,拆分成了三个组件。过程比较详细且啰嗦,选择性观看即可。

二、创建vue项目

1、vue create project_name

2、相关配置

3、cd project_name

4、code .         //快捷打开vscode

Typescript 是JavaScript的超集,Typescript语法在执行是会先转成JavaScript,在使用时如果不习惯ts可以转 js语法  <script setup lang="js"> 。

项目结构:

 

三、需求分析

 运行源代码可以发现,页面可分为三个主要部分:

因此将这三个部分封装成组件 ,在src下新建login文件夹,用于单独存放该项目的一些文件

 进行一些初始化、将 router/index.ts 路由改写

import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'const routes: Array<RouteRecordRaw> = [ { path: '/', component: () => import('@/login/login.vue') },]const router = createRouter({ history: createWebHashHistory(), routes})export default router简单测试一下

四、构建组件4.1、背景组件,也是该登录界面的父组件

 login/login.vue 文件代码

<template> <div class="body"> <div class="main"> adad </div> </div></template><script setup lang="ts"></script><style scoped >*, *::after, *::before { margin: 0; padding: 0; box-sizing: border-box; user-select: none; }.body { width: 100%; height: 100vh; display: flex; justify-content: center; align-items: center; font-family: "Montserrat", sans-serif; font-size: 12px; background-color: #ecf0f3; color: #a0a5a8; }.main { position: relative; width: 1000px; min-width: 1000px; min-height: 600px; height: 600px; padding: 25px; background-color: #ecf0f3; box-shadow: 10px 10px 10px #d1d9e6, -10px -10px 10px #f9f9f9; border-radius: 20px; overflow: hidden; } @media (max-width: 1200px) { .main { transform: scale(0.7); } } @media (max-width: 1000px) { .main { transform: scale(0.6); } } @media (max-width: 800px) { .main { transform: scale(0.5); } } @media (max-width: 600px) { .main { transform: scale(0.4); } }</style>

零碎笔记:

1.css盒子模型

        即元素可以看成一个盒子,即拥有margin、border、padding、content四个属性

vue 3 项目实战一(绘制登录界面)(vue3.0项目实战视频)

2.css的伪类和伪元素

伪类:为处于某个状态的已有元素添加对应的样式,(项目的切换按钮用到了伪类),例如

设置鼠标悬停在元素上时的样式     :hover为已访问和未访问链接设置不同的样式    :link   :visited设置元素获得焦点时的样式  :focus

        注意:如果同时作用在一个元素上,有书写顺序,比如对a标签进行操作:

a:link  ->   a:visited  ->  a:hover  -> a:active

伪元素: 由“ :: ” 表示,创建一些不在文档树中的元素,并为其添加样式

::after       在每个 元素之后插入内容。::befor      在每个元素之前插入内容。3、元素定位:遵从 “ 子绝父相 ”4.2、switch组件

点击可实现滑动效果

分析

代码

<template><div class="switch" id="switch-cnt"> <div class="switch__circle"></div> <div class="switch__circle switch__circle--t"></div> <div class="switch__container" id="switch-c1"> <h2 class="switch__title title">Welcome Back !</h2> <p class="switch__description description">To keep connected with us please login with your personal info</p> <button class="switch__button button switch-btn" @click="change">SIGN IN</button> </div> <div class="switch__container is-hidden" id="switch-c2"> <h2 class="switch__title title">Hello Friend !</h2> <p class="switch__description description">Enter your personal details and start journey with us</p> <button class="switch__button button switch-btn" @click="change">SIGN UP</button> </div> </div></template><script setup lang="ts"> const change = () => { const switchC1 = document.querySelector("#switch-c1") as any; const switchC2 = document.querySelector("#switch-c2") as any; const switchCircle = document.querySelectorAll(".switch__circle") as any; const switchCtn = document.querySelector("#switch-cnt") as any; switchCtn.classList.add("is-gx"); setTimeout(function(){ switchCtn.classList.remove("is-gx"); }, 1500) switchCtn.classList.toggle("is-txr"); switchCircle[0].classList.toggle("is-txr"); switchCircle[1].classList.toggle("is-txr"); switchC1.classList.toggle("is-hidden"); switchC2.classList.toggle("is-hidden"); }</script><style scoped>@import './login.css';/* 将源码中的css样式单独存放,在各组件中导入就可以。后续整理代码时建议,将全局样式和局部样式分开。 */</style>部分css样式

实现隐藏

 

隐藏元素的几种方法:opacity: 0、visibility: hidden、display: none

移动主要是靠设置 left 偏移得到的

移动过程中的动画

4.3、sign组件

两者结构部分<!-- sign_up --><template> <div class="container a-container" id="a-container"> <form class="form" id="a-form" method="" action=""> <h2 class="form_title title">Create Account</h2> <div class="form__icons"> <img class="form__icon" src=" "> <img class="form__icon" src=" "> <img class="form__icon" src=" "> </div> <span class="form__span">or use email for registration</span> <input class="form__input" type="text" placeholder="Name"> <input class="form__input" type="text" placeholder="Email"> <input class="form__input" type="password" placeholder="Password"> <button class="form__button button submit">SIGN UP</button> </form> </div></template><style scoped>@import './login.css';/* 将源码中的css样式单独存放,在各组件中导入就可以。*/</style><!-- sign_in --><template><div class="container b-container" id="b-container"> <form class="form" id="b-form" method="" action=""> <h2 class="form_title title">Sign in to Website</h2> <div class="form__icons"> <img class="form__icon" src=" "> <img class="form__icon" src=" "> <img class="form__icon" src=" "> </div> <span class="form__span">or use your email account</span> <input class="form__input" type="text" placeholder="用户名" v-model="loginFrom.username"> <input class="form__input" type="password" placeholder="密码" v-model.lazy="loginFrom.password"> <a class="form__link">Forgot your password?</a> <button class="form__button button submit">SIGN IN</button> </form></div></template><style scoped>@import './login.css';/* 将源码中的css样式单独存放,在各组件中导入就可以。*/</style>

像组件中如facebook的小图标,利用base64 将图片转为字符串以此来代替src的位置,可以减少http请求。 (base64推荐小图标使用,jpg转base64,体积会变大一点点。)

也可以使用矢量图:iconfont-阿里巴巴矢量图标库

 组件的移动和switch类似,多了个 z-index 来对这两个组件进行了堆叠

 五、vue组件之间的通信

现在各组件已经构建好了,但想要让switch子组件的按钮事件,也能控制到sign_in/sign_up子组件,则需要借助 Event Bus(用其它的方式也行,比如vuex )。  常用的父子组件通讯方式有:props,$emit ,$ref 等。

Event Bus:就是A-->B 有困难,那么就借助全局C来传数据,A-->C-->B

Vue3中需要借助 mitt 组件库来完成

1、安装:npm i mitt

2、在main中

本文链接地址:https://www.jiuchutong.com/zhishi/298341.html 转载请保留说明!

上一篇:ubuntu18.04安装cuda和cudnn(Ubuntu18.04安装cuda10.2)

下一篇:【MOT】目标追踪DeepSORT与ByteTrack(目标追踪模型)

  • 微信营销技巧(微信营销技巧课程)

    微信营销技巧(微信营销技巧课程)

  • 苹果13快捷指令怎么添加(苹果13快捷指令自动化在哪里)

    苹果13快捷指令怎么添加(苹果13快捷指令自动化在哪里)

  • 启用160mhz带宽什么意思(160mhz占用几个信道)

    启用160mhz带宽什么意思(160mhz占用几个信道)

  • 12306待兑现是不是还没成功(12306待兑现订单能成功吗)

    12306待兑现是不是还没成功(12306待兑现订单能成功吗)

  • 腾讯上视频都有版权嘛(腾讯有个视频叫什么)

    腾讯上视频都有版权嘛(腾讯有个视频叫什么)

  • 手机视频发热严重什么原因(手机视频发热严重怎么办)

    手机视频发热严重什么原因(手机视频发热严重怎么办)

  • excel降序排列怎么操作(excel降序排列怎么操作rank)

    excel降序排列怎么操作(excel降序排列怎么操作rank)

  • 为什么qq留言会莫名其妙消失(为什么qq留言会自动撤回)

    为什么qq留言会莫名其妙消失(为什么qq留言会自动撤回)

  • 淘宝显示前方拥挤请稍后再试(淘宝显示前方拥堵稍后再试)

    淘宝显示前方拥挤请稍后再试(淘宝显示前方拥堵稍后再试)

  • moaal20是华为什么型号(华为moa-al20图片及价钱)

    moaal20是华为什么型号(华为moa-al20图片及价钱)

  • 单反可以当直播摄像头用吗(单反当直播摄像头)

    单反可以当直播摄像头用吗(单反当直播摄像头)

  • 滴滴快车最迟多久付款(滴滴车最晚可以跑到几点)

    滴滴快车最迟多久付款(滴滴车最晚可以跑到几点)

  • 苹果11pro充电器是快充吗(苹果11pro充电器是什么接口)

    苹果11pro充电器是快充吗(苹果11pro充电器是什么接口)

  • 突然6plus拍照模糊不清(苹果6s plus拍照突然变得模糊怎么回事)

    突然6plus拍照模糊不清(苹果6s plus拍照突然变得模糊怎么回事)

  • mate30支持内存卡吗(mate30支持内存卡多大)

    mate30支持内存卡吗(mate30支持内存卡多大)

  • 苹果怎么不用id下载软件(苹果怎么不用id密码抹除所有)

    苹果怎么不用id下载软件(苹果怎么不用id密码抹除所有)

  • 苹果11如何挂断来电(苹果如何挂断不想接听的电话)

    苹果11如何挂断来电(苹果如何挂断不想接听的电话)

  • 快手聊天记录删除了还能调查出来吗(快手聊天记录删了换个手机还会有吗)

    快手聊天记录删除了还能调查出来吗(快手聊天记录删了换个手机还会有吗)

  • 苹果手机微信声音小怎么办(苹果手机微信声音特别小怎么解决)

    苹果手机微信声音小怎么办(苹果手机微信声音特别小怎么解决)

  • 云储存技术有哪些(云储存技术有哪几种类型)

    云储存技术有哪些(云储存技术有哪几种类型)

  • 京豆怎么转让赠送(如何将京豆转入其它账号)

    京豆怎么转让赠送(如何将京豆转入其它账号)

  • vue添加照片时可以不动吗(vue项目中图片放在哪里)

    vue添加照片时可以不动吗(vue项目中图片放在哪里)

  • 微信公众号怎么开通原创保护功能(微信公众号怎么做文章推广)

    微信公众号怎么开通原创保护功能(微信公众号怎么做文章推广)

  • iphonexr可以用ipad充电器充电吗(iphonexr能用iphone12的手机壳吗)

    iphonexr可以用ipad充电器充电吗(iphonexr能用iphone12的手机壳吗)

  • 华为bacal00是什么型号(华为手机bacal00是什么型号)

    华为bacal00是什么型号(华为手机bacal00是什么型号)

  • 手机上边显示hd啥意思(手机上边显示hd12)

    手机上边显示hd啥意思(手机上边显示hd12)

  • Linux系统中用户的登入登出命令详解(linux系统中用户账户有哪些分类)

    Linux系统中用户的登入登出命令详解(linux系统中用户账户有哪些分类)

  • 小规模纳税人怎么变成一般纳税人
  • 房屋维修基金帐户怎么查
  • 缓交的社保费,包括个人部分
  • 小规模首次申请发票张数
  • 分公司一定要汇总申报吗
  • 行政事业单位国有资产处置管理办法
  • 公司代扣代缴的个人所得税怎么做账
  • 还没入库,发票已经给财务了 怎么办
  • 信用卡逾期滞纳金是按天还是按月计算
  • 发票开出来对方不走账会怎么样?
  • 通过无偿取得的成果
  • 预缴税多交了,税务局退吗
  • 印花税的计税依据怎么算含税还是不含税
  • 纳税申报意思
  • 小规模纳税人咨询服务费税率是多少
  • 供应商退回货款有时间限制吗
  • 房地产广告公司月费一般多少
  • 增值税季度不超过30万
  • 其他专项收入怎么做账
  • 小规模企业低值易耗品摊销方法
  • 专用发票没有写购买方电话号码
  • 企业员工自行体检流程
  • 以旧换新计税依据
  • 收到的出口退税款需要并入利润总额吗
  • 查看修改
  • php中面向对象
  • 专项用途财政性资金纳税调整表
  • 关税从量计征有什么
  • 会计科目明细分类科目表
  • 发票加盖发票章可以吗
  • 建筑工程开税票比例占到合同金额的多少
  • ecshop app搭建
  • 个人借款放在哪个科目
  • 新购车辆检测费计入原值吗
  • 【深度学习】目标检测的性能评价指标,mAP_0.5,mAP_0.5,0.95,0.05
  • 新星计划2021
  • 参加《2022 中国开发者影响力盛典》我的 4 重收获!
  • chkconfig命令参数
  • laravel event
  • 发票 加工费
  • 如何登记现金明细账
  • 职工教育经费年底要冲回吗
  • 专家咨询费比例不能超过多少
  • 上传附件不成功怎么回事
  • 代订饭店
  • 企业金融资产包括银行存款吗
  • 房地产开发企业成本核算方法
  • 资本公积占比多少合适
  • 个体小企业怎么缴纳个人所得税
  • 融资租赁租出的固定资产账务处理
  • 培训学校不退学费找什么部门
  • 其他流动资产待摊费用
  • 计入资本公积的固定资产处置
  • 建设单位支付给施工单位的民工工资
  • 非成品油发票能做进项吗
  • 诉讼费给开发票吗
  • 公司法规定股权转让需要满足什么条件
  • 企业发生的各项罚款收入应计入
  • 社保个人部分如何继承
  • 合资注册公司应该注意什么
  • 备查账目
  • 海关发票丢失怎么处理
  • 检查sql脚本语法
  • xp系统提升cpu最高性能
  • ubuntu 4.10
  • SymSPort.exe - SymSPort是什么进程 有何作用
  • centos7视频教程
  • win8系统蓝屏后无法修复
  • opengl详解
  • css常用布局方式
  • jquery插件使用教程
  • unity 接入sdk
  • jqgrid tree
  • js如何定义类
  • 什么是总分机构汇总纳税
  • 公路局有钱吗
  • 对税务总局党组织的评价
  • 施工企业建筑机械管理机构主要职责是负责建筑机械的
  • 云南省新农合网上缴费app
  • 财政资金存在问题
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设