如何以抛物线形式排列一个列表,曲线排列 x² = y

news2024/11/19 1:41:57

如何以抛物线形式排列一个列表,曲线排列

一、需求

做页面的时候遇到一个需求,需要将一个列表以曲线的形式排列展示。

列表内容:

const statisticLabels: Array<{
    name: string,
    icon: string,
    path: string,
    type: string,
    dataName: string
}> = [
    {name: '云盒报警',  icon: 'Bell',         path: '/alarm/alarm-history-box',    type: 'danger',  dataName: 'box_alarm_total'},
    {name: '设备报警',  icon: 'Bell',         path: '/alarm/alarm-history-device', type: 'danger',  dataName: 'device_alarm_total'},
    {name: '总驱动',   icon: 'Coin',         path: '/driver/driver-list',         type: 'warning', dataName: 'driver_total'},
    {name: '总设备',   icon: 'Refrigerator', path: '/iot/device-list',            type: 'primary', dataName: 'device_total'},
    {name: '总云盒',   icon: 'MessageBox',   path: '/iot/box-list',               type: 'success', dataName: 'box_total'},
    {name: '总项目',   icon: 'FolderOpened', path: '/iot/project',                type: 'primary', dataName: 'project_total'},
    {name: '总工单',   icon: 'Tickets',      path: '/ticket/order-list',          type: 'info',    dataName: 'ticket_total'},
    {name: '未处理工单', icon: 'Tickets',      path: '/ticket/order-list',          type: 'info',    dataName: 'ticket_created'},
]

二、一个不太好看的实现方式

列表只需要一个变量来控制它往左边的偏移量:margin-left
只需要用一个方法来获取每个列表项的 margin-left,这个方法:输入列表项的 index, 输出这个列表项应该的 margin-left 偏移量

function getMarginLeftOfIndex(index: number): number{
    let lineTotal = statisticLabels.length
    const maxMarginLeft = 500
    return Math.abs(index - lineTotal/2) * maxMarginLeft / lineTotal
}

如果列表项等距离的错开,会成下面这样:

在这里插入图片描述

三、以抛物线形式排列这个列表

能看出上面这个等量偏移的方式并不太好看,好看的曲线就只能是抛物线的形式。

在这里插入图片描述

这里就需要用一下以前初中学的抛物线方程:

x² = y

只不过现在这个展示的是普通抛物线旋转 90度 的样子。

所以我们需要转换一下坐标:

在这里插入图片描述

黑色的序号是列表的 Index, 需要转换成方程中的坐标值,然后用抛物线的方程算出对应位置的偏移量。
在这里插入图片描述

// index 位置距离中心点的距离

Math.abs(Math.abs(index - lineTotal/2))

实现的方程是这样的:

function getMarginLeftOfIndex(index: number): number{
    let lineTotal = statisticLabels.length
    const maxMarginLeft = 500
    return Math.abs(index - lineTotal/2) * maxMarginLeft / lineTotal
}

四、最终结果

根据需要调整方法中的 maxMarginLeft 来调整列表整体的偏移量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1792016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

14-alert\confirm\prompt\自定义弹窗

一、认识alert\confirm\prompt 下图依次是alert、confirm、prompt&#xff0c;先认清楚长什么样子&#xff0c;以后遇到了就知道如何操作了。 二、alert操作 先用driver.switch_to.alert方法切换到alert弹出框上&#xff1b;可以用text方法获取弹出的文本信息&#xff1b;acce…

【Qt】定时器播放多张图片,动画效果

1. 效果 2. 代码 2.1 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();void initGif(QS…

RPA-UiBot6.0数据采集机器人(海量信息一网打尽)内附RPA师资培训课程

前言 友友们是否曾为海量的数据信息而头疼&#xff0c;不知道如何从中精准抓取你所需的数据&#xff1f;小北的这篇博客将为你揭晓答案&#xff0c;让我们一起学习如何运用RPA数据采集机器人&#xff0c;轻松实现海量信息的快速抓取与整理&#xff0c;助力你的工作效率翻倍&…

用cocos2d-python绘制游戏开发的新篇章

用cocos2d-python绘制游戏开发的新篇章 第一部分&#xff1a;背景 在游戏开发的世界中&#xff0c;寻找一个强大而灵活的框架至关重要。cocos2d-python是一个Python游戏开发框架&#xff0c;它提供了一套丰富的功能&#xff0c;用于创建2D游戏、图形和交互式应用。基于流行的c…

掌握SVG基础:从零开始学习

格栅图可以实现图片的清晰显示&#xff0c;但这也意味着如果要在各种设备上使用格栅图&#xff0c;就会增加大量不同规格的格栅图&#xff0c;以适应各种尺寸的设备。这也直接导致资源文件体积的增加&#xff0c;矢量图没有这个问题。本文将SVG代码编写与即时设计工具相结合&am…

2024050401-重学 Java 设计模式《实战代理模式》

重学 Java 设计模式&#xff1a;实战代理模式「模拟mybatis-spring中定义DAO接口&#xff0c;使用代理类方式操作数据库原理实现场景」 一、前言 难以跨越的瓶颈期&#xff0c;把你拿捏滴死死的&#xff01; 编程开发学习过程中遇到的瓶颈期&#xff0c;往往是由于看不到前进…

[vue2项目]vue2+supermap[mapboxgl]+天地图之地图的初始化

Supermap参考教程 天地图 一、安装 1、终端:npm install supermap/vue-iclient-mapboxgl 2、在package.json文件的dependencies查看supermap/vue-iclient-mapboxgl依赖是否安装成功。 3、在mian.js全局引入 import VueiClient from supermap/vue-iclient-mapboxgl; Vue.use(…

[Classifier-Free] Classifier-Free Diffusion Guidance

1、背景 1&#xff09;Classifier Guidance的问题 a&#xff09;需要额外训练一个分类器&#xff08;要基于噪声图像训练&#xff0c;因此无法用现成的预训练分类器&#xff09;&#xff0c;使得扩散模型的训练pipeline更加复杂 b&#xff09;whether classifier guidance is s…

Vue05-数据绑定

一、数据绑定 1-1、v-bind指令 1-2、v-model指令 1、单项数据绑定&#xff1a; 2、双向数据绑定 注意&#xff1a; 表单元素&#xff0c;必须要有属性&#xff1a;value&#xff01;&#xff01;&#xff01; 1-3、小结

钡铼技术BL103助力实现PLC到OPC-UA无缝转换新高度

在工业4.0的大背景下&#xff0c;信息物理系统和工业物联网的融合日益加深&#xff0c;推动了工业自动化向更高层次的发展。OPC UA作为一种开放、安全、跨平台的通信协议&#xff0c;在实现不同设备、系统间数据交换和互操作性方面扮演了核心角色。钡铼技术公司推出的BL103 PLC…

Java网络编程(上)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:Java文件IO&#x1f649; &#x1f439;今日诗词:来如春梦几多时&#xff1f;去似朝云无觅处&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&a…

AI教我变得厉害的思维模式01 - 成长型思维模式

今天和AI一起思考如何培养自己的成长性思维。 一一核对&#xff0c;自己哪里里做到&#xff0c;哪里没有做到&#xff0c;让AI来微调训练我自己。 成长性思维的介绍 成长性思维&#xff08;Growth Mindset&#xff09;是由斯坦福大学心理学教授卡罗尔德韦克&#xff08;Carol…

OpenWrt开启ipv6

原生版本的openwrt, 开启ipv6方法如下&#xff1a; 导航栏 网络->接口 编辑lan接口 DHCP Sever选项里 找到IPv6 Settings 选项&#xff1a; Designated master 不需要开启。RA-Service 设置为 server modeDHCPv6-Service 设置为 server mode 局域网即可确处理IPv6地址分配…

高并发短视频系统设计:架构、存储与性能优化全解

1. 系统概况与需求分析 1.1 短视频系统简介 当前短视频行业的快速发展&#xff0c;加上用户对高清、流畅观看体验的需求不断提升&#xff0c;对系统的并发处理能力、视频处理速度、存储效率等多方面都提出了极高的要求。那么&#xff0c;我们首先需要了解一个完整的短视频系统…

空间不够用了怎么办

空间告急啊哥们 整理一下清理空间有用的一些blog吧。 【linux】公共服务器如何清理过多的.cache缓存 linux根目录空间不足&#xff0c;追加空间到根目录下 【linux】linux磁盘空间 目录查看清理 和 文件查看清理

php: centos+apache 启动php项目

指导文件 &#xff1a;PHP: Apache 2.x on Unix systems - Manual 下载路径 &#xff1a;Index of /httpd configure: error: APR not found. 解决方案&#xff1a; APR&#xff08;Apache Portable Runtime&#xff09;库。APR是Apache HTTP服务器的可移植运行时环境&…

E: 仓库 “http://download...graphics:/darktable/xUbuntu_22.04 InRelease” 没有数字签名

问题 Ubuntu22.04装了darktable软件没装好&#xff0c;已经卸载了但是没卸载干净,终端使用 sudo apt update 出现的问题&#xff1a; 解决&#xff1a; sudo nano /etc/apt/sources.list.d/*darktable*.list找到了该软件的相关仓库条目&#xff1a;直接给他注释掉就行了。

HBuilderx uniapp启动微信小程序报错[error] Error: Fail to open IDE

1、打开微信呢开发者工具&#xff0c;添加项目 创建小程序--目录&#xff08;目录选择自己小程序项目下的dist/dev/mp-weixin&#xff09;点击确定之后微信开发者工具会自己去编译&#xff0c;等待一会便好&#xff0c;查看微信开发者工具控制台是否有报错日志 如果发现[插件 w…

韩顺平0基础学Java——第17天

p342-373 上课的时候一部分在纸上写过了&#xff0c;就不在这里复盘了。 this可以调用本类的所有方法&#xff0c;super可以调用父类的非private方法 Test Demo Rose Jack John jack 重写equals方法&#xff1a; 15&#xff1a; 1.调用C的有参构造器 2.进入B的有参构造器…

【C++面试50题】

以下是针对C程序员面试可能遇到的一些问题&#xff0c;涵盖了从基础语法、面向对象、STL、内存管理、模板、异常处理、并发编程等多个方面。 ### 基础概念与语法 1. C与C的主要区别是什么&#xff1f; 2. 什么是构造函数和析构函数&#xff1f;它们何时被调用&#xff1f; 3. 什…