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 相关文章推荐
如何判断图片地址是否失效
Feb 02 Javascript
动态添加js事件实现代码
Mar 12 Javascript
Jquery知识点三 jquery表单对象操作
Jan 17 Javascript
jquery三个关闭弹出层的小示例
Nov 05 Javascript
禁止ajax缓存获取程序最新数据的方法
Nov 19 Javascript
JS 删除字符串最后一个字符的实现代码
Feb 20 Javascript
jquery live()调用不存在的解决方法
Feb 26 Javascript
Javascript中将变量转换为字符串的三种方法
Sep 19 Javascript
Vue+Express实现登录状态权限验证的示例代码
May 05 Javascript
leaflet加载geojson叠加显示功能代码
Feb 21 Javascript
package.json各个属性说明详解
Mar 11 Javascript
Vue实现仿iPhone悬浮球的示例代码
Mar 13 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编程网上资源导航
2006/10/09 PHP
php中iconv函数使用方法
2008/05/24 PHP
ie6 动态缩略图不显示的原因
2009/06/21 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
Javascript里使用Dom操作Xml
2007/01/22 Javascript
Javascript中暂停功能的实现代码
2007/03/04 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
学习使用bootstrap3栅格系统
2016/04/12 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
vue实现记事本功能
2019/06/26 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
python九九乘法表的实例
2017/09/26 Python
Python操作mongodb的9个步骤
2018/06/04 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
写给女朋友的检讨书
2014/01/28 职场文书
岗位职责怎么写
2014/03/14 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
领导参观欢迎词
2015/01/26 职场文书
初级职称评定工作总结
2015/08/13 职场文书
解析Java异步之call future
2021/06/14 Java/Android
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android