2008-09-08 45 views
1

我刚刚开始使用AnimationExtender。我正在使用它来显示一个新的div,当按下按钮时,它将从数据库收集到一个列表。问题是按钮需要做回发来获取这个列表,因为除非需要,否则我不想调用数据库。但是,回发会停止动画中流并重置它。该按钮位于更新面板内。动画扩展程序问题

理想情况下,我希望动画在回发完成并收集完列表后启动。我研究过使用ScriptManager来检测回发完成并取得了一些进展。我在页面中添加了两种javascript方法。

function linkPostback() { 

     var prm = Sys.WebForms.PageRequestManager.getInstance(); 
     prm.add_endRequest(playAnimation) 
    } 

    function playAnimation() { 
     var onclkBehavior = $find("ctl00_btnOpenList").get_OnClickBehavior().get_animation(); 
     onclkBehavior.play(); 
    } 

而且我已经改变了btnOpenList.OnClientClick=”linkPostback();”

这几乎解决了这个问题。我仍然得到一些动画口吃。动画在回发前开始播放,然后在回发后正常播放。使用onclkBehavior.pause()不起作用。我可以通过设置AnimationExtender.Enabled = false来解决此问题,并在按钮回发事件中将其设置为true。但是现在只有一次,因为现在再次启用AnimationExtender。我也尝试通过JavaScript禁用AnimationExtender,但这没有效果。

有没有只通过JavaScript调用播放动画的方法?我需要将自动链接解耦到 按钮单击事件,以便我可以控制何时启动动画。

希望是有道理的。

感谢

DG

+0

谢谢。最终解决方案令人生厌。另外我同意我将需要一个“加载屏幕”的股利。 – Magpie 2008-09-17 15:56:54

回答

1

你所看到的流程是这样的:

  1. 点击按钮
  2. AnimationExtender捕捉行动,并呼吁clickOn回调
  3. linkPostback开始异步请求为页面,然后返回流量到AnimationExtender
  4. 动画开始
  5. pageRequest回报,并呼吁playAnimation,启动动画再次

我认为有解决这个问题,至少有两种方法。看起来你几乎拥有了所有你需要的JavaScript,你只需要解决AnimationExtender启动点击动画的问题。

选项1:隐藏AnimationExtender按钮并添加播放动画的自己的新按钮。这应该与将AE按钮的样式设置为“display:none;”一样简单并有你自己的按钮调用linkPostback()。

选项2:动画结束后重新禁用动画扩展器。这应该工作,只要playAnimation呼叫阻塞,这很可能是:

function linkPostback() { 

    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_endRequest(playAnimation) 
} 

function playAnimation() { 

    AnimationExtender.Enabled = true; 
    var onclkBehavior = $find("ctl00_btnOpenList").get_OnClickBehavior().get_animation(); 
    onclkBehavior.play(); 
    AnimationExtender.Enabled = false; 
} 

顺便说一句,好像你的一般做法,如果有在接受pageRequest的延迟可能面临的问题。单击一个按钮并在几秒钟后发生动画可能有点奇怪。或者预加载数据,或者预先用一些“加载...”填充div,使其大小适当,然后在实际内容到达时填充。

0

从给出的最终解决方案的回答帮助如下:

添加另一个按钮,隐藏它。

<input id="btnHdn" runat="server" type="button" value="button" style="display:none;" /> 

将AnimationExtender指向隐藏按钮,以避免发生不需要的点击事件。

<cc1:AnimationExtender ID="aniExt" runat="server" TargetControlID="btnHdn"> 

线的JavaScript来要触发动画的回发完成后的按钮。

<asp:ImageButton ID="btnShowList" runat="server" OnClick="btnShowList_Click" OnClientClick="linkPostback();" /> 

将页面加上需要的Javascript。

function linkPostback() { 
     var prm = Sys.WebForms.PageRequestManager.getInstance(); 
     prm.add_endRequest(playOpenAnimation) 
} 

function playOpenAnimation() { 
    var onclkBehavior = ind("ctl00_aniExt").get_OnClickBehavior().get_animation(); 
    onclkBehavior.play();   

    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.remove_endRequest(playOpenAnimation) 
} 
+0

这正是我想到的。如果您不给AnimationExtender任何TargetControlID会发生什么情况?它可能会简化解决方案。 – 2008-09-17 17:34:12