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

243 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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,`)。
## 主要事件
无自定义事件。原生 `load``error` 事件可通过 DOM 监听。
## 源码例子
```json
{
"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()`
解析图标大小相关参数,根据 `rate``cwidth``cheight``dynsize` 调整样式尺寸。
- `charsize_sizing()`
(继承自父类或 JsWidget 工具方法)根据 `bricks.app.charsize` 计算实际像素大小并设置宽高。
## 主要事件
无自定义事件,可监听原生事件如 `click`
## 源码例子
```json
{
"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` 触发状态变更。
## 源码例子
```json
{
"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()` 实现基于字符单位的尺寸控制。
## 主要事件
## 源码例子
```json
{
"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` 提供强大的交互能力,结合 `script``method``event` 等动作类型可灵活控制应用逻辑。