Triggering an Animation in another Control (C#)

by Christian Wenz

Download PDF

The Animation control in the ASP.NET AJAX Control Toolkit is not just a control but a whole framework to add animations to a control. Generally, launching an animation is triggered by user interaction with the same control. It is however also possible to interact with one control and then animation another control.

Overview

The Animation control in the ASP.NET AJAX Control Toolkit is not just a control but a whole framework to add animations to a control. Generally, launching an animation is triggered by user interaction with the same control. It is however also possible to interact with one control and then animation another control.

Steps

First of all, include the ScriptManager in the page; then, the ASP.NET AJAX library is loaded, making it possible to use the Control Toolkit:

<asp:ScriptManager ID="asm" runat="server" />

The animation will be applied to a panel of text which looks like this:

<asp:Panel ID="panelShadow" runat="server" CssClass="panelClass">
 ASP.NET AJAX is a free framework for quickly creating a new generation of more 
 efficient, more interactive and highly-personalized Web experiences that work 
 across all the most popular browsers.<br />
 ASP.NET AJAX is a free framework for quickly creating a new generation of more 
 efficient, more interactive and highly-personalized Web experiences that work 
 across all the most popular browsers.<br />
 ASP.NET AJAX is a free framework for quickly creating a new generation of more 
 efficient, more interactive and highly-personalized Web experiences that work 
 across all the most popular browsers.<br />
</asp:Panel>

In the associated CSS class for the panel, define a nice background color and also set a fixed width for the panel:

<style type="text/css">
 .panelClass {background-color: lime; width: 300px;}
</style>

In order to start animating the panel, an HTML button is used. Note that <input type="button" /> is favoured over <asp:Button /> since we do not want a postback when the user clicks on that button.

<input type="button" id="Button1" runat="server" Value="Launch Animation" />

Then, add the AnimationExtender to the page, providing an ID, the TargetControlID attribute and the obligatory runat="server". It is important to set TargetControlID to the ID of the button (the element triggering the animation), not to the ID of the panel (the element being animated)

<ajaxToolkit:AnimationExtender ID="ae" runat="server" TargetControlID="Button1">

Within the <Animations> node, place animations as usual. In order to make them change the panel, not the button, set the AnimationTarget attribute for every animation element within AnimationExtender. The value for AnimationTarget is the ID of the panel, of course. That way, the animations happen with the panel, not with the triggering button. Here is the AnimationExtender markup for this scenario:

<ajaxToolkit:AnimationExtender ID="ae" runat="server" TargetControlID="Panel1">
 <Animations>
 <OnClick>
 <Sequence>
 <EnableAction Enabled="false" />
 <Parallel>
 <FadeOut Duration="1.5" Fps="24" AnimationTarget="Panel1" />
 <Resize Width="1000" Height="150" Unit="px" 
 AnimationTarget="Panel1" />
 </Parallel>
 </Sequence>
 </OnClick>
 </Animations>
</ajaxToolkit:AnimationExtender>

Note the special order in which the individual animations appear. First of all, the button gets deactivated once the animation runs. Since there is no AnimationTarget attribute in the <EnableAction> element, this animation is applied to the originating control: the button. The next two animation steps shall be carried out in parallel (<Parallel> element). Both have their AnimationTarget attributes set to "Panel1", thus animating the panel, not the button.

A mouse click on the button starts the panel animation

A mouse click on the button starts the panel animation (Click to view full-size image)