基于HTML5的WebGL实现json和echarts图表展现在同一个界面


Posted in HTML / CSS onOctober 26, 2017

突然有个想法,如果能把一些用到不同的知识点放到同一个界面上,并且放到一个盒子里,这样我如果要看什么东西就可以很直接显示出来,而且这个盒子一定要能打开。我用HT实现了我的想法,代码一百多行,这么少的代码能实现这种效果我觉得还是牛的。

先来看看效果图:

基于HTML5的WebGL实现json和echarts图表展现在同一个界面

这个例子最基础的就是最外层的盒子了,所以我们先来看看如何实现它:

var box = new ht.CSGBox();
 dataModel.add(box);

用HT可以很轻易地实现这个盒子,在HT中封装了很多基础图元类型,我们经常用到的ht.Node也是其中一个,这样我们可以不用反复地写相同的代码来完成基础的实现。

这个例子中用的封装好的基础图元是ht.CSGBox,一个盒子模型,可以参考HT for Web 建模手册,我们在手册中可以看到,在CSGBox中我们只能操作这个盒子的各个面,如果你想要自己设置一些特殊的功能,只需要操作ht.Style(HT for Web 风格手册)即可。

要想实现在盒子上的一个面上添加贴图,我能想到的只有HT封装的ht.Default.setImage函数了。

这边我实现的方法是参考HT的editor来运作的,重新声明一个graphview组件和一个datamodel数据模型,然后通过ht.Default.xhrLoad方法调用json,在方法中用ht.Default.parse将text转成json格式,然后反序列化将json里面的内容展现成可视化的界面,再设置动画,再立即刷新用到这个json的界面,否则就算设置了动画,画面也不会改变。

ht.Default.xhrLoad('displays/demo/pump.json', function(text){
    const json = ht.Default.parse(text);
    pumpDM.deserialize(json);
    var currentRotation = 0;
    var lastTime = new Date().getTime();
    setInterval(function(){
        var time = new Date().getTime();
        var deltaTime = time - lastTime;
        currentRotation += deltaTime * Math.PI / 180 * 0.3;
        lastTime = time;
        pumpDM.getDataByTag('fan1').setRotation(currentRotation);
        pumpDM.getDataByTag('fan2').setRotation(currentRotation);
        box.iv();
        // g3d.iv();这边也可以刷新g3d,但是局部刷新更省
        pumpGV.validateImpl();
    }, 10);
}, 10);

这个时候我不能把pumpGV和g3d都加到底层div上,并且我的意图是把pumpGV加到g3d中的CSGBox中的一面上,所以为了让pumpGV显示出来 必须设置pumpGV的宽高,而这个宽高必须比我json画出来的图占的面积要大,不然显示不完整。如果想看这个宽高对显示的影响,可以自己改改看来玩玩。

pumpGV.getWidth = function() { return 600;}
 pumpGV.getHeight = function(){ return 600;}
 pumpGV.getCanvas().dynamic = true;//设置这个是为了让canvas能动态显示

echarts图表的显示也是很基础的,只要再加上 canvas.dynamic = true,并且实时刷新gv即可。

最后,只需要将这两个回传的canvas传入ht.Default.setImage中即可:

ht.Default.setImage('echart', charts(option));
 ht.Default.setImage('pump', pumpGV.getCanvas());

ht.Default.drawImage函数生成新的图实际上就是在canvas上画图,所以我们只要把我们已经画好的canvas传到ht.Default.setImage就可以生成图片了。

有一点需要改进的,我们可以看到盒子上的线段,图形,文字周边都有一圈的锯齿,因为我们在设置字体时,同时设置了半透明,在处于半透明的情况下“blend”样式会被关闭,这个时候我们就没法控制样式了,一般有透明度的时候需要将“all.transparent”设置为true,

我们可以设置需要显示的面的transparent: true即可。看下完成后的效果图:

基于HTML5的WebGL实现json和echarts图表展现在同一个界面

总结

以上所述是小编给大家介绍的基于HTML5的WebGL实现json和echarts图表展现在同一个界面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

HTML / CSS 相关文章推荐
CSS3教程(2):网页边框半径和网页圆角
Apr 02 HTML / CSS
浅谈CSS3 box-sizing 属性 有趣的盒模型
Apr 02 HTML / CSS
CSS3 transforms应用于背景图像的解决方法
Apr 16 HTML / CSS
html5如何及时更新缓存文件(js、css或图片)
Jun 24 HTML / CSS
html5使用canvas画空心圆与实心圆
Dec 15 HTML / CSS
使用phonegap进行本地存储的实现方法
Mar 31 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
Dec 21 HTML / CSS
html5给汉字加拼音加进度条的实现代码
Apr 07 HTML / CSS
html+css 实现简易导航栏功能
Apr 07 HTML / CSS
能用CSS实现的就不要麻烦JavaScript了
Oct 05 HTML / CSS
CSS使用伪类控制边框长度的方法
Jan 18 HTML / CSS
HTML静态页面获取url参数和UserAgent的实现
Aug 05 HTML / CSS
HTML5 文件域+FileReader 分段读取文件并上传到服务器
Oct 23 #HTML / CSS
html5清空画布方法(三种)
Oct 16 #HTML / CSS
html5实现图片转圈的动画效果——让页面动起来
Oct 16 #HTML / CSS
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
Oct 16 #HTML / CSS
有关HTML5中背景音乐的自动播放功能
Oct 16 #HTML / CSS
HTML5实现桌面通知 提示功能
Oct 11 #HTML / CSS
canvas之自定义头像功能实现代码示例
Sep 29 #HTML / CSS
You might like
PHP开发大型项目的一点经验
2006/10/09 PHP
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
广州某公司软件工程师面试题
2014/12/22 面试题
统计员岗位职责
2013/11/14 职场文书
小学生班会演讲稿
2014/01/09 职场文书
校园歌手大赛策划书
2014/01/17 职场文书
美术毕业生求职信
2014/02/25 职场文书
道路施工安全责任书
2014/07/24 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
python基于机器学习预测股票交易信号
2021/05/25 Python
详解Redis复制原理
2021/06/04 Redis
nginx配置虚拟主机的详细步骤
2021/07/21 Servers
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript