尽管DOM仍然完全主导着我们创建UI的方式,但创建一堆基于canvas的UI组件(例如按钮、列表、水平/垂直组等)是否有意义呢?
我确定会有很多缺点,但这样做可能有哪些优点呢?
首先,我想说,通常与canvas的视觉集成更加紧密。
尽管DOM仍然完全主导着我们创建UI的方式,但创建一堆基于canvas的UI组件(例如按钮、列表、水平/垂直组等)是否有意义呢?
我确定会有很多缺点,但这样做可能有哪些优点呢?
首先,我想说,通常与canvas的视觉集成更加紧密。
Zebra项目创建了一个完整的组件集,这些组件都被呈现在HTML5画布元素中。下面是组件示例的屏幕截图。我没有使用过这个框架,但这应该可以让您了解不同浏览器如何渲染UI组件。
旋转组件并检查线条渲染(抗锯齿)的质量,这取决于所使用的浏览器。以下是有关此问题的更多信息:
另一个项目是Makepad,它是基于WebGL worker的库和实时代码编辑器。UI的每个可见部分都是在WebGL中呈现的,包括屏幕上的所有文本,都通过集成的文本渲染引擎进行呈现。
该项目仍处于早期阶段,但您可以在此处尝试实时演示。Makepad是开源的,Git repo可以在github.com/makepad/makepad.github.io找到。
如果页面元素超过200个,使用Canvas作为UI基础是一个很好的选择。相比于使用DOM元素渲染,它的渲染速度要快得多。
在iPhone Safari上,300个动画DOM元素只能以3帧每秒的速度运行,非常缓慢。
如果您使用Canvas,则可以渲染超过300个元素并仍然实现30fps,这意味着平滑的动画和转换效果。我对此进行了长时间的测试,所以我知道它是可行的。
Canvas的缺点(正如其他人提到的),是搜索引擎无法看到您的内容。但是,如果您正在构建一个不应该被蜘蛛抓取并且需要在移动设备上运行的应用程序,则Canvas是最好的选择。
是和否。
就页面UI的强调而言,如果网页导航和操作在JavaScript未启用时也能良好工作,那么这样做可能比较理想。
可以使用Canvas美化UI元素,但请记住,这些元素对于网络爬虫(如Google)或禁用脚本的用户来说是无法访问的。
不要试图在Canvas中重新制作文本编辑。即使HTML Canvas规范也有一节章节强烈建议不要尝试在Canvas中创建文本编辑控件。
有长期的尝试和失败的历史(查找Mozilla Bespin)
我肯定会有很多缺点,但这样做的可能优势是什么?
可视化效果(没有其他后备除了文本描述)和控件,如刻度盘(回退到某些HTML,例如滑块)可以极大地增强Canvas功能。
如果搜索Canvas控件、Canvas图表等,你会发现许多库提供类似的功能。但务必清楚,其中许多功能以无障碍性为代价。
可以使用Canvas为页面添加许多漂亮的元素。有些东西可以变得非常美丽,而不会在任何方面产生干扰或更改页面导航。也许网站的徽标会以过程化方式“增长”、发光或变得更加复杂。其他背景动画效果可能非常棒。
还有交互式图像,例如你想在网站上放置一个图表或分解图,以便检查某个物体的各个部分(化学结构、生物体、新车等)。图示和游戏等可视化交互媒体是Canvas的一些最佳用例。
我们尝试过类似的方法,但最终得出结论,世界还没有准备好。)
你应该牢记以下几点:
所以,这实际上是一个有趣的经验,但我不建议这样做。
以下是我选择这样做的原因:
我的简历在所有浏览器中都能呈现相同的效果。
我可以在我的 Go(Google Go)项目中重复使用代码。我正在使用 SFML 来设置像素,只要我不尝试任何超级“聪明”的东西,代码就会很容易转录。
这是一个很好的练习,虽然重新发明轮子不好,但有人必须知道如何做到这一点。