柱状图js封装插件

Js柱状图插件

1.概述

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

2.效果图如下:

 

3.主要功能

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

4.实现方式

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

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

</div>

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

<script type="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(var i=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(var i=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书写的柱状图插件基本封装完毕,我知道还有很多不完善的地方,比如标题,其实这也非常简单,欢迎朋友们留言评论进行指正,完善这些功能。今天的分享就到这里,以后还会有更多的分享给大家。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值