【乐吾乐2D可视化组态编辑器】事件
创始人
2025-01-08 00:04:18
0次

事件

乐吾乐2D可视化组态编辑器demo:https://2d.le5le.com/  

仅当画布锁定后(meta2d.store.data.locked = 1 or 2),触发事件。否则,干扰编辑。

定义

图元下的events属性为事件列表。

const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.Link, // 执行动作       where: { type:'comparison',  key: "text", comparison: "==", value: "矩形" }, // 触发条件       value: "2d.le5le.com",     },   ], };

Copy

events对象说明

  • name - 事件类型
  • action - 事件行为
  • value - 事件附属数据
  • params - 事件参数
  • where - 触发条件

事件类型

事件类型name值如下:

  • 鼠标进入 enter
  • 鼠标离开 leave
  • 选中 active
  • 取消选中 inactive
  • 单击 click
  • 双击 dblclick
  • 鼠标按下 mousedown
  • 鼠标抬起 mouseup
  • 值变化 valueUpdate
const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.Link, // 执行动作       where: { type:'comparison',  key: "text", comparison: "==", value: "矩形" }, // 触发条件       value: "2d.le5le.com",     },   ], }; meta2d.addPen(pen);

事件行为

事件行为action为一个枚举值:

enum EventAction {   Link,           // 打开链接     SetProps,       // 更改属性   StartAnimate,   // 执行动画   PauseAnimate,   // 暂停动画   StopAnimate,    // 停止动画   JS,             // 执行JS代码   GlobalFn,       // 执行全局函数   Emit,           // 发送消息   StartVideo,     // 播放视频   PauseVideo,     // 暂停视频   StopVideo,      // 停止视频   SendPropData,   // 发送图元数据   SendVarData,    // 发送绑定变量 }

打开链接

const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.Link,       value: "2d.le5le.com",     },   ], };

更改属性

const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.SetProps,       params:'id/tag',//目标图元,你要更改属性的图元的id/tag       value: {         color:'red',         text:'le5le'         //...需要更改的其他属性       },     },   ], };

动画执行/暂停/停止

const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.StartAnimate,//PauseAnimate StopAnimate       value:'id/tag'//目标图元,要执行/暂停/停止动画的图元的id/tag     },   ], };

执行JS代码

const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.JS,       params: "我是参数",//传递到代码块的参数       value:`console.log('arguments',arguments);               console.log('当前点击的图元', pen);               console.log('参数',params);               console.log('上下文',context);`//代码块     },   ], };  //请求接口示例 //value:"fetch('/api/device/data?mock=1').then((e) => {e.text().then(data=>{console.log(data)});})" 

执行全局函数

globalThis.le5leFn= (pen,params) =>{   console.log('当前图元:',pen,'参数:',params); };  const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.GlobalFn,       params: "我是参数",//传到代码块的参数       value:"le5leFn" //全局函数名     },   ], };

发送消息

//meta2d监听该消息 meta2d.on('le5le-emit',(e)=>{console.log(e)});  const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.Emit,       params: "我是参数",//传到代码块的参数       value:"le5le-emit" //消息名     },   ], };

视频播放/暂停/停止

const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.StartVideo,//PauseVideo StopVideo       value:'id/tag'//目标图元,要播放/暂停/停止视频图元的id/tag     },   ], };

发送图元数据

const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.SendPropData,       params:'id/tag',//目标图元的id/tag,你要发送哪个图元的数据       value: {         color:'red', //有值发送该值         text:'' //为空会从拿到目标图元的属性值         //发送的数据       },       extend: "topic1,topic2"//建立mqtt通信时填写该参数,表示你发送数据到哪几个topic     },   ], };

发送绑定变量

const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       action: EventAction.SendVarData,       params:'id/tag',//目标图元的id/tag,你要发送哪个图元的数据       value: {         bindId:'value' //绑定的变量及值,值为空则从目标图元中拿到绑定变量对应属性的值       },       extend: "topic1,topic2"//建立mqtt通信时填写该参数,表示你发送数据到哪几个topic     },   ], };

条件触发

条件触发是指满足指定条件才触发事件。

const pen = {   name: "rectangle",   text: "矩形",   x: 100,   y: 100,   width: 100,   height: 100,   events: [     {       name: "click",       // 执行动作       action: EventAction.Link,        // 运算符触发条件。text属性值 == “矩形” 触发       where: { type:'comparison', key: "text", comparison: "==", value: "矩形" },        value: "2d.le5le.com",     },     {       name: "click",       action: EventAction.Link,        // 通过自定义条件函数返回值触发条件       where: { type: "fn", fn:()=>{return bool;} },         value: "2d.le5le.com",     },     {       name: "click",       action: EventAction.Link,        // 通过js代码返回值触发条件。       where: { type: "温度过高", fnJs:"伪代码;return bool;" },         value: "2d.le5le.com",     },     {       name: "click",       action: EventAction.Link,        // 通过js代码返回值触发条件。       where: { type: "电流过高", fnJs:"伪代码;return bool;" },         value: "2d.le5le.com",     },   ], }; meta2d.addPen(pen);

数据结构

where数据属性结构如下:

  • type - 任意值,推荐使用条件的功能名称方便阅读。为空时,表示没有触发条件。
  • fn - 条件函数,返回一个bool值。最高优先级。
  • fnJs - 条件的js代码文本,可获取'pen'和 'context'参数,返回一个bool值。高优先级。
  • key - 通过属性名进行条件比较。低优先级。
  • comparison - 属性比较条件,配合key使用。
    • “>” - 大于
    • “>=” - 大于等于
    • “<” - 小于
    • “<=” - 小于等于
    • “=” - 等于
    • “!=” - 不等于
    • “[)” - 介于,与数学上相同,例如:[0, 100) 0~100,包含0不包含100; [0,100] 0~100,包含0和100
    • “![)” - 不介于,“介于”以外的
    • “[]” - 属于,集合,例如:[1,20,30..50,65] ,1.0.48版本后支持字符串,例如 [1,20,aaa,值1]
    • “![]” - 不属于,上述集合以外的
  • value - 属性比较值,配合key使用。

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...