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

news/2024/7/10 3:06:54 标签: 前端, typescript, vue

技术栈:使用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 趋势图组件

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


http://www.niftyadmin.cn/n/470600.html

相关文章

万字详解JavaScript手写一个Promise

目录 前言Promise核心原理实现 Promise的使用分析MyPromise的实现在Promise中加入异步操作 实现then方法的多次调用 实现then的链式调用 then方法链式调用识别Promise对象自返回 捕获错误及 then 链式调用其他状态代码补充 捕获执行器错误捕获then中的报错错误与异步状态的链式…

如何校验 MySQLOracle 时间字段合规性?

作者:余振兴 爱可生 DBA 团队成员,热衷技术分享、编写技术文档。 本文来源:原创投稿 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 背景信息 在数据迁移或者数据库低版本升级到高版本…

Jenkins 持续集成:Linux 系统 两台机器互相免密登录

背景知识 我们把public key放在远程系统合适的位置,然后从本地开始进行ssh连接。 此时,远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地,本地会用private key进行解密并把这个随机数发回给远程系统。 最后&#xf…

Git Bash介绍

Git Bash介绍 Git是一个版本控制工具,而Git Bash是在Windows系统中运行Git命令的命令行界面工具。您可以使用Git Bash来管理和操作Git仓库。当你在Windows系统上安装Git时,它会默认安装Git Bash。 Git Bash是git(版本管理器)中提供的一个命令行工具&am…

YOLOv8独家原创改进:独家首发最新原创XIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能、收敛速度和鲁棒性

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv8独家原创改进:独家首发最新原创XIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能、收敛速度和鲁棒性。 💡对自己…

【Java】Java 纪录类(Record Class)及代码示例

本文仅供学习交流使用! Java Record Class相关文章地址: https://www.liaoxuefeng.com/wiki/1252599548343744/1331429187256353 https://www.baeldung.com/java-record-keyword https://www.developer.com/java/java-record-class/ Java中的记录类是什么…

如何利用VS打包C++程序

如何将VS开发的C程序打包发给别人使用呢?话不多说,跟随以下步骤即可完成: 打包步骤 一.安装插件1.项目-->扩展-->管理扩展2.搜索-->下载3.下载完毕-->关闭VS4.Modify-->End Tasks(跳过)-->完成 二.配…

C++特殊情况下的父/子类内存布局及BUG踩坑

概述 一般情况下的内存布局可以参考下面这篇&#xff1a; C类的内存布局 本文讨论的是父类没有虚函数表的特殊情况。 开发环境 win11&#xff0c;VS2022&#xff0c;x64 构造特殊场景 测试代码 #include <iostream> using namespace std;class C1 { public:int m…