热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

button鼠标点击ch_前端项目001Vue造轮子之Button

頔言頔语:进步,一定要进步,进步是跟收入持平的本钱。总有人问:前端开发中是哪些轮子值得实现一遍。但是你造过那些轮子呢?这是我
f454d80afcacdd32ef3ea1cbc916fe14.png
頔言頔语:进步,一定要进步,进步是跟收入持平的本钱。

总有人问:前端开发中是哪些轮子值得实现一遍。但是你造过那些轮子呢?这是我造过的!

声明:本项目所有的UI,来自于方应航,我只做简单修改!

输入框 · 轱辘 · 语雀​www.yuque.com
624b82ef92edfc265ec1176c5db0c27e.png

所有的项目按照流程按照一下目录进行

  1. 需求分析
  2. UI设计
  3. 项目知识点
  4. 项目难点(在3中解决,用饮用块的方式标识)

1. 需求分析

1. 1 Button功能分析

该轮子只具有点击功能 Click

1.2 Button 状态分析

  • 正常态(nomal)
  • Hover 鼠标悬浮状态 ,这个时候Button的边框变色
  • Focus用户点击状态,背景颜色发生改变

1.3 特殊Button

  • 不可点击的按钮
  • 成组的按钮
  • 加载中的按钮

2. 本项目UI展示

8a07e067fbbc3176ab179dc1539750b5.png
Button UI

想看具体细节的可以参考如下链接:

输入框 · 轱辘 · 语雀

3. 项目知识点

3.1.项目目录结构展示

c39e4736e90f56a91231c7c9e656dd1f.png
项目目录结构

我将Button独立作为一个公共组件,所使用的icon也独立作为一个公共组件, ButtonGroup也声明为一个公共组件。

组件在main.js当中证明,在App.vue当中使用

代码如下:

import gbutton from './components/Button.vue'
import gicon from './components/Icon'
import gButtonGroup from './components/ButtonGroup.vue'Vue.config.productionTip = false
Vue.component('gbutton',gbutton)
Vue.component('gicon',gicon)
Vue.component('gbuttongroup',gButtonGroup)

上一页12 3>下一页


3.2.Iconfont 的使用

项目当中使用了Iconfront当中的图标,下面是我选取的图标样式

a5833328f9ae5e924718bc1d83ee9e2a.png
icon

symbol引用:

详细方式参考官方文档:

Iconfont-阿里巴巴矢量图标库​www.iconfont.cn

遇见的问题(在项目难点部分进行回答):

难点01.只找到了左图标,没有相匹配的右图标

这个问题是因为我不熟悉iconfont的使用造成的。请教过朋友之后,开启新的大门

悬浮图标,点击编辑,在这个页面也可进行许多有趣操作,大家可以试试

b3b624b5e2f306c5be7c16ca67e83dbb.png
icon编辑

吐槽:下载之后我另外加了加载中图表,需要重新下载进行文件替换,觉得麻烦!

3.3 组件讲解

3.3.1 Button组件

Button组件的优化是根据实现的button的功能进步进行的

01 正常button

此时只有一个button标签,加上class为g-button 进行样式的书写。

难点02
因为我所有的样式用户是可以修改的,但是我不想用户加上其他属性进行覆盖,所以我使用CSS变量:root和var()这样的方式将属性值暴露给用户,代码如图所式

.g-button{font-size: var(--font-size);height: var(--button-height );
...
}

:root{--button-height:32px;--font-size:14px;
.....}

为什么这样写呢?我推荐大家读这个文章

安秦:【译】CSS变量的正确使用方法​zhuanlan.zhihu.com
45290d0033e191ebe1b7064758c6b373.png

总结

  • 提高大型系统文档的可维护性;
  • 提高系统代码的可读性;
  • 可以在浏览器中实时修改生效;

3.3.2 Icon组件

在我写需要带icon的button的时候,每一个button都需要有icon的引入和使用,这会造成代码的大量冗余。所以我将icon的引入独立出来,只暴露出来一个是否使用icon 和icon名称这样的属性

Button组件当中引入icon

用户使用的时候进行传值

按钮

问题2:

iconPosition来判断icon是出现在文字右边还是文字左边

948c9516ef7152fd9ebf218159c304a3.png
iconPosition

但是这个时候我需要写icon在左边还有icon在右边两套Button,然后根据传入的iconPosition不同,进行显示。

优雅的解决方法是使用CSS引入Flex布局,使用order属性 进行布局的改变

:class="{`icon-[iconPosition]`:true}"

当我输入 iconPosition为right的时候,加入class属性为icon-right

当我输入 iconPosition为left的时候,加入class属性为icon-left

这个时候我可以用order来进行icon和content的排序

v-if='icon' 判断icon这个组件是否出现,效果如下

d11c2030c3d88522e152cab273a8d8f7.png
v-if='icon'

3.3.3 ButtonGroup组件

352b26f6415197a26221cd0ffe6f3933.png

这个时候我就需要生成一组Button,所以引入ButtonGroup这个组件

注意:标签外需要嵌套一层

标签。如果只有的话,会报错。因为不知道ButtonGroup在时候之后里面会放多少个子组件。

难点03Button之间的圆角样式问题(只有两边的button需要有圆角,中间的都没有圆角。到那时button组件当中所有的button都会有圆角,会直接继承过来)

解决方法:

第一步:button-group当中所有的button修改成无圆角

第二部:使用选择器,让第一个有左上 左下圆角 ,最后一个有右上右下圆角

.g-button-group :first-child{
border-top-left-radius: var(--border-radius);
border-bottom-left-radius: var(--border-radius);
}
.g-button-group :last-child{
border-top-right-radius:var(--border-radius) ;
border-bottom-right-radius: var(--border-radius) ;
}

难点04Button之间的border重叠问题

解决方法:

错误:除了第一个button之外,所有的button都去掉左border

出现问题:在hover状态的时候,左border也是不存在的

c6cbb8bf91e2c580085c27af3803be23.png

正确解决方法:使用margin-left为负数,并且在hoover的时候,修改z-index

.g-button-group .g-button:not(:first-child){margin-left: -1px;}.g-button-group :hover{position: relative;z-index: 1;}

关于这个项目,这就是我想说的

我的知识和文字不成熟,项目也不成熟,但是我在进步!

若有意见,欢迎留言指正 !!!



推荐阅读
  • 使用HTML创建弹出框以便用户输入信息
    在做项目的过程中,我们时常需要进行一些弹框操作,比如在后台管理时需要进行的一些增删改操作,这个时候我们需要使用到弹框,或者在 ... [详细]
  • 在分页时,我想让点过的页码变色.应该怎么做?比如:12345我点2跳到第2页然后2变成红色其他为蓝色 ... [详细]
  • Tooltips效果,鼠标经过显示提示 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 面试中2次被问到过这个知识点,实际开发中,应用事件委托也比较常见。JS中事件委托的实现主要依赖于事件冒泡。那什么是事件冒泡?就是事件从最深 ... [详细]
  • 为什么三角形与菜单背景的颜色不同? - Why is the triangle a different colour shade to the menu background?
    Imnotunderstandingastowhythetrianglewhichappearswhenthemousehoversoverthemenuitem, ... [详细]
  • <!DOCTYPEhtml><htmllang=en><head><metacharset=UT ... [详细]
  • vue扫描二维码
    本地要用localhost。发布之后要用https的才可以看到。(你的设备也必须有摄像头)切记卡号 ... [详细]
  • backgroundposition和长图实现鼠标悬浮动画效果
    以下图片及代码均来自京东云点击这里进入京东云思路和效果图:background-position:00可以用js动态的将长图按帧数一帧一阵的展示出来效果类似gif,红框就是可视界面 ... [详细]
author-avatar
手机用户2502875921
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有