组件库|青训营

155 阅读3分钟

在当前前端框架以及各种组件库盛行的时代,从我学习前端到现阶段,像一些轮播图、日历等组件都是直接去使用UI组件库,学习Vue的时候用的Vant、ElementUI,学习React的时候使用Antd等组件库,都说现在轮子太多了,不需要再去造轮子了,但是这并不能让我们直接不去思考他们是如何实现的?

所以今天我就跟随着月影老师,看看如何使用原生的JavaScript写一个电商网站的轮播图

组件:是指Web页面上抽出来一个个包含模板(HTML)、功能(JS)和样式(CSS)的单元。

一个好的组件需要具备封装性正确性扩展性复用性等。

结构:HTML

轮播图是一个经典的列表结构,我们使用div容器内部使用无序列表<ul>元素来实现。

image.png

展示效果:CSS

轮播图,顾名思义在同一个容器中一定时间切换图片,当然可以手动点击轮播图左右侧或者底部,手动切换当前展示的图片。

CSS实现思路:

  • 使用CSS绝对定位(position:absolute),将轮播图需要展示的图片重叠在同一个容器中,即在同一个位置
  • 轮播图切换的状态使用修饰符(modifier)
  • 轮播图的切换动画使用CSS transition

image.png

行为设计

API

通常我们使用JS来编写代码的行为,所以API设计应保证原子操作,指责单一,满足灵活性。

在轮播图组件中我们使用class类来实现,在代码中我们会定义以下几个API方法

image.png

  • getSelectedItem() 获取到当前被选中的图片,也就是给当前被选中的图片添加上一个被选中的类名
  • getSelectedItemIndex() 获取到当前被选中轮播图的下标,方便我们直接点击轮播图组件底部的圆点进行展示图片的切换
  • slideTo() 跳转至我们选中的图片
  • slideNext() 轮播图组件右侧切换至下一张轮播图
  • slidePrevious() 轮播图组件左侧切换至上一张轮播图

具体代码实现:

image.png

image.png

控制流

使用自定义事件来解耦

image.png

image.png

解耦:

  • 将控制元素抽取成插件
  • 插件与组件之间通过依赖注入方式建立联系

image.png

将HTML模板化,就像使用Vant等组件库一样,只有模板的HTML,并不需要将整个代码都写在页面上。当我们修改组件时,只需要修改模板代码,不需要修改页面源代码

image.png

image.png

抽象

  • 将通用的组件模型抽象出来

image.png

image.png

总结

我们在设计组件时应该考虑封装性正确性扩展性复用性等原则;实现一个组件应该先设计基本结构(HTML)、设计展示效果(CSS)、行为设计(API、控制流);最后我们优化时需要插件化模板化抽象化(组件框架)。这样我们才能设计出一个比较实用并且考虑较为周全的组件了。