数值组件滚动&趋势图联动需求拆解

技术栈:使用vue3的composition API + tsx 进行开发 

一、需求描述

直接看UI图吧。

 简单描述一下:

数值卡片:

上方部分是一个数值卡片列表,每个卡片维护不同的集中状态,选中态,hover态。

细节: 选中态的时候,数值卡片下方会有一个白箭头。

 

需要注意的是,其中第三个卡片中有两个指标,可以点击指标名称切换当前选中指标。

滚动: 当宽度不够的时候,出现左右滚动按钮。当宽度够的时候,无左右滚动按钮。

趋势图: 上方切换选中数值卡片,显示当前指标的近1月趋势图。

二、需求分析

简单来说,这个模块的开发可以分为两个模块。

模块1,数值组件的开发。

模块2,趋势图组件的开发。

2.1 数值组件

这里我将其拆分为三个部分,

1、首先进行黄色边框,模块一的开发。

考虑到如果是每个数值卡片单独进行数据请求,多数值卡片请求并发会降低请求速度,所以,数值卡片不维护请求状态,只渲染数据。

组件的独立性,可以包括以下几个方面:维护自身的数据和状态、作用域,维护自身的事件。

我们在保持组件独立性的时候,当然还需要考虑它与外界的交互,主要包括:

对外提供配置项,来控制展示以及具体功能。

对外提供查询接口,可从外界获取组件状态。

引用自: 一个组件的自我修养 | 被删的前端游乐场

对外提供两个配置项:

① 传入的数据格式,根据业务进行定制,其格式为:

export interface NumberData {
  /** 指标 key 值 */
  key: string
  /** 指标 value 值 */
  value: number
  /** 环比*/
  chainRatio: number | string
  /** 同比 */
  yearDayRatio: number | string
  /** 指标单位 */
  unit: string
  /** 指标格式化 */
  format: string
}

传入的 NumberData 是一个数组。 

② 另外一个prop是,当前数值卡片列表选中的指标。

这个prop是双向绑定的,因为数值卡片内部维护点击事件,当点击当前卡片时,选中指标会变化。

这里,卡片的具体渲染逻辑比较简单。无非是调整一些css的样式,hover态样式变化,点击后样式变化。

这里需要着重记录的是,选中状态箭头的开发。这里的箭头利用的是伪元素。

主要是参考了下面这篇文章的实现方式:

https://www.cnblogs.com/qianxiaox/p/13808935.html

2、模块2,整体数值卡片列表的开发

这个列表开发中主要维护两件事情,

① 请求数据,格式化数据

② 初始化当前选中数值卡片指标。

3、模块3 滚动的开发  

这里的滚动的是通过原生的scroll 实现的。(Element.scrollTo() - Web API 接口参考 | MDN

在数据挂载之后,拿到当前 数值卡片列表的实例,

监听resize事件, 控制按钮的显隐。监听滚动事件,判断左右两侧的按钮是否不可点击。

在左右两侧滚动按钮上,配置点击事件,通过element 中的scrollleft来定制往左、往右滚动的宽度。

2.2 趋势图组件

趋势图组件就比较简单了,重要的是传递当前选中的指标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值