日期:2014-05-17  浏览次数:21039 次

【共享】IE下实现3D柱状图(支持链接、事件),javascript+vml实现
效果图和源码:http://blog.sina.com.cn/u/4762fc13010009r9
由于新浪博客不能发下载链接(我也没有空间放),我也很少来csdn看自己发过的帖子
所以麻烦需要的朋友请在博客后留言留下信箱,我会在第一时间发到你的邮箱。

        前段时间一个项目需要在IE(这个项目没有支持firefox等浏览器的需求)上呈现3D统计图。
 
        最初的解决方案是:用jfreechart等生成3D图,在页面上显示。
        缺陷:加入链接、事件等比较不方便
 
        改进后的解决方案:用flash画3D图,然后调用object显示。
        缺陷:调用的页面已经有很多flash   object了(一些复杂的需要交互的统计图,不得不用flash做,如:地图等),导致页面载入很慢。
 
        于是想到能不能用vml来做。当时还不像现在那么忙,空闲时间比较多。于是抽空写了一个vml的3D柱状图。缺陷也是非常明显:不支持IE以外的浏览器,甚至我在IE7下面还没有测试过。
 
        由于项目工期紧,flash的方案已经通过严格的测试了,所以最后没有采用vml的方案,我写的这个东西到一半也就夭折了。所幸还能给出一个demo。给需要的人吧。
 
          可能有的朋友见过这个图,这个是从网上找的一个效果修改的,原作者是龚鸣。大家可以上网搜到他最初的代码。
          除了显示效果,其它的东西我都重写了。主要改进如下:
        (1)支持位置控制。可以嵌入到页面的任何地方。对于嵌入的容器(div等),可以支持css控制。龚鸣的版本是没办法做到的,使用的是绝对位置。
        (2)重写数据定义方式:以前是数组,现在用json
        (3)重写调用方式:面向对象
        (4)支持数据重用
        (5)柱状图和文字过长,可自动用...代替,同时柱子和文字都支持链接、事件等。
 
        调用方式如下:
 
//   初始化数据,json
var   d   =   '[{ "value ": "201 ", "name ": "阿里巴巴   报价   中华   版权   代理   ", "id ": "12661_61 ", "url ": "http://www.baidu.com ", "target ": "_blank "},{ "value ": "43 ", "name ": "公积金贷款   存款   职工   专家   ", "id ": "12661_49 ", "behavior ": "active(this) "},{ "value ": "42 ", "name ": "美国伊拉克   华盛顿   五角大楼   越战   ", "id ": "12651_32 "},{ "value ": "26 ", "name ": "单位   广州   房价   政府   市长   ", "id ": "12671_29 "},{ "value ": "26 ", "name ": "学生   学校   泰国   寄宿   警方   ", "id ": "12651_40 "}] ';

var   data   =   eval( '( '+d+ ') ');

//   初始化柱状图
var   h   =   new   Histogram(data,340,280);

//   一些属性
h.setTitle( '当日前五热点统计图 ');
h.setNameLabel( '主题名称 ');
h.setValueLabel( '文档数量 ');

//   画图
h.draw( 'm ', 'V ');
 
        本来打算加上svg,以支持非ie的浏览器。但是由于时间关系,仅仅这个vml版本的很多已知问题都没有纠正。我想我近期也没有精力来做这个了。放出来,需要的人拿去用吧~~
 
        尽管代码我完全重写了,但是显示效果还是要注明来自网友龚鸣和绝对零度(awaysrain),版权就归这两位所有吧,我没有其他附加的限制。


      需要索取源码的,请在
      http://blog.sina.com.cn/u/4762fc13010009r9
      留下信箱~~

------解决方案--------------------
Kmioer@163.com
学习一下
------解决方案--------------------
给你发邮件了,请给我来一份,学习了
------解决方案--------------------
用了,很好用,谢谢
------解决方案--------------------
vml不难,好久前就做过....

你从老绝的啥地方弄的代码??