網(wǎng)站首頁 編程語言 正文
引言
之前的文章,咱們介紹過橫向和豎向,具體的內(nèi)容,請(qǐng)看
- React + CSS 繪制橫向柱狀圖
- React + CSS 繪制豎狀柱狀圖
這次,結(jié)合起來,橫向和豎向,一起畫
主要設(shè)計(jì)來源
三個(gè)部分
<ul className="vertical">
<li className="vertical_li">100</li>
<li className="vertical_li">75</li>
<li className="vertical_li">50</li>
<li className="vertical_li">25</li>
<li className="vertical_li">0</li>
</ul>
display 布局
.vertical {
height: 337px;
font-size: 12px;
font-weight: bold;
color: #9eadca;
display: flex;
flex-direction: column;
justify-content: space-between;
}
<ul className="crosswise">
<li>0</li>
<li>25</li>
<li>50</li>
<li>75</li>
<li>100</li>
</ul>
display 布局
.crosswise {
width: 335px;
font-size: 12px;
font-weight: bold;
color: #9eadca;
display: flex;
flex-direction: row;
justify-content: space-between;
margin-top: -31px;
margin-left: -21px;
}
<div className="point_list">
{list.map((item, index) => {
return (
<div
className="point"
style={{ top: `${100 - parseFloat(item.y)}%`, left: `${item.x}%` }}
onMouseEnter={() => onMouseEnter(item, index)}
onMouseLeave={() => onMouseLeave(index)}
key={index}
>
{item.name}
</div>
)
})}
</div>
動(dòng)態(tài)位置使用絕對(duì)定位
.point_list {
width: 308px;
height: 308px;
position: absolute;
top: 0px;
left: 0px;
}
具體的位置,是通過傳入的參數(shù)來進(jìn)行控制的。如果傳入的參數(shù)不是具體的位置數(shù)值,前端也可以進(jìn)行二次的計(jì)算。這里我就不演示了。之前的文章都有介紹,感興趣的小伙伴可以去前兩篇文章看一下。
style
ul,
li {
list-style: none;
padding: 0;
}
.parallel-comparison {
height: 300px;
padding-left: 35px;
padding-top: 49px;
padding-right: 29px;
// height: 100%;
.parallel_top {
display: flex;
height: 33px;
align-items: center;
.samll {
display: inline-block;
width: 4px;
height: 24px;
background-color: #085dff;
border-radius: 3px;
}
.text {
font-size: 24px;
font-weight: 500;
color: #085dff;
line-height: 33px;
margin-left: 8px;
margin-right: 24px;
}
.history {
padding: 5px 16px;
background-color: #dce0e6;
border-radius: 6px;
color: #ffffff;
font-size: 12px;
}
}
.english {
font-size: 18px;
font-weight: 500;
color: #ccd6e3;
}
.parallel_bottom {
display: flex;
margin-top: 48px;
.left {
height: 424px;
box-shadow: 0px 0px 32px 0px rgba(0, 40, 96, 0.07);
border-radius: 8px;
padding-top: 15px;
padding-left: 25px;
h3 {
font-size: 18px;
font-weight: 400;
color: #07132b;
}
.left_bottom {
display: flex;
width: 553px;
.content {
display: flex;
flex-direction: column;
.willingness {
color: #9eadca;
margin-left: 140px;
}
.gradual_change {
display: flex;
flex-direction: row;
align-items: center;
.box {
width: 308px;
height: 308px;
background-color: #f2f6f6;
margin-left: 27px;
position: relative;
.vertical {
height: 337px;
font-size: 12px;
font-weight: bold;
color: #9eadca;
display: flex;
flex-direction: column;
margin-top: -8px;
margin-left: -21px;
justify-content: space-between;
}
.crosswise {
width: 335px;
font-size: 12px;
font-weight: bold;
color: #9eadca;
display: flex;
flex-direction: row;
justify-content: space-between;
margin-top: -31px;
margin-left: -21px;
}
.point_list {
width: 308px;
height: 308px;
position: absolute;
top: 0px;
left: 0px;
.point {
position: absolute;
background-color: #ffffff;
text-align: center;
padding: 2px 5px;
font-size: 12px;
border-radius: 20px;
background: #e6eef4;
box-shadow: 20px 20px 60px #c4cacf, -20px -20px 60px #ffffff;
}
}
}
.good_value {
display: inline-block;
width: 15px;
writing-mode: vertical-lr;
color: #9eadca;
font-size: 14px;
margin-left: 12px;
margin-right: 4px;
}
}
}
}
}
}
}
JS
import React, { useState, useEffect } from 'react';
import ReactDom from 'react-dom';
const ParallelComparison = ({ gradualChangeDataList }) => {
const [list, setList] = useState(gradualChangeDataList)
useEffect(() => {
const _list = list
.map((item) => {
return {
...item,
sum: parseFloat(item.x) + parseFloat(item.y),
isHover: false
}
})
.sort((a, b) => b.sum - a.sum)
}, [gradualChangeDataList])
return (
<div className="parallel-comparison">
<div className="parallel_bottom">
<div className="left">
<div className="left_bottom">
<div className="content">
<div className="gradual_change">
<div className="box">
<ul className="vertical">
<li className="vertical_li">100</li>
<li className="vertical_li">75</li>
<li className="vertical_li">50</li>
<li className="vertical_li">25</li>
<li className="vertical_li">0</li>
</ul>
<ul className="crosswise">
<li>0</li>
<li>25</li>
<li>50</li>
<li>75</li>
<li>100</li>
</ul>
<div className="point_list">
{list.map((item, index) => {
return (
<div
className="point"
style={{ top: `${100 - parseFloat(item.y)}%`, left: `${item.x}%` }}
key={index}
>
{item.name}
</div>
)
})}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
const Test = function () {
const _arr = new Array()
for (let i = 0; i < 5; i++) {
_arr.push({
id: i,
x: (Math.random() * 100).toFixed(2),
y: (Math.random() * 100).toFixed(2),
name: '碧螺春',
})
}
return (
<ParallelComparison gradualChangeDataList={_arr} />
);
};
ReactDom.render(<Test />, document.getElementById('app'));
原文鏈接:https://juejin.cn/post/7144652250504232991
相關(guān)推薦
- 2023-03-26 詳解C/C++中低耦合代碼的設(shè)計(jì)實(shí)現(xiàn)_C 語言
- 2022-10-03 react項(xiàng)目升級(jí)報(bào)錯(cuò),babel報(bào)錯(cuò),.babelrc配置兼容等問題及解決_React
- 2022-12-27 golang時(shí)間/時(shí)間戳的獲取與轉(zhuǎn)換實(shí)例代碼_Golang
- 2022-06-23 Python實(shí)現(xiàn)希爾排序,歸并排序和桶排序的示例代碼_python
- 2022-06-02 redis?sentinel監(jiān)控高可用集群實(shí)現(xiàn)的配置步驟_Redis
- 2022-07-20 C語言深入刨析數(shù)據(jù)結(jié)構(gòu)之棧與鏈棧的設(shè)計(jì)與應(yīng)用_C 語言
- 2022-11-11 C#中ArrayList?類的使用詳解_C#教程
- 2022-05-28 Nginx實(shí)現(xiàn)Nacos反向代理的項(xiàng)目實(shí)踐_nginx
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支