bricks/docs/ai.old/image.md
2025-11-18 14:59:26 +08:00

6.7 KiB
Raw Blame History

Image

用于在页面中显示图片支持网络图片、Base64 编码图片以及错误时的默认图片回退机制。
类型:普通控件(继承自 JsWidget

主要方法

  • create()
    创建 <img> 元素并赋值给 this.dom_element

  • set_url(url)
    设置图片的 src 属性,并绑定 onerror 事件以支持默认图回退。

  • set_default_url()
    当图片加载失败时,切换为默认图片(需配置 default_url 选项)。

  • base64()
    将当前图像绘制到 Canvas 并返回 PNG 格式的 Base64 数据 URL。

  • removeBase64Header(base64String)
    移除 Base64 字符串中的 MIME 头信息(如 data:image/png;base64,)。

主要事件

无自定义事件。原生 loaderror 事件可通过 DOM 监听。

源码例子

{
  "id": "img_user_avatar",
  "widgettype": "Image",
  "options": {
    "url": "https://example.com/avatar.png",           // 图片地址
    "default_url": "images/default-avatar.png"         // 加载失败时显示的默认图
  },
  "binds": [
    {
      "actiontype": "script",
      "wid": "img_user_avatar",
      "event": "click",
      "script": "console.log('Image clicked:', data);",
      "params": {},
      "rtdata": {
        "imageId": "img_user_avatar"
      }
    },
    {
      "actiontype": "method",
      "wid": "img_user_avatar",
      "event": "load",
      "target": "img_user_avatar",
      "method": "base64",
      "rtdata": {
        "info": "Image loaded and converted to base64"
      }
    }
  ]
}

注释说明:

  • widgettype: "Image" 表示使用注册的 Image 控件。
  • options.url 是必须项,指定图片源。
  • default_url 可选,用于容错处理。
  • 点击图片会执行一段脚本输出日志。
  • 图片成功加载后调用 base64() 方法获取其 Base64 编码数据。

Icon

图标控件,扩展自 Image支持基于字符单位charsize动态调整尺寸常用于界面小图标展示。
类型:普通控件(继承自 Image

主要方法

  • options_parse()
    解析图标大小相关参数,根据 ratecwidthcheightdynsize 调整样式尺寸。

  • charsize_sizing()
    (继承自父类或 JsWidget 工具方法)根据 bricks.app.charsize 计算实际像素大小并设置宽高。

主要事件

无自定义事件,可监听原生事件如 click

源码例子

{
  "id": "icon_home",
  "widgettype": "Icon",
  "options": {
    "url": "icons/home.svg",          // 图标资源路径
    "rate": 1.5,                      // 相对于基础字符尺寸的比例
    "cwidth": 1,                      // 占据字符宽度数
    "cheight": 1,                     // 占据字符高度数
    "dynsize": true                   // 是否启用动态尺寸适配
  },
  "binds": [
    {
      "actiontype": "event",
      "wid": "icon_home",
      "event": "click",
      "target": "SidebarMenu",
      "dispatch_event": "navigate",
      "params": {
        "page": "home"
      },
      "conform": {
        "title": "Confirm Navigation",
        "message": "Go to home page?",
        "confirm_text": "Yes",
        "cancel_text": "No"
      }
    }
  ]
}

注释说明:

  • rate: 1.5 表示图标为标准字符大小的 1.5 倍。
  • dynsize: true 启用响应式尺寸计算。
  • 点击图标将向目标控件 SidebarMenu 派发名为 navigate 的自定义事件,并携带参数 {page: 'home'}
  • conform 提供用户确认弹窗,防止误操作。

StatedIcon

状态图标控件,扩展自 Icon支持多个状态state对应不同图标适用于开关、模式切换等场景。
类型:普通控件(继承自 Icon

主要方法

  • options_parse()
    初始化状态系统,若未设置初始状态,则取第一个状态作为默认。

  • set_state(state)
    切换图标状态,查找匹配的状态对象并更新 url,重新渲染图标。

主要事件

无自定义事件,可通过 binds 触发状态变更。

源码例子

{
  "id": "icon_power",
  "widgettype": "StatedIcon",
  "options": {
    "state": "off",                                   // 当前状态
    "states": [                                     // 状态列表
      {
        "state": "on",
        "url": "icons/power-on.svg"
      },
      {
        "state": "off",
        "url": "icons/power-off.svg"
      }
    ],
    "rate": 2,
    "cwidth": 1,
    "cheight": 1
  },
  "binds": [
    {
      "actiontype": "method",
      "wid": "icon_power",
      "event": "click",
      "target": "icon_power",
      "method": "set_state",
      "params": {
        "state": "=this.state === 'on' ? 'off' : 'on'"  // 动态翻转状态
      }
    },
    {
      "actiontype": "registerfunction",
      "wid": "icon_power",
      "event": "click",
      "rfname": "logUserAction",
      "params": {
        "action": "toggle_power",
        "targetId": "icon_power",
        "fromState": "=this.state",
        "toState": "=this.state === 'on' ? 'off' : 'on'"
      }
    }
  ]
}

注释说明:

  • states 定义了两个状态 "on""off",分别对应不同的图标。
  • 初始状态为 "off"
  • 点击时通过 method 调用自身 set_state 方法实现状态翻转。
  • 使用 registerfunction 调用全局函数 logUserAction 记录用户行为。
  • = 开头的字符串表示表达式求值(运行时计算),是 bricks 支持的动态语法扩展。

BlankIcon

空白占位图标,不显示任何图像,仅用于布局占位,但支持与 Icon 一致的尺寸控制逻辑。
类型:普通控件(继承自 JsWidget

主要方法

  • 构造函数中调用 charsize_sizing() 实现基于字符单位的尺寸控制。

主要事件

源码例子

{
  "id": "placeholder_icon",
  "widgettype": "BlankIcon",
  "options": {
    "cwidth": 2,                       // 占据 2 个字符宽度
    "cheight": 1,                      // 占据 1 个字符高度
    "rate": 1,                         // 尺寸比例
    "dynsize": true                    // 启用动态尺寸
  }
}

注释说明:

  • BlankIcon 不创建图像元素,仅作为空白容器参与布局。
  • 常用于对齐或响应式布局中保持视觉一致性。
  • 支持与其他图标相同的 cwidth/cheight/rate 参数体系,便于统一管理 UI 尺寸规范。

📌 总结提示
所有控件均通过 bricks.Factory.register() 注册后方可使用;
.ui 文件中编写 JSON 结构即可声明式构建界面;
binds 提供强大的交互能力,结合 scriptmethodevent 等动作类型可灵活控制应用逻辑。