jQuery制作简单柱状图实例


Posted in Javascript onJanuary 28, 2015

本文实例讲述了jQuery制作简单柱状图的方法。分享给大家供大家参考。具体实现方法如下:

Html部分:

<head>  

<title>柱状图</title>  

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  

<link href="css.css" type="text/css" rel="stylesheet" />  

<script src="jquery-1.8.2.min.js" type="text/javascript"></script>  

<script src="histogram.js" type="text/javascript"></script>  

</head>  

<body>  

<div class="histogram-container" id="histogram-container"></div>  

</body>

CSS部分:

/*以下为柱状图样式*/  

.histogram-container{position:relative;margin-left:60px;margin-top:10px;margin-bottom:25px;}  

.histogram-bg-line{border:#999 solid;border-width:0 0px 1px 1px;border-right-color:#eee;overflow:hidden;width:99%;}  

.histogram-bg-line ul{overflow:hidden;border:#eee solid;border-width:1px 0 0 0;clear:both;}  

.histogram-bg-line li{float:left;overflow:hidden;background:#fff;}  

.histogram-bg-line li div{border-right:1px #eee solid;}  

.histogram-content{position:absolute;left:0px;top:0;width:99%;height:100%;}  

.histogram-content ul{height:100%;}  

.histogram-content li{float:left;height:100%;text-align:center;position:relative;}  

.histogram-box{position:relative;display:inline-block;height:100%;width:20px;}  

.histogram-content li a{position:absolute;bottom:0;right:0;display:block;width:20px;font-size:0;line-height:0;}  

.histogram-content li .histogram-name{position:absolute;bottom:-20px;left:0px;white-space:nowrap;display:inline-block;width:100%;font-size:12px;overflow:hidden;}  

.histogram-y{position:absolute;left:-60px;top:-10px;font:12px/1.8 verdana,arial;}  

.histogram-y li{text-align:right;width:55px;padding-right:5px;color:#333;}  

.histogram-bg-line li div,.histogram-y li{height:30px;/*控制单元格的高度及百分比的高度,使百分数与线条对其*/}

Js部分:

$(function(){  

var dataArr={  

    "data":[  

        {"id":1,"name":"百度","per":"10"},  

        {"id":2,"name":"腾讯","per":"20"},  

        {"id":3,"name":"新浪","per":"10"},  

        {"id":4,"name":"网易","per":"44"},  

        {"id":5,"name":"搜狐","per":"50"},  

        {"id":5,"name":"小虾虎鱼","per":"69"},  

        {"id":5,"name":"人人网","per":"72"},  

        {"id":5,"name":"爱奇艺","per":"88"},  

        {"id":5,"name":"奇虎360","per":"92"},  

        {"id":5,"name":"阿里巴巴","per":"15"},  

        {"id":5,"name":"阿里巴巴","per":"10"}  

    ]  

};  

new histogram().init(dataArr.data);  

});  

  

function histogram(){  

    var controls={};  

    var bgColor=new Array("#666666","#21AA7C","#2277BB","#dc7644","#BBAA22","#AA22AA","#338800","#1099EE","#ffcc33","#ED3810");  

    this.init=function(data,y){  

        setControls();  

        buildHtml(data,y);  

    }  

    function setControls(){  

        controls.histogramContainer=$("#histogram-container");  

        controls.histogramBgLineUL=controls.histogramContainer.children("div.histogram-bg-line");  

        controls.histogramContentUL=controls.histogramContainer.children("div.histogram-content");  

        controls.histogramY=controls.histogramContainer.children("div.histogram-y");  

    }  

    function buildHtml(data,y){  

        var len=data.length,perArr=new Array(),maxNum,maxTotal,yStr='';  

        var contentStr='',bgLineStr='',bgLineAll='';  

        var widthPer=Math.floor(100/len);  

        minWidth=len*21+60;  

        controls.histogramContainer.css("min-width",minWidth+"px");  

          

        for(var a=0;a<len;a++){  

            perArr[a]=parseInt(data[a]['per']);       

        }  

        maxNum=String(perArr.max());  

        if(maxNum.length>2){  

            var x=parseInt(maxNum.substr(maxNum.length-2,1))+1;  

            maxTotal=Math.floor(parseInt(maxNum/100))*100+x*10;  

        }else{  

            maxTotal=Math.floor(parseInt(maxNum/10))*10+10;  

        }  

          

        //y轴部分  

        if(y=="%"){  

            yStr+='<li>100%</li><li>80%</li><li>60%</li><li>40%</li><li>20%</li><li>0%</li>';             

        }else{  

            var avg=maxTotal/5;  

            for(i=5;i>=0;i--){  

                yStr+='<li>'+avg*i+'</li>';  

            }  

        }  

          

        //柱状条部分  

        for(var i=0;i<len;i++){  

            var per=Math.floor(parseInt(data[i]['per'])/maxTotal*100);  

            var n=Math.floor(parseInt(per)/10);  

            contentStr+='<li style="width:'+widthPer+'%">';  

            contentStr+='<span class="histogram-box"><a style="height:'+per+'%'+';background:'+bgColor[n]+';" title="'+data[i]['per']+'"></a></span><span class="histogram-name">'+data[i]['name']+'</span>';  

            contentStr+='</li>';  

            bgLineStr+='<li style="width:'+widthPer+'%;"><div></div></li>';  

        }  

          

        //背景方格部分  

        for(var j=0;j<5;j++){  

            bgLineAll+='<ul>'+bgLineStr+'</ul>';  

        }  

        bgLineAll='<div class="histogram-bg-line">'+bgLineAll+'</div>';  

        contentStr='<div class="histogram-content"><ul>'+contentStr+'</ul></div>';  

        yStr='<div class="histogram-y"><ul>'+yStr+'</ul></div>';  

        controls.histogramContainer.html(bgLineAll+contentStr+yStr);  

        controls.histogramContainer.css("height",controls.histogramContainer.height()+"px");//主要是解决IE6中的问题        

    }  

}  

Array.prototype.max = function(){//最大值  

 return Math.max.apply({},this)   

}

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

Javascript 相关文章推荐
hover的用法及live的用法介绍(鼠标悬停效果)
Mar 29 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
Feb 28 Javascript
Three.js学习之文字形状及自定义形状
Aug 01 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
Sep 16 Javascript
微信小程序 Template详解及简单实例
Jan 05 Javascript
canvas时钟效果
Feb 16 Javascript
js实现可以点击收缩或张开的悬浮窗
Sep 18 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
Nov 22 Javascript
JavaScript中变量提升与函数提升经典实例分析
Jul 26 Javascript
Vue组件的使用及个人理解与介绍
Feb 09 Javascript
vue项目前端埋点的实现
Mar 06 Javascript
微信小程序实现Swiper轮播图效果
Nov 22 Javascript
js分页工具实例
Jan 28 #Javascript
js制作简易年历完整实例
Jan 28 #Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
Jan 28 #Javascript
调试JavaScript中正则表达式中遇到的问题
Jan 27 #Javascript
JavaScript插件化开发教程 (四)
Jan 27 #Javascript
JavaScript插件化开发教程 (三)
Jan 27 #Javascript
js实现简单随机抽奖的方法
Jan 27 #Javascript
You might like
php下批量挂马和批量清马代码
2011/02/27 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
php多进程应用场景实例详解
2019/07/22 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
Python and、or以及and-or语法总结
2015/04/14 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
init进程的作用
2012/04/12 面试题
《赵州桥》教学反思
2014/02/17 职场文书
教师三严三实心得体会
2014/10/11 职场文书
办公用房租赁协议书
2014/11/29 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
追讨欠款律师函
2015/05/27 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python