如何在knockoutjs中为if主体设置动画?

时间:2012-08-31 10:22:44

标签: javascript knockout.js javascript-framework

我有一个叫做“状态”的knockoutjs可观察变量,我正在使用该变量来隐藏和显示淘汰内容,如果条件如下:

<--if: state()=="login" -->
login content
<--/if-->

<--if: state()=="registration" -->
registration content
<--/if-->

每当状态变量发生变化时,它都会显示或隐藏内容。所以我的问题是,我想在隐藏或显示时添加切换行为的动画。我怎么能这样做?

4 个答案:

答案 0 :(得分:3)

我为你做了一个快速的小提琴。

http://jsfiddle.net/ujSvb/1/

获取更具动态性的示例

http://jsfiddle.net/ujSvb/2/

答案 1 :(得分:0)

首先,我认为你的代码中可能有一些错误(可能只是将其复制错误)但它应该是:

<-- ko if: state()=="login" -->
login content
<--/ko-->

<-- ko if: state()=="registration" -->
registration content
<--/ko-->

其次,如果你可以使用jQuery以及绑定元素而不是使用虚拟元素,例如:

<div data-bind="if: state()=="login">

您可以使用Knockout的bindingHandlers。我创建了一个ifTransition绑定,它可以满足您的需求。这里是关于bindingHandler的一个小提琴,以及它的一个实例:

http://jsfiddle.net/Rynan/vtPT8/

更新

好的,我更新了我的小提琴以利用虚拟元素,但您仍然需要将您的登录和注册内容包装在div中以获得您正在寻找的过渡效果。保持你的评论,在状态变为显示那些特定内容所需的任何内容之前不会呈现该div,因此当它没有处于正确的状态时它将不会占用太多内存。

答案 2 :(得分:0)

我进一步更新了安德斯的小提琴,以添加状态条件:

http://jsfiddle.net/ujSvb/3/

答案 3 :(得分:0)

最高投票答案不是解决方案,因为它不会放弃元素。

奥斯汀的答案似乎根本不起作用。

请参阅我的回复: Animation before 'with' binding update

我已经发现了一个干净的解决方法,用大致相当于'模板'的绑定替换'if'和'with'。