React?less?實(shí)現(xiàn)縱橫柱狀圖示例詳解
引言
之前的文章,咱們介紹過橫向和豎向,具體的內(nèi)容,請(qǐng)看
這次,結(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'));
以上就是React less 實(shí)現(xiàn)縱橫柱狀圖示例詳解的詳細(xì)內(nèi)容,更多關(guān)于React less縱橫柱狀圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
ReactNative錯(cuò)誤采集原理在Android中實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了ReactNative錯(cuò)誤采集原理在Android中實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02React-Native做一個(gè)文本輸入框組件的實(shí)現(xiàn)代碼
這篇文章主要介紹了React-Native做一個(gè)文本輸入框組件的實(shí)現(xiàn)代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-08-08react 國(guó)際化的實(shí)現(xiàn)代碼示例
這篇文章主要介紹了react 國(guó)際化的實(shí)現(xiàn)代碼示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09React實(shí)現(xiàn)翻頁(yè)時(shí)鐘的代碼示例
本文給大家介紹了React實(shí)現(xiàn)翻頁(yè)時(shí)鐘的代碼示例,翻頁(yè)時(shí)鐘把數(shù)字分為上下兩部分,翻頁(yè)效果的實(shí)現(xiàn)需要通過設(shè)置 position 把所有的數(shù)組放在同一個(gè)位置疊加起來,文中有詳細(xì)的代碼講解,需要的朋友可以參考下2023-08-08react-router-dom?v6?使用詳細(xì)示例
這篇文章主要介紹了react-router-dom?v6使用詳細(xì)示例,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-09-09React?Native性能優(yōu)化指南及問題小結(jié)
本文將介紹在React?Native開發(fā)中常見的性能優(yōu)化問題和解決方案,包括ScrollView內(nèi)無法滑動(dòng)、熱更新導(dǎo)致的文件引用問題、高度獲取、強(qiáng)制橫屏UI適配、低版本RN適配iOS14、緩存清理、navigation參數(shù)取值等,感興趣的朋友一起看看吧2024-01-01