Flash Accordion List

Recently at work I was looking for an actionscript accordion which was easy to customize. The goal was to create a accordion for navigation purposes. I could not find anything usefull, but fixed size accordions. I needed to create one myself.

Download the sourcefiles accordionlist.zip and accordionlistscroll.zip

I will explain the code shortly. Perhaps it will be usefull for somebody and safe some time. I have left the styling basic just to show the working and principle to make is easier to be customized. The visual part of the accordion is made in flash to make it easy to add mouseOver etc.

Accordion List

I have tried to keep the accordion principle in the main class, so that the main class could act as the director. The accordion header communicates with the main class through an custom event. An in the end it might be necessary to add an custom event to the menu items, for example to retrieve some other data through an remote call, or to switch to another page.

After this accordion I realised that the main advantage for an accordion is the possibillity to display an unknown number of items and subitems in a small place. So I decided to ad a scrollbar to supply this advantage to the accordion.

To make the scrollbar work properly I needed to add all the AccordionList as well as the Scrollbar to a seperate containerclass ( AccordionListContainer ). The next step was to update the scrollBar roperties with the setScrollProperties when the user clicks on one of the headers.

The result is a flexible accordion list class, which can be used to display anything from links to images. Since the class loads symbols it should be easy to style it to your own preferences. And of course remove my hard coded item height values.

SWFObject with Preloader

Here’s the online example SWFObject with Preloader, and the zipped version preloader-swfobject.zip

During the development of a rather big flash video portal, I noticed some difficulties with setting paths during the stages of development. The application made a lot of connections to external data: XML, Flash Media Server 3.5 and made call with a Microsoft .NET backend through FluorineFX remoting.

To make al this easily manageable I used a SWFObject to make it easy to transfer the application from Developing to Testing and finally to Production. The flash project was built in a way that the .NET developer needs to copy the SWFObject code and one includes folder to his backend. The includes folder contains all the swf, xml, img, javascript etc…

At that point the designer came with a preloader, which made the preloader.swf receive the SWFObject flashvars. I have made a Flash application template that works for me and the company I work for. But I am very curious if there are other, more neat ways to over come this problem.

The main feature of this template structure is that the preloader checks whether it has received a value form SWFObject. Based on the result of this check two different functions can be called in the main class of the main flash file.These functions sets the path for the flash file to make it work in the flash IDE or on the server with in HTML wrapper, after these paths or parameters are set the function initializes the application. See the code below

var ldr:Loader = new Loader();
ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressEventListener);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeListener);
ldr.contentLoaderInfo.addEventListener(Event.INIT, initListener );

var req:URLRequest = new URLRequest( mainPath );
ldr.load( req );

function initListener( e:Event ):void
{
	if( root.loaderInfo.parameters.swfBasePath != null )
	{
		Object( ldr.content ).setSWFObjectValues( swfParams );
	}else{
		Object( ldr.content ).setLocalValues( );
	}
}

I really would like to discuss if this is a proper solution