数字孪生下的孪生风机,前端技术介绍

文章介绍了孪生风机如何利用Canvas和前端框架Konva实现2D图形和动画效果,特别是平滑的风向角变化动画。同时,通过THREE.js处理风机零部件的交互,如鼠标悬停和选中状态,提供直观的用户界面。这些技术使得风机数据的实时监测更加生动和直观。

 

上一篇文章我们介绍了数字孪生,和该技术下孪生风机的诸多优点。本篇文章向大家介绍下孪生风机用了哪些前端技术?前端效果是如何实现的?

一、Canvas
简介
在web中,实现2D基本图形及动画效果,首先会想到使用canvas。例如上图,实现一个可以实时显示风向角变化的效果图。canvas非常灵活,能够很好地融合JavaScript代码并在浏览器内绘制华丽的图形,拥有多种绘制路径、形状、字符以及添加图像等方法。
面对各种复杂的图形及效果,我们可以采用canvas框架,例如Konva,它可以轻松的实现桌面应用和移动应用中的图形交互交互效果,可以高效的实现动画,变换, 节点嵌套, 局部操作,滤镜,缓存,事件等功能,不仅仅适用于桌面与移动开发, 还有更为广泛的应用。

实现
在实现动画实时变化效果时,如果每次风向发生改变,都需要重绘图形,效果显示难免有些单调。重新绘图的变化过程称为突变动画。

 


我们需要的是平滑的过渡效果,例如,风向角在上一时刻是36.89度,下一时刻是76.84度。动画效果由36.89度渐变到76.84度的平滑效果。


为避免突变动画的情况,我们需要在componentWillUpdate中监听角度参数rotation的变化,当有新的角度参数传入的时候,需要重新绘制图形并将新的参数传入。

代码如下:

componentWillUpdate(nextProps) {
    if (nextProps.rotation !== this.props.rotation) {
      this.layer.destroy()
      this.tween.destroy()
      this.drawWind(nextProps)
    }
  }
//旋转部分初始角度赋值为当前rotation。
 let lineGroup = new Konva.Group({
      x:radius,
      y:radius,
      rotation: this.props.rotation,
      //未变化时采用this.props值。动画处用nextProps
    })

//动画部分旋转角度赋值为新的rotation。
    this.tween = new Konva.Tween({
      node: lineGroup,
      easing: Konva.Easings.Linear,
      duration: 0.5,
      rotation: nextProps.rotation ? nextProps.rotation : nextProps.rotation === 0 ? 0 : this.props.rotation,
      onFinish: () => {
        this.tween.destroy()
      }
    });``

实现
风机模型加载完毕后,当鼠标移动到风机各个零部件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端开发程序员2010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值