基于 H5 Canvas 实现楼宇新风系统

前言

现如今,新型冠状病毒疫情牵动着每一个人的神经,每天起床后的第一件事就是打开疫情地图,看看最新的疫情数据。

http://www.hightopo.com/demo/coronavirus/

如何防控对于普通居民来说,减少外出,注意卫生等都是有效措施,另外保持室内通风换气也是至关重要的,无论是飞沫传播还是流传的气溶胶传播,环境密闭导致空气浑浊,易造成病菌滋生,增加人体感染疾病的风险。勤通风可有效地排除微生物等有害物质含量,保障我们呼吸环境的健康。

智能新风系统,不受寒冷的天气或是户型限制,现已被很多智能楼宇、智能家居广泛利用,今天就带大家一起打造一个超级实用新风监控系统。

https://hightopo.com/demo/smart-building-wind-system/

代码实现

首先,我们还是要对整体界面做一下基础设置,这样养成好习惯,避免落下不容易发现的小问题:

gv.getSelectWidth = function() { return 0 } // 隐藏选中边框
gv.setMovableFunc(function() { return false }) // 禁止图元移动
gv.handleScroll = function() {} // 禁止鼠标缩放
gv.handlePinch = function() {} // 禁止 touch 下双指缩放
gv.setPannable(false) // 禁止平移
gv.setRectSelectable(false) // 禁止框选
gv.setScrollBarVisible(false) // 隐藏滚动条
window.document.oncontextmenu = function() { return false } // 全局设置右键菜单禁用

然后打开图纸,我们需要将里面的模块封装,使整体结构更加整齐且有利于我们后续的驱动和复用性。这里就不做过多介绍了。下面我们一起来从头看看每一部分的实现过程。

风格切换功能为了匹配不同人所中意的颜色风格,这里我们做了一个稍稍偏亮绿的护眼色,来面对长期使用显示屏的人群。图标的旋转应用了动画函数:

ht.Default.startAnim({
    duration: 500,
    easing: function(t) { return t },
    action: function(v, t) {
        data.a(‘rotation‘, (oldValue + (newValue + oldValue) * v) * Math.PI / 180)
    }
})

http://www.hightopo.com/guide/guide/core/beginners/ht-beginners-guide.html#ref_animation

duration 是动画周期毫秒数,HT 将在指定时间周期内完成动画,easing 参数用于通过数学公式控制动画,如匀速变化、先慢后快等效果。action 函数的第一个参数 v 代表通过 easing(t) 函数运算后的值,t 代表当前动画进行的进度 [0~1],一般属性变化根据 v 参数进行。我们通过对图元定义的 ‘rotation‘ 属性值来驱动它的旋转一周效果,用起始值与目标值进行计算并转化弧度制。颜色的切换以及悬浮穿的显隐都是把所涉及到的元素的相关属性做处理。

这其中每一处可交互的地方都加上鼠标 hover 效果,增强交互体验感:

view.setCursor(‘pointer‘)
view.setCursor(‘default‘)

时间和日期用了格式转化插件,加个定时器去修改所对应的文本属性来使其动态变化:

background.timer = setInterval(function() {
    background.a(‘time‘, DateUtil.format(new Date(), ‘HH:mm:ss‘))
    background.a(‘date‘, DateUtil.format(new Date(), ‘yyyy.MM.dd‘))
    if (!background.dm()) {
        clearInterval(background.timer)
    }
}, 1000)

接下来是左侧的一块智能数据监控面板,鼠标悬浮时会在关联的设备上面显示一个悬浮气泡来对应,并且数据会跳动:

数据我们就不多说了,demo 中采用了一些随机数去动态来展示应用性,那么这些气泡是怎么实现的呢:

我们要先构思好实现的方式,这里我们先看一下气泡的动效,我们将气泡单独封装为一个图标,然后调整好光环的位置和大小,绑定横缩放、纵缩放、透明度,基本就完成了,我们控制它的横纵缩放来达到扩大的效果,然后再调整透明来实现消散的效果,且循环播放:

function bubbleAnim() {
    ht.Default.startAnim({
        duration: 1000,
        easing: function(t) { return t },
        action: function(v, t) {
            bubble.a(‘opacity‘, 1 - v) // 透明度
            bubble.a(‘scaleX‘, v) // 横缩放
            bubble.a(‘scaleY‘, v) // 纵缩放
        },
        finishFunc: function() {
            bubbleAnim()
        }
    })
}
bubbleAnim()

关于它的位置变化我们是这样设计的,因为界面上只会同时出现一个,所以我们图纸上只需要一个气泡图标就可以了,通过所关联的不同的设备图标的位置,来动态改变气泡的位置,然后通过显示隐藏来让它在某位置出现或隐藏:

view.dm().each(function(datas) {
    if (datas.getDisplayName() === ‘送风机设备‘ && datas.getParent().s(‘2d.visible‘)) {
        bubble.p(datas.p().x, datas.p().y - 50)
        bubble.s(‘2d.visible‘, true)
    }
})

因为下面还有一个系统切换菜单,所以多加了一步判断来保护一下。那就直接来说一下这个功能:

风机的转动是旋转角度属性,风向流动是根据裁切方向改变了裁切比例,都是基于动画来实现,参考我们之前提到过的方法,这里不做过多赘述。在这个菜单中,其实也应用到了动画,比如其整体的一个上下滑动,但是有个前提,我们要注意给图标设置好裁切 clip 属性,这样下面的部分就相当于隐藏了,滑动上来才能出现。因为在选定系统后,名称也会变化,所以我们不能直接用这个菜单,而是平时将菜单隐藏,只显示名称,点击后再它俩的状态再反过来,然后再执行我们的操作就不会冲突了:

// 文字隐藏
data.a(‘textV‘, false)
// 菜单显示
data.a(‘menuV‘, true)
// 框上移
ht.Default.startAnim({
    duration: 200,
    easing: function(t) { return t },
    action: function(v, t) {
        data.a(‘frameP‘, [0.13932, 71.90718 + (0.00079 - 71.90718) * v, 591.86062, 44.88772])
    }
})
// 菜单上移
ht.Default.startAnim({
    duration: 200,
    easing: function(t) { return t },
    action: function(v, t) {
        data.a(‘menuP‘, [228.19231, 80.78752 + (8.88113 - 80.78752) * v, 135, 99])
    }
})

当我们选择一个选项后不要忘记切换状态和更新名称并且将气泡隐藏掉,这种小 bug 一定要注意。至于切换系统我们只需在前期准备过程中把同一系统的图元放在一个组里,然后我们在选择时控制各组的显示和隐藏就好了,对于 2D 图标来说我们来对它的 ‘2d.visible‘ 属性选择性的赋予 true / false 布尔值就行了。

总结

整个新风系统基本搭建完成了,我们可以把它广泛应用于各种不同楼宇的智能数字可视化监控。未来将会有更多的智慧 + 数据可视化等着我们,迈入新的信息化时代要掌握强而有力的技术!

 

HT for Web :(http://www.hightopo.com/demos/cn-index.html)

 

原文地址:https://www.cnblogs.com/htdaydayup/p/12330936.html

时间: 2024-07-31 16:17:39

基于 H5 Canvas 实现楼宇新风系统的相关文章

基于 HTML5 的 WebGL 3D 智能楼宇监控系统

前言 智能监控的领域已经涉及到了各大领域,工控.电信.电力.轨道交通.航天航空等等,为了减少人员的消耗,监控系统必不可少.之前我写过一篇 2D 的智能地铁监控系统广受好评,突然觉得,既然 2D 的这么受欢迎,那么 3D 的需求量肯定也是非常大的,3D 毕竟比 2D 来说还是更直观一些,于是有了这个例子以及这篇文章.智能监控系统在 3D 中应用比较广泛的除了 3D 机房以外,我觉得就是楼宇的监控了,可是之前做了很多关于机房方面的 Demo,所以最终决定做 3D 楼宇监控系统. 代码生成 场景搭建

基于 HTML5 Canvas 的智能安防 SCADA 巡逻模块

基于 HTML5 Canvas 的智能安防 SCADA 巡逻模块 前言 随着大数据时代的来临,物联网的日益发展,原先的 SCADA 系统本身也在求新求变,从最开始的专业计算机和操作系统,到通用计算机和相关软件,再到现在基于 HTML5 Canvas 的新型组态开发,其应用的范围也从最初的电力,逐渐发展到应用于电力.冶金.化工.自动化群控等等大部分工控场景中,本文是将传统安防结合 SCADA 系统,制作的智能安防中的巡逻监控模块,主要采用 HT for Web 作为开发环境. 代码实现 绘制背景色

基于H5的微信支付开发详解

这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可供参考,有的朋友直接看文档就可以自己实现此支付接口的开发了. 一.前言 为何我还写一篇微信支付接口的博文呢?第一,我们必须知道,所谓的工作经验很多都是靠总结出来的,你只有总结了更多知识,积累了更多经验,你才能在该行业中脱颖而出,我个人觉得如今的招聘,很多都需要工作经验(1年.3年.5年....),其

****基于H5的微信支付开发详解[转]

这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可供参考,有的朋友直接看文档就可以自己实现此支付接口的开发了. 一.前言 为何我还写一篇微信支付接口的博文呢?第一,我们必须知道,所谓的工作经验很多都是靠总结出来的,你只有总结了更多知识,积累了更多经验,你才能在该行业中脱颖而出,我个人觉得如今的招聘,很多都需要工作经验(1年.3年.5年....),其

基于HTML5 Canvas的饼状图表实现教程

昨天我们分享了一款基于HTML5的线性图表应用,效果非常不错,可以看在线DEMO或者实现教程.今天我们继续来分享一款基于HTML5的网页图表,它也是利用Canvas绘制的,但是和前面不同的是,这款图表是饼状图,并且我们可以点击右侧的表格来选中激活当前的图表数据,具体效果可以看DEMO演示. 你也可以在这里查看在线演示 下面是实现的过程及源码,一起分享给大家. HTML代码: <div id="container"> <canvas id="chart&quo

一款基于HTML5 Canvas的画板涂鸦动画

今天给各网友分享一款基于HTML5 Canvas的画板涂鸦动画.记得之前我们分享过一款HTML5 Canvas画板工具,可以切换不同的笔刷,功能十分强大.本文今天要再来分享一款基于HTML5 Canvas的画板涂鸦动画应用,功能和之前那个类似,但是新增了回撤和清空画板的操作,实现思路也基本类似.实现的效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="wrap"> <canvas id="canvas" cl

基于 VNCServer + noVNC 构建 Docker 桌面系统

by Falcon of TinyLab.org 2015/05/02 简介 基于 ssh + Xpra 构建 Docker 桌面系统 刚介绍了如何通过 Ssh + Xpra 构建 C/S 架构的 Docker 桌面系统. 本文介绍另外一种 B/S 架构的 Docker 桌面系统,即基于 VNCServer + noVNC 构建一个可以通过浏览器直接访问的 Docker 桌面系统. noVNC VNCServer 是一个为了满足分布式用户共享服务器资源,而在服务器开启的一项服务,对应的客户端软件

基于 WebGL 的 HTML5 楼宇自控 3D 可视化监控

前言 智慧楼宇和人们的生活息息相关,楼宇智能化程度的提高,会极大程度的改善人们的生活品质,在当前工业互联网大背景下受到很大关注.目前智慧楼宇可视化监控的主要优点包括: 智慧化 -- 智慧楼宇是一个生态系统,像人一样拥有感知能力.自我判断能力以及控制能力. 绿色化 -- 绿色建筑在耗能.产能以及能源管理方面实现绿色化,楼宇安防实现绿色化监控. 运行成本可控制 -- 基于可持续发展的要求,现代建筑.商业建筑需运行50年以上,建筑在运行过程中能源消耗巨大,如何降低运营成本降低,使建筑在低碳.环保的状态

基于宿主机制作一个小系统

一.Linux系统的启动流程 1.启动程序 Linux系统的启动流程为:POST-->BIOS(BootSequence)-->MBR(bootloader,446)--> Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab). 首先上电自检POST:它负责完成对CPU.主板.内存.软硬盘子系统.显示子系统(包括显示缓存).串并行接口.键盘.CD-ROM光驱等的检测.主要检查硬件的好坏. 紧接着就是BIOS进行硬件相关初始化,之