JavaScript实现的DOM绘制柱状图效果示例


Posted in Javascript onAugust 08, 2018

本文实例讲述了JavaScript实现的DOM绘制柱状图效果。分享给大家供大家参考,具体如下:

<!DOCTYPE html>
<html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>3water.com JavaScript DOM绘制柱状图</title>
    <style>
      #chart-wrap{ 
        width:910px; 
        height:240px;
        border:solid 1px #B3B3DC;
        position:relative; 
        top:40px; 
        left:20px;
      } 
    </style>
  </head>
  <body>
    <div id="chart-wrap"></div>
    <script>
      function renderChart(data) {
        var cw = document.getElementById("chart-wrap"); 
        cw.innerHTML = ""; 
        var max = 0; 
        for (var index in data) {
          if (data[index] > max)
            max = data[index];
        }
        var percent = 180 / max; 
        var i = 0;
        for (var index in data) { 
          var bar = document.createElement("div"); 
          bar.id = index + "_" + data[index]; 
          bar.style.height = Math.round(percent * data[index]) + "px"; 
          bar.style.width = "40px";
          bar.style.left = (i * 40) + 165 + "px"; 
          bar.style.marginLeft = (i * 20) + "px"; 
          bar.style.position = "absolute"; 
          bar.style.background = "none repeat scroll 0 0 pink";
          bar.style.overflow = "hidden";
          bar.setAttribute("title", index + ":" + data[index]);
          bar.style.display = "block"; 
          bar.style.top = 200 - Math.round(percent * data[index]) + "px"; 
          cw.appendChild(bar); 
          var axis = document.createElement("div"); 
          axis.id = "axis_" + i; 
          axis.style.width = "40px"; 
          axis.style.left = (i * 40) + 165 + "px"; 
          axis.style.marginLeft = (i * 20) + "px";
          axis.style.textAlign = "center"; 
          axis.style.position = "absolute"; 
          axis.style.top = "205px"; 
          axis.innerHTML = '<span style="font-size:12px; color:grey;"> ' + i + '</span>'; 
          cw.appendChild(axis); 
          i++;
        }   
        for (var i = 0; i < 5; i++) { 
          var ayis = document.createElement("div"); 
          ayis.style.width = "30px"; 
          ayis.style.position = "absolute"; 
          ayis.style.top = (36 * i) + (20 - 6) + "px"; 
          ayis.style.left = "140px"; 
          ayis.innerHTML = '<span style="font-size:12px; color:grey;"> ' + Math.round(max - (max / 5) * i) + '</span>'; 
          cw.appendChild(ayis); 
          var line = document.createElement("div"); 
          line.setAttribute("style", "width:580px; left:165px; border-top:1px dotted grey; height:1px; line-height:1px; display:block; overflow:hidden; position:absolute; "); 
          line.style.top = (36 * i) + 20 + "px"; 
          cw.appendChild(line); 
        } 
      }
      var data = [10,60,50,30,40,80,20,70,100,90];
      renderChart(data);
    </script>
  </body>
</html>

运行效果如下:

JavaScript实现的DOM绘制柱状图效果示例

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js onpropertychange输入框 事件获取属性
Mar 26 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
Oct 15 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
Jun 20 Javascript
原生JS实现首页进度加载动画
Sep 14 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
Nov 09 Javascript
laydate.js日期时间选择插件
Jan 04 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
bootstrap多层模态框滚动条消失的问题
Jul 21 Javascript
iframe高度自适应及隐藏滚动条的实例详解
Sep 29 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 Javascript
Vuex 模块化使用详解
Jul 31 Javascript
详解Vue串联过滤器的使用场景
Apr 30 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
Aug 07 #Javascript
快速解决处理后台返回json数据格式的问题
Aug 07 #Javascript
详解如何在vue-cli中使用vuex
Aug 07 #Javascript
React styled-components设置组件属性的方法
Aug 07 #Javascript
微信小程序methods中定义的方法互相调用的实例代码
Aug 07 #Javascript
详解vue axios用post提交的数据格式
Aug 07 #Javascript
解决koa2 ctx.render is not a function报错问题
Aug 07 #Javascript
You might like
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
Python中的localtime()方法使用详解
2015/05/22 Python
python爬取51job中hr的邮箱
2016/05/14 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
python之pandas用法大全
2018/03/13 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
django 模型中的计算字段实例
2020/05/19 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
机械专业应届生求职信
2013/12/12 职场文书
农民致富事迹材料
2014/01/23 职场文书
生日庆典策划方案
2014/06/02 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
Django drf请求模块源码解析
2021/06/08 Python