柱状图js封装插件

来源:互联网 发布:广通软件怎么样 编辑:程序博客网 时间:2024/06/07 04:42

Js柱状图插件

1.概述

   今天给大家分享一个自己封装的柱状图简单的一个插件,功能比较简单,但是还是比较实用的。

2.效果图如下:

 

3.主要功能

这个插件可以更多让用户来设置这个柱状图,比如用户传过来一个对象数组就可以设置柱状图里所表达的信息,柱状图的颜色,每个柱子的宽度,每个柱子的间隔,还有左边标杆的最大高度等都是可以让用户自己来设置,并且可以按照用户所传div大小按比例缩放柱状图的大小。

4.实现方式

我先在这里自己写了一个div来模拟用户所传的div,定义一个对象数组来模拟用户所传的对象数组信息,然后往封装函数里面传值,利用js语言来实现柱状图。代码如下所示:

<divclass="div"id="div"style="width: 800px;height: 500px;">

</div>

<scriptsrc="js/Tree.js"type="text/javascript"charset="utf-8"></script>

<scripttype="text/javascript">

var div=document.getElementById("div");

var obj1={

label:"2012",

value:"79"

};

var obj2={

label:"2013",

value:"150"

};

var obj3={

label:"2014",

value:"100"

};

var obj4={

label:"2015",

value:"56"

};

var obj5={

label:"2016",

value:"86"

};

var obj6={

label:"2017",

value:"110"

};

var array=[obj1,obj2,obj3,obj4,obj5,obj6];

//用户传值  数组信息   div的id  100%时的数值是多少  100%时的像素是多少  柱子的颜色 柱子的宽度

//柱子之间的距离

initTree(array,div,200,300,"yellow","30px","70px");

</script>

用户已经向封装函数传值,接下来就是利用用户所传的信息来用js语言实现柱状图了,首先根据用户所传的div的宽度按比例计算柱状图的左边距,定义一个存储柱状图高度的数组,设置用户所传的div为相对定位。代码如下:

var left=parseFloat(bigdiv.style.width)/5;

var height=[];

bigdiv.style.position="relative";

根据用户所传的对象数组的长度依次添加每个柱子,为每个柱子创建一个div新节点,然后对这个节点根据用户的要求设置样式,根据div高度按比例计算柱状图的下边距,每个柱子的初始高度设置为0px,根据用户的要求按百分比计算每个柱子的高度并存入height[]数组里面,作为设置动画来用。给柱子设置阴影,增加立体效果。定义用户所传的信息在柱状图里面的位置,最后将设置好的柱子节点添加到用户所传的div中。代码如下:

for(vari=0;i<array.length;i++){

var d=document.createElement("div");

d.style.position="absolute";

d.style.left=left+"px";

d.style.bottom=parseFloat(bigdiv.style.height)/10+"px";

d.style.width=wid;

d.style.height="0px";

height.push((array[i].value/topValue)*total);

d.style.backgroundColor=color;

d.style.borderStyle="outset";

d.style.borderRadius="20px";

d.style.boxShadow="10px 5px 10px";

//d.style.float="left";

d.style.webkitTransition="all 1.5s";

var value=document.createElement("span");

value.style.position="absolute";

value.style.marginTop="-20px";

var index=i;

value.innerHTML=array[i].value;

var label=document.createElement("span");

label.innerText=array[i].label;

label.style.position="absolute";

label.style.bottom="-20px";

left+=parseFloat(l);

d.appendChild(value);

d.appendChild(label);

bigdiv.appendChild(d);

}

然后再利用延时函数(稍微一点延时就可以)向每个柱子设置最终的高度,实现动画效果。代码如下:

setTimeout(function(){

for(vari=0;i<array.length;i++){

var ds=bigdiv.children;

ds[i].style.height=height[i]+"px";

}

},50);

最后,再按照用户所传div的比例,以及用户定义的100%时的值,来设置纵坐标,创建一个div节点来存放纵坐标,设置其样式,添加到用户所传的div中。代码如下:

var y=document.createElement("div");

y.style.position="absolute";

y.style.borderRight="2px solid black";

y.style.width=parseFloat(bigdiv.style.width)/80*9+"px";

y.style.left=parseFloat(y.style.width)/3+"px";

y.style.height=parseFloat(bigdiv.style.height)/5*3+"px";

y.style.bottom=parseFloat(bigdiv.style.height)/10+"px";

for(i=0;i<=topValue;i++){

if(i%(topValue/4)==0){

var node=document.createElement("span");

node.innerText=i;

node.style.bottom=i/topValue*total+"px";

node.style.position="absolute";

node.style.left=parseFloat(y.style.width)/9*5+"px";

y.appendChild(node);

}

}

bigdiv.appendChild(y);

现在js书写的柱状图插件基本封装完毕,我知道还有很多不完善的地方,比如标题,其实这也非常简单,欢迎朋友们留言评论进行指正,完善这些功能。今天的分享就到这里,以后还会有更多的分享给大家。