与其编写繁琐的代码来处理每个独特拖拽交互的几何形状、反馈和动画,开发者现在可以使用“声明式拖拽”来指定元素应该变成什么样。这种在 Dragology 库中实现的转变,允许系统通过推测性地渲染应用程序的未来状态,自动合成流畅且响应迅速的交互。

一张解释 Dragology 如何通过模型驱动的拖拽创建更高质量交互且减少手动编码的图表截图。
关于 Dragology 如何通过模型驱动方法自动合成拖放行为的概念概述。declarative-dragging.github.io

这张图片提供了该库主要目标的宏观总结:简化复杂 UI 交互的创建。

反转拖放问题

传统的拖放设计通常要求开发者直接编写特定的视觉行为,这对于复杂的几何形状来说可能非常耗费人力。这种障碍往往阻碍了教育工作者、数学家和游戏设计师创建丰富的触觉交互。

声明式拖拽反转了这一过程。界面作者不再编写移动逻辑,而是指定通过拖拽特定元素可以访问哪些未来的模型状态。系统随后负责处理视觉合成的繁重工作。

“与其直接编写所有这些视觉行为,你只需说明,对于每个你想让其可拖拽的元素,拖拽它应该导致应用程序进入哪些未来状态。”

— Declarative Dragging

推测性渲染的机制

Dragology 引擎通过获取模型状态并将其渲染到视图中来运行。当用户开始拖拽时,引擎会推测性地渲染拖拽可能导致的不同未来状态。

通过分析这些推测性渲染结果,系统提取拖拽元素在每个视图中的位置,以确定有效的投放区域。然后,它将这些“可能世界”组合成单一的流畅交互,而无需作者手动定义路径。

一个图表显示模型状态如何渲染到视图中,以及目标状态的推测性渲染如何确定动画拖拽的投放区域。
Dragology 引擎通过推测性渲染应用程序模型的可能未来状态来识别有效的投放区域。declarative-dragging.github.io

此图表说明了推测性渲染的核心机制,即系统分析多个“可能世界”来合成流畅的交互。

可组合性与实际应用

Dragology 旨在具备可组合性,这意味着简单的模型驱动行为可以被组合。开发者可以叠加修饰符,以添加诸如吸附到网格、悬浮元素或特定的过渡动画等功能。

该系统已被用于创建交互式的数学“探索模型”,例如扭曲的树和辫子图。它也正在集成到 Hazel 中,这是一个学术编程环境,它允许通过物理交互使重构变得切实的且可被发现的。

一张显示西雅图步行地图以及带有连接股线的树的绘制格子的图表截图。
树之间保持顺序的映射的视觉表示,展示了该系统可以处理的数学结构类型。declarative-dragging.github.io

此视觉效果支持了对数学“探索模型”以及该技术可以辅助生成的特定类型图表的提及。

局限性与技术权衡

虽然该系统简化了高质量交互的创建,但源材料并未提供关于帧率或推测性渲染计算开销的具体性能基准。

目前的实现专门为 Web 端的 SVG 界面构建,其在极高频率状态变化下的可扩展性仍是一个需要进一步探索的领域。

Hacker News 读者的反应

  • 替代方案: 一位评论者建议,Hazel 编程环境是此类交互先前艺术的一个类似示例。 评论 ↗
  • 亲身经验: 一位读者表示,文章中提供的交互式演示在视觉上非常悦目,并提供了一种真正的教育体验。 评论 ↗

以上为 Hacker News 讨论中观点的摘要,并非经过核实的事实。 阅读完整讨论 ↗