css3柱状动画+canvas网格
七娃博客152人阅读
0%
0%
0%
0%
0%
核心原理:canvas画网格,css3延迟动画实现柱状图逐个出现!
实现代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>动态柱形图</title> </head> <style type="text/css"> div,canvas{padding: 0;margin: 0;} .crilbox{width: 500px;height: 300px;background:none;margin: 0 auto;display: flex;align-items: flex-end;justify-content: space-between;} .cell{width: 50px;height: 0;background: linear-gradient(to top,#333,#999);color: #fff;text-align: center;animation: moves ease-in-out 0.5s; visibility: hidden;animation-fill-mode: forwards;} .cell:nth-of-type(1){animation-delay:0s} .cell:nth-of-type(2){animation-delay:0.5s;} .cell:nth-of-type(3){animation-delay:1s;} .cell:nth-of-type(4){animation-delay:1.5s;} .cell:nth-of-type(5){animation-delay:2s;} #crilbox{position: absolute;left: 50%;transform: translateX(-50%);top: 8px;z-index: -1;} @keyframes moves{ from{height: 0;} to{visibility: visible;} } </style> <body> <div class="crilbox" > <div class="cell" style="height: 0%;">0%</div> <div class="cell" style="height: 0%;">0%</div> <div class="cell" style="height: 0%;">0%</div> <div class="cell" style="height: 0%;">0%</div> <div class="cell" style="height: 0%;">0%</div> </div> <canvas id="crilbox" width="500" height="300"></canvas> <script type="text/javascript"> window.onload = function(){ var crilbox = document.getElementById("crilbox"); var ctx = crilbox.getContext("2d"); var datas = [ "20%","30%","15%","65%","36%"];//初始数据 var cell = document.querySelectorAll(".cell"); // 填充高度 for(var d = 0;d<cell.length;d++){ cell[d].style.height = datas[d]; cell[d].innerHTML = datas[d]; } // 绘制网格 for (var i = 0;i<500;i = i+10) { ctx.moveTo(i,0); ctx.lineTo(i,300); } for(var j = 0;j<300;j = j+10){ ctx.moveTo(0,j) ctx.lineTo(500,j); } ctx.strokeStyle = "#ddd"; ctx.stroke(); } </script> </body> </html>