vue+canvas如何實(shí)現(xiàn)根據(jù)數(shù)據(jù)展示不同高度,不同漸變顏色的長(zhǎng)方體效果
更新時(shí)間:2024年09月06日 08:54:56 作者:言不及行yyds
這篇文章主要介紹了vue+canvas如何實(shí)現(xiàn)根據(jù)數(shù)據(jù)展示不同高度,不同漸變顏色的長(zhǎng)方體效果,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
不一樣的長(zhǎng)方體
1. 實(shí)現(xiàn)效果預(yù)覽
俗話說(shuō)的好,沒(méi)有實(shí)現(xiàn)不了的頁(yè)面效果,只有禁錮的思想,
這不ui又給整了個(gè)新奇的頁(yè)面效果,
2.實(shí)現(xiàn)思路
2.1效果難點(diǎn)
- 根據(jù)不同的數(shù)據(jù)展示不同的顏色,而且需要漸變并有塊狀效果。
- 繪制多個(gè)單獨(dú)的區(qū)域
2.2 實(shí)現(xiàn)思路
3.實(shí)現(xiàn)
3.1 測(cè)試數(shù)據(jù)編寫
testData1:[ { name:“庫(kù)房1”, now:888, extends:1800 }, { name:“庫(kù)房2”, now:988, extends:1700 }, { name:“庫(kù)房3”, now:488, extends:2200 }, { name:“庫(kù)房4”, now:1888, extends:800 }, { name:“庫(kù)房5”, now:1088, extends:1600 }, { name:“庫(kù)房6”, now:1388, extends:1300 }, { name:“庫(kù)房7”, now:288, extends:2400 }, { name:“庫(kù)房8”, now:888, extends:1800 }, { name:“庫(kù)房9”, now:888, extends:1800 }, { name:“庫(kù)房10”, now:1888, extends:800 }, { name:“庫(kù)房11”, now:1288, extends:1400 }, { name:“庫(kù)房12”, now:1488, extends:1200 }, { name:“庫(kù)房13”, now:1888, extends:800 }, { name:“庫(kù)房14”, now:188, extends:2500 }, { name:“庫(kù)房2”, now:988, extends:1700 }, { name:“庫(kù)房3”, now:488, extends:2200 }, { name:“庫(kù)房4”, now:1888, extends:800 }, { name:“庫(kù)房5”, now:1088, extends:1600 }, { name:“庫(kù)房13”, now:1888, extends:800 }, { name:“庫(kù)房14”, now:188, extends:2500 }, { name:“庫(kù)房3”, now:488, extends:2200 }, { name:“庫(kù)房4”, now:1888, extends:800 }, { name:“庫(kù)房5”, now:1088, extends:1600 }, ],
3.2 編寫canvas繪制函數(shù)
- js部分
draw(i,item){ canvas = document.getElementById(`myCanvas${i}`); const ctx = canvas.getContext('2d'); // 定義矩形塊的寬度和高度 const rectWidth = canvas.width; const rectHeight = canvas.height/8; // 定義矩形塊之間的間距 const rectSpacing = 0.25 ; // 定義要繪制的行數(shù)和列數(shù) //其中2688代表測(cè)試數(shù)據(jù)中的now+extends的總和, //可根據(jù)具體情況自己調(diào)整 const numRows = Math.ceil(item.now*10/2688); const numCols = 1; let color=[] if(Math.ceil(item.now*10/2688) >= 7){ color[0]='#EE5E5D' color[1]='#FFECEC' }else if(Math.ceil(item.now*10/2688) >= 4){ color[0]='#EEA750' color[1]='#FFF0DD' }else{ color[0]='#4BCBA6' color[1]='#9EFAE0' } // 繪制矩形塊 for (let row = 0; row < numRows; row++) { for (let col = 0; col < numCols; col++) { const x = col * (rectWidth + rectSpacing); const y = row * (rectHeight + rectSpacing); // 設(shè)置矩形塊的顏色 const grd = ctx.createLinearGradient(canvas.width/2, 0,canvas.width/2,canvas.height); grd.addColorStop(0, color[1]); grd.addColorStop(1,color[0]); // 用漸變填充 ctx.fillStyle = grd; // 繪制矩形塊 ctx.fillRect(x, y, rectWidth, rectHeight); } } }
- html部分
<ul> <li v-for="item,index in testData1" :key="index"> <p class="title">{{item.now}}/{{item.extends}}m3</p> <div class="show"> <canvas :id="`myCanvas${index}`" class="canvas"></canvas> </div> <p class="storeName">{{item.name}}</p> </li> </ul>
- scss部分
container{ width:100%; height:100%; position:relative; ul{ display:grid; margin-top:20px; margin-left:10px; width:97%; grid-template-columns: repeat(10,1fr); gap:10px; font-family: Source Han Sans-Regular, Source Han Sans; li{ width:100%; aspect-ratio: 1 / 1.5; background: #FFFFFF; box-shadow: 0px 8px 14px 0px rgba(48,78,121,0.5); border-radius: 4px; position:relative; text-align: center; .title{ font-size: 14px; font-weight: 400; color: #929292; margin-top:14px; } .show{ width:33%; height:70%; background: #EFF2F7; margin:10px auto; border-radius: 4px; .canvas{ width:100%; height:100%; transform: rotate(180deg); } } } } }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue2 SSR渲染根據(jù)不同頁(yè)面修改 meta
本篇文章主要介紹了Vue2 SSR渲染根據(jù)不同頁(yè)面修改 meta,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11vue element-ui table表格滾動(dòng)加載方法
下面小編就為大家分享一篇vue element-ui table表格滾動(dòng)加載方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03vue3調(diào)度器effect的scheduler功能實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了vue3調(diào)度器effect的scheduler功能實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12詳解vue項(xiàng)目中調(diào)用百度地圖API使用方法
這篇文章主要介紹了vue項(xiàng)目中調(diào)用百度地圖API使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04