从画布对象上拿到getAlarmLabel方法,设置最新的颜色;

闪烁效果

初始:

新告警颜色

老告警颜色:

工具方法JS:

const twaver = require('twaver');
// 设置每个图元name的颜色
twaver.Styles.setStyle('label.color', '#ec6c00');
// 设置每个图元name2的颜色
twaver.Styles.setStyle('label2.color', '#57ab9a');
twaver.Styles.setStyle('select.color', '#ef8200');
//TWaver内部预定义六中告警级别
twaver.AlarmSeverity.CRITICAL = twaver.AlarmSeverity.add(500, 'Critical', 'C', "#FF0000");
twaver.AlarmSeverity.MAJOR = twaver.AlarmSeverity.add(400, 'Major', 'M', "#FFA000");
twaver.AlarmSeverity.MINOR = twaver.AlarmSeverity.add(300, 'Minor', 'm', "#FFFF00");
twaver.AlarmSeverity.WARNING = twaver.AlarmSeverity.add(200, 'Warning', 'W', "#00FFFF");
twaver.AlarmSeverity.INDETERMINATE = twaver.AlarmSeverity.add(100, 'Indeterminate', 'N', "#C800FF");
twaver.AlarmSeverity.CLEARED = twaver.AlarmSeverity.add(0, 'Cleared', 'R', "#00FF00");const { CRITICAL, MAJOR, WARNING, MINOR, INDETERMINATE, CLEARED } = twaver.AlarmSeverity
export const ALARM1 = CLEARED
export const ALARM2 = INDETERMINATE
export const ALARM3 = MINOR
export const ALARM4 = MAJOR
export const ALARM5 = CRITICAL/*** 创建一个dataBox容器* 容器中可以add图元*/export const returnElementBoxFun = () => new twaver.ElementBox()/*** 创建一个画布 network对象* @param {ElementBox} box  创建一个画布 network对象*/
export const returnNetworkFun = (box) => new twaver.vector.Network(box)/*** 创建一个Group* 用于包裹图元*/
export const returnGroupFun = (box, obj = {}) => {let group = new twaver.Group(obj)box.add(group)return group
}/*** 创建一个容器dataBox和一个画布* 并将容器实例化画布* @returns [box,network] box network*/
export const returnElementBoxAndNetworkFun = () => {let box = returnElementBoxFun();let network = returnNetworkFun(box);return [box, network]
}/*** 用于创建一个节点* @param {ElementBox} box dataBox * @param {String} name 当前节点的name* @param {Number} x   当前节点的x坐标* @param {Number} y 当前节点的y坐标* @returns {Node} Node*/
export const returnNodeFun = (box, Obj = {}) => {let node = new twaver.Node(Obj);// node.setName(name);// node.setLocation(x, y);box.add(node);return node
}/*** * @param {Node} node1 节点1* @param {Node} node2 节点2*/
export const returnLineFun = (node1, node2) => new twaver.Link(node1, node2)/*** 注册图片 用于设置图元的img setImage* @param {String} url 图片 url* @param {NetWork} svg  NetWork对象*/
export function returnRegisterImage(url, svg) {var image = new Image();image.src = url;var views = arguments;image.onload = function () {// getImageName 获取到的图片name用做 node节点的显示imgtwaver.Util.registerImage(getImageName(url), image, image.width, image.height, svg === true);image.onload = null;for (var i = 1; i < views.length; i++) {var view = views[i];if (view.invalidateElementUIs) {view.invalidateElementUIs();}if (view.invalidateDisplay) {view.invalidateDisplay();}}};// getImageName 获取到的图片name用做 node节点的显示imgconst getImageName = (url) => {var index = url.lastIndexOf('/');var name = url;if (index >= 0) {name = url.substring(index + 1);}index = name.lastIndexOf('.');if (index >= 0) {name = name.substring(0, index);}return name;}
}/** @param {*} 告警的Id * @param {*} 告警网元的Id * @param {*} 告警级别 * @param {*} alarmBox 网元容器.getAlarmBox()*/
export const returnAlarmFun = (alarmID, elementID, alarmSeverity, alarmBox) => {var alarm = new twaver.Alarm(alarmID, elementID, alarmSeverity);alarmBox.add(alarm);
}

react页面代码:

import React, { useEffect, useState } from 'react'
import {// returnElementBoxFun,// returnNetworkFun,returnGroupFun,returnElementBoxAndNetworkFun,returnNodeFun,returnLineFun,returnRegisterImage,returnAlarmFun, ALARM1, ALARM2, ALARM3, ALARM4, ALARM5
} from './utils'
const twaver = require('twaver');
// const demo = require('demo');
const Demo = () => {const [network, setnetwork] = useState({})const init = () => {const [box, network] = returnElementBoxAndNetworkFun()setnetwork(_ => network)network.invalidateElementUIs(); document.getElementById("testID").appendChild(network.getView());// 设置最初的大小network.adjustBounds({ x: 0, y: 0, width: 800, height: 800 });let node1 =returnNodeFun(box, { name: '节点1', name2: "节点1name2", location: { x: 100, y: 100 }, })returnNodeFun(box, { name: '节点2', name2: "节点2name2", location: { x: 500, y: 100 }, })returnAlarmFun('alarm', node1.getId(), ALARM2,box.getAlarmBox())var oldAlarmLabel = network.getAlarmLabel;var newAlarmLabel = function (element) {if (element.getName() == '节点1' || element.getName() == '节点2' ) {return null;}return network.prototype.getAlarmLabel(element);}setInterval(function () {if (network.getAlarmLabel == oldAlarmLabel) {network.getAlarmLabel = newAlarmLabel;network.getInnerColor = function (data) {return "red";}} else if (network.getAlarmLabel === newAlarmLabel) {network.getAlarmLabel = oldAlarmLabel;network.getInnerColor = function (data) {return "#FFF00F";}}network.invalidateElementUIs();}, 500); }useEffect(init, [])return (<><p style={{ fontSize: "20px", paddingLeft: "50px", poaddingTop: "50px" }}>tips: </p><ul style={{ fontSize: "20px", paddingLeft: "50px" }}><li>alarm.xoffset和alarm.yoffset以及alarm.position </li><li>对于Link网元的alarm.xoffset和alarm.yoffset有个特殊的含义,<br />如果将xoffset的值设置为正负(0-1)之间的值,则代表了alarm在Link上的百分比位置。<br />当alarm.position设置为”from”,xoffset 取值为”0 – 1”则表示百分比,否则按实际值计算,偏移量均相对于起始from点,<br />position为”to”,则反之。position为其他任何值,<br />hotspot点为所有link长度一半的点,xoffset可取正数(0 – 1)、也可取负数(-1-0),都则按实际值计算。</li></ul>{/* 画布元素需要开启定位 不然生成的图元坐标点会偏移 */}<div id="testID" style={{ width: "800px", height: "800px", border: "1px solid #ccc", position: "relative" }}></div></>)
}
export default Demo

学习参考:TWaver Documents

Twaver-HTML5基础学习(6)告警元素(Alarm)闪烁效果相关推荐

  1. 【html5基础学习速成】

    HTML5是Web中核心语言HTML的规范,用户使用任何手段进行网页浏览时看到的内容原本都是HTML格式的,在浏览器中通过一些技术处理将其转换成为了可识别的信息.HTML5在从前HTML4.01的基础 ...

  2. HTML5基础学习——列表标签表单标签

    学习内容: 1.列表标签 表格是用来显示数据的,那么列表就是用来布局的. 列表最大的特点就是整齐.整洁.有序,它作为布局会更加自由和方便. 根据使用场景不同,列表可以分为三大类:无序列表.有序列表和自 ...

  3. 前端(HTML5基础学习笔记)

    以下学习路线都是基于自己看的黑马程序员视频总结而来 学习路线:HTML5 -> CSS3 -> H5C3 一.HTML简介 1. 网页 2. 常用游览器 3. Web标准(重点) 二.HT ...

  4. HTML5基础 | (3)HTML常用元素介绍

    目录 一.段落.标题与格式化文本 1.段落标签 2.标题标签 3.格式化标签 二.行内文本标签详解 三.数据展示利器--表格 四.生动网页之源--图片元素 五.有序列表与无序列表 1.有序列表 2.无 ...

  5. HTML5基础学习(7):登录表单制作、表单知识补充

    一.登录表单制作 有的时候用户需要填写信息,然后把填写完的信息交给服务器.把数据提交给服务器的动作就需要一个新的知识点:表单. (1)常见的表单控件 大部分的表单控件都是<input>编写 ...

  6. HTML5基础学习(5):百度云盘制作、简单表格制作

    一.百度云盘制作 (1)绝对地址与相对地址 绝对地址:在任何情况下,都可以找得到的地址.网页中下面图片所在的路径叫做绝对路径: <img src="http://1000phone.c ...

  7. CSS基础学习-7.CSS元素分类

    转载于:https://www.cnblogs.com/songsongblue/p/11046359.html

  8. HTML html5基础详细笔记 第一个模块

    第01章-前端核心技术-HTML5基础 学习目标 了解什么是HTML 掌握HTML标签.元素的概念 重点 掌握HTML常用头部元素的使用 重点 掌握HTML标题.段落.文本.图片等排版 重点 难点 掌 ...

  9. HTML5 在线学习网站

    HTML5 在线学习网站 摘要: HTML5的强大,让更多的人想要系统的学习它.但面对网上五花八门的搜索结果,是否无法抉择?文章作者以自己的实践经验,筛选出来11个在线学习HTML5开发的网站,让HT ...

最新文章

  1. AI 风投的下一个拐点是进还是退?
  2. Tomcat 架构探索
  3. mongodb实现对某列求和SUM
  4. 周志华领衔撰写,历时4年,宝箱书问世!文末送书
  5. Eclipse的基本设置
  6. php+mysql留言板小案例
  7. mysql门派年龄最大的人_目前活着年龄最大的人
  8. 【Java】八进制那些事
  9. DataFountain新上计算机视觉比赛-20万巨奖数钢筋
  10. M283-bsp包问题
  11. srs部署到ubuntu 18.04 server
  12. NYOJ815三角形 细节
  13. 【IT软技能】如何使用中文维基百科
  14. 应用程序正常初始化(Oxc000007b)失败
  15. 【计算广告】基本概念及RTB/RTA投放策略介绍
  16. 简述igp和egp_路由协议的常见分类——GGP、EGP和IGP介绍
  17. Android热修复Tinker原理分析
  18. 基于数据结构的超市会员管理系统
  19. 玩转华为数据中心交换机系列 | 配置基于接口划分VLAN示例
  20. pythonista_Pythonista的假期愿望清单

热门文章

  1. 机器学习周志华5.13式推导以及BP算法理解
  2. 测试相关理解(三)—边界值分析方法
  3. 计算机网络笔记(5) 传输层滑动窗口协议(GBN、SR)
  4. 华为荣耀MagicBook笔记本 键盘灯怎么设置为常亮?
  5. micropython-esp32-红外防坠落小车-双路直流电机驱动7A160W-红外TCRT5000-flutter-mqtt控制
  6. next、nextInt、nextDouble、nextFloat和nextLine的区别。
  7. 钱宝事件,是什么让你们如此疯狂呢?
  8. LED升压恒流_降压恒流_升压恒压_降压降压芯片大全可供工程师选型用!
  9. MATLAB 常见取整函数( round、fix 、floor、ceil、sign、rem、mod)
  10. Eclipse中new一个对象之后自动补齐快捷键