基于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制作日历实现代码
Jan 21 HTML / CSS
CSS3属性box-shadow使用指南
Dec 09 HTML / CSS
css3一个简易的 LED 数字时钟实现方法
Jan 15 HTML / CSS
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
Nov 17 HTML / CSS
HTML5使用Audio标签实现歌词同步的效果
Mar 17 HTML / CSS
html5音频_动力节点Java学院整理
Aug 22 HTML / CSS
html5 自定义播放器核心代码
Dec 20 HTML / CSS
html5中valid、invalid、required的定义
Feb 21 HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
Apr 24 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
Jan 10 HTML / CSS
htnl5利用svg页面高斯模糊的方法
Jul 20 HTML / CSS
position:sticky 粘性定位的几种巧妙应用详解
Apr 24 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
CodeIgniter中实现泛域名解析
2014/07/19 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
javascript基本常用排序算法解析
2017/09/27 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
python中的lambda表达式用法详解
2016/06/22 Python
Python中的Django基本命令实例详解
2018/07/15 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
Python如何批量生成和调用变量
2020/11/21 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
团员学习总结的自我评价范文
2013/10/14 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
植树节标语
2014/06/27 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技