【发布时间】:2023-04-01 04:47:01
【问题描述】:
比方说,我只是有一个常见的 Knockoutjs 布局/方法:
function User(data) {
this.name = ko.observable(data.name);
}
function UsersViewModel() {
var self = this;
self.users = ko.observableArray([]);
}
var viewModel = new UsersViewModel();
service.initialize(viewModel);
ko.applyBindings(viewModel);
和 HTML:
<ul data-bind="foreach: users">
<li>
<span data-bind="text:name"></span>
</li>
</ul>
我想要的是在 Knockoutjs 中对数据更改应用一些漂亮的动画:现有 DOM 元素平滑消失(这需要一些时间,而消失结束),和在此之后(或什至在开始消失时)在出现的新元素上开始动画。 (在这个例子中——“li”元素会随着每个元素单独的动画而单独消失(每个元素之间会有一些延迟)(但这并不重要))。
(我认为这里将完全替换元素(假设新数据包含具有相同 id 的项目时不要太在意……这很复杂,我理解)。
据我所知,这可能非常困难,我应该考虑更改/扩展 Knockoutjs 源(对吗?)以处理“start-disappearing-animation ", "disappearing-animation-finished", "start-appearing-animation"。
但至少有什么方法防止敲除删除现有的 DOM 元素(让我手动处理)...某种“分离”它们的方法来自容器。
或者,如果没有其他可能,那么只是“在数据更改之前开启”事件?
谢谢!
【问题讨论】:
-
查看custom bindings 上的文档,他们有一个动画过渡示例,您可以将其扩展到您需要的任何内容。
-
Hm... 但这似乎“更新”回调是为了刷新某些元素的状态(以防万一,如果在我的示例中,某些
name中的某些user数据对象会更改) ,但不允许在某些新元素出现/消失(即移除/创建 DOM 对象)之后(尤其是之前)实际调用动画。 -
无论哪种方式,您正在寻找的是自定义绑定处理程序。
-
你能说得更具体点吗?正如我上面刚刚提到的,我看不出怎么可能有类似“处理/删除”之类的东西(与自定义绑定中的“更新”相反)。
标签: javascript dom animation data-binding knockout.js