我一直在寻找一种库,可以辅助渲染和功能UI小部件嵌入画布区域,例如组合框、复选框、单选按钮、文本区域、带有滚动条的列表框等,而不会通过将它们浮动在画布区域上方而叠加常规的HTML元素。Flex为Flash提供了所有这些功能,并且存在许多Actionscript库,可以在Flash“画布”内创建UI小部件组件(可以这么说)。 在某些情况下,这些UI小部件库已经为Flash社区服务得很好,在HTML5画布中的类似情况中也需要它们。
是否有人知道可以找到这些库的地方?
我一直在寻找一种库,可以辅助渲染和功能UI小部件嵌入画布区域,例如组合框、复选框、单选按钮、文本区域、带有滚动条的列表框等,而不会通过将它们浮动在画布区域上方而叠加常规的HTML元素。Flex为Flash提供了所有这些功能,并且存在许多Actionscript库,可以在Flash“画布”内创建UI小部件组件(可以这么说)。 在某些情况下,这些UI小部件库已经为Flash社区服务得很好,在HTML5画布中的类似情况中也需要它们。
是否有人知道可以找到这些库的地方?
目前我还没有看到任何相貌堂皇的UI控件库,但我保证它们迟早会被开发出来,因为人们会要求它们(不管是出于好的原因还是坏的原因)。
HTML5的Canvas规范本身强烈建议不要尝试这样做。正如规范所说:
作者应避免使用canvas元素实现文本编辑控件。这样做有许多缺点:
- 必须重新实现鼠标放置插入符。
- 必须重新实现插入符的键盘移动(对于多行文本输入可能跨越多行)。
- 必须实现文本字段的滚动(对于长行水平滚动,对于多行输入垂直滚动)。
- 必须重新实现复制和粘贴等本机功能。
- 必须重新实现拼写检查等本机功能。
- 必须重新实现拖放等本机功能。
- 必须重新实现页面宽度文本搜索等本机功能。
- 必须重新实现特定用户的本机功能,例如自定义文本服务。这几乎是不可能的,因为每个用户可能安装了不同的服务,并且存在无限可能的这种服务集。
- 必须重新实现双向文本编辑。
- 对于多行文本编辑,必须为所有相关语言实现换行功能。
- 必须重新实现文本选择。
- 必须重新实现双向文本选择的拖动。
- 必须重新实现基于平台的键盘快捷键。
- 必须重新实现基于平台的输入法编辑器(IME)。
- 必须重新实现撤消和重做功能。
- 必须重新实现跟随插入符或选择的放大镜等辅助功能。
在Canvas中实现这些东西是一场噩梦,特别是在今天,同一字体看起来不仅在浏览器之间有所不同,而且在Canvas渲染字体和浏览器渲染字体之间也有所不同。