Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 5979907
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 22, 20262026-05-22T21:43:34+00:00 2026-05-22T21:43:34+00:00

I am new to flash, so the solution to this problem may be simple.

  • 0

I am new to flash, so the solution to this problem may be simple. Unfortunately I have been unable to find a working solution, so I am hoping you guys can help. I am developing a site using 3rd party flash – Coverflow, for an album. It looks great and you can download it here: http://www.weberdesignlabs.com/blog/2009/12/flash-10-coverflow/. My challenge is that I want to progress the albums from a Javascript call within my HTML. In my search I have discovered ExternalInterface, but I can’t get it to work. When I try to export the movie I get an “Access of undefined property gotoCoverFlowItem” error.

Below follows the code contained in the Coverflow.ai file which I am trying to modify, with the modification in it. The full code can be found at the link above. I am using the Flash 10 version.

////////////////////////////////////////////
// Project: Flash 10 Coverflow
// Date: 10/3/09
// Author: Stephen Weber
////////////////////////////////////////////
package {

    ////////////////////////////////////////////
    // IMPORTS
    ////////////////////////////////////////////

    import flash.display.Sprite;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.display.GradientType;
    import flash.display.Graphics;
    import flash.display.Shape;
    import flash.display.MovieClip;
    import flash.display.BlendMode;
    import flash.display.Loader;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.events.MouseEvent;
    import flash.events.IOErrorEvent;
    import flash.geom.Matrix;
    import flash.geom.Rectangle;
    import flash.geom.ColorTransform;
    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.net.navigateToURL;
    import flash.display.Stage;
    import flash.utils.setTimeout;
    import flash.external.ExternalInterface;

    //TweenLite - Tweening Engine - SOURCE: http://blog.greensock.com/tweenliteas3/
    import com.greensock.*;
    import com.greensock.easing.*;
    import com.greensock.plugins.*;

    public class Coverflow extends Sprite {

        ////////////////////////////////////////////
        // VARIABLES
        ////////////////////////////////////////////

        // size of the stage
        private var sw:Number;
        private var sh:Number;

        private var background:Background;

        // padding between each cover, can be customed via xml
        private var coverflowSpacing:Number=30;

        // transition time for movement
        private var transitionTime:Number=0.75;

        // the center of the stage
        private var centerX:Number;
        private var centerY:Number;

        // store each image cover's instance
        private var coverArray:Array=new Array();

        // title of each image
        private var coverLabel:CoverflowTitle = new CoverflowTitle();

        // the slider under the image cover
        private var coverSlider:Scrollbar;

        // how many image covers
        private var coverflowItemsTotal:Number;

        // how to open the link
        private var _target:String;

        // size of the image cover
        private var coverflowImageWidth:Number;

        private var coverflowImageHeight:Number;

        //Holds the objects in the data array
        private var _data:Array = new Array();

        // the y position of the item's title
        private var coverLabelPositionY:Number;

        //Z Position of Current CoverflowItem
        private var centerCoverflowZPosition:Number=-125;

        // display the middle of the cover or not
        private var startIndexInCenter:Boolean=true;

        // which cover to display in the beginning
        private var startIndex:Number=0;

        // the slide's Y position
        private var coverSlidePositionY:Number;

        //Holder for current CoverflowItem
        private var _currentCover:Number;

        //CoverflowItem Container
        private var coverflowItemContainer:Sprite = new Sprite();

        //XML Loading
        private var coverflowXMLLoader:URLLoader;

        //XML
        private var coverflowXML:XML;

        // the image cover's white border padding
        private var padding:Number=4;

        // stage reference
        private var _stage:Stage;

        //reflection
        private var reflection:Reflect;

        //Reflection Properties
        private var reflectionAlpha:Number;

        private var reflectionRatio:Number;

        private var reflectionDistance:Number;

        private var reflectionUpdateTime:Number;

        private var reflectionDropoff:Number;

        ////////////////////////////////////////////
        // CONSTRUCTOR - INITIAL ACTIONS
        ////////////////////////////////////////////
        public function Coverflow(_width:Number, _height:Number, __stage:Stage = null):void {
            _stage=__stage;
            sw=_width;
            sh=_height;
            centerX=_width>>1;
            centerY=(_height>>1) - 20;
            loadXML();

            //Grabs Background color passed in through FlashVars
            var backgColor:String = _stage.loaderInfo.parameters["backgroundColor"];

            if(backgColor == null) {
                //Black
                backgColor = "0x000000";

                //White
                //backgColor = "0xFFFFFF";
            }

            //Creates Background MovieClip
            background = new Background();

            //Set Background To Provided Width/Height
            background.width = _width;
            background.height = _height;

            //Adds background MovieClip to DisplayList
            addChild(background);

            //Tints Background MovieClip with provided tint
            TweenPlugin.activate([TintPlugin]);
            TweenLite.to(background, 0, {tint:backgColor});

            //Grabs Background color passed in through FlashVars
            var labelColor:String = _stage.loaderInfo.parameters["labelColor"];

            //Check for value and then default
            if(labelColor == null) {
                //Black
                //labelColor = "0x000000";

                //White
                labelColor = "0xFFFFFF";
            }

            //Tint Coverflow label to color provided
            TweenLite.to(coverLabel, 0, {tint:labelColor});

            if (_stage) {
                _stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
            }
        }
        ////////////////////////////////////////////
        // FUNCTIONS
        ////////////////////////////////////////////

        private function keyDownHandler(e:KeyboardEvent):void {
            if (e.keyCode==37||e.keyCode==74) {
                clickPre();
            }
            if (e.keyCode==39||e.keyCode==75) {
                clickNext();
            }
            // 72 stand for "H" key, 191 stand for "?" key
            if (e.keyCode==72||e.keyCode==191) {

            }
        }

        // display the previous image
        private function clickPre(e:Event=null):void {
            _currentCover--;
            if (_currentCover<0) {
                _currentCover=coverflowItemsTotal-1;
            }
            coverSlider.value=_currentCover;
            gotoCoverflowItem(_currentCover);
        }

        // display the next image

        private function clickNext(e:Event=null):void {
            _currentCover++;
            if (_currentCover>coverflowItemsTotal-1) {
                _currentCover=0;
            }
            coverSlider.value=_currentCover;
            gotoCoverflowItem(_currentCover);
        }

        // loading the XML
        private function loadXML():void {

            //Loads XML passed through FlashVars
            var xml_source:String = _stage.loaderInfo.parameters["xmlPath"];

            //If XML not found through FlashVars then defaults to xml path below
            if(xml_source == null) {
                xml_source = 'xml/data.xml';
            }

            // loading the cover xml here
            coverflowXMLLoader = new URLLoader();
            coverflowXMLLoader.load(new URLRequest("xml/data.xml"));
            coverflowXMLLoader.addEventListener(Event.COMPLETE, coverflowXMLLoader_Complete);
            coverflowXMLLoader.addEventListener(IOErrorEvent.IO_ERROR, coverflowXMLLoader_IOError);

        }

        // parse the XML
        private function coverflowXMLLoader_Complete(e:Event):void {
            coverflowXML=new XML(e.target.data);
            coverflowItemsTotal=coverflowXML.cover.length();
            coverflowSpacing=Number(coverflowXML.@coverflowSpacing);
            coverflowImageWidth=Number(coverflowXML.@imageWidth);
            coverflowImageHeight=Number(coverflowXML.@imageHeight);
            coverLabelPositionY=Number(coverflowXML.@coverLabelPositionY);
            coverSlidePositionY=Number(coverflowXML.@coverSlidePositionY);
            transitionTime=Number(coverflowXML.@transitionTime);
            centerCoverflowZPosition=Number(coverflowXML.@centerCoverflowZPosition);

            //Image Border
            padding = Number(coverflowXML.@imagePadding)

            //Reflection Attributes
            reflectionAlpha=Number(coverflowXML.@reflectionAlpha);
            reflectionRatio=Number(coverflowXML.@reflectionRatio);
            reflectionDistance=Number(coverflowXML.@reflectionDistance);
            reflectionUpdateTime=Number(coverflowXML.@reflectionUpdateTime);
            reflectionDropoff=Number(coverflowXML.@reflectionDropoff);

            startIndex=Number(coverflowXML.@startIndex);
            startIndexInCenter = (coverflowXML.@startIndexInCenter.toLowerCase().toString()=="yes");
            _target=coverflowXML.@target.toString();

            for (var i=0; i<coverflowItemsTotal; i++) {

                //Make An Object To Hold Values
                var _obj:Object = new Object();

                //Set Values To Object from XML for each CoverflowItem
                _obj.image = (coverflowXML.cover[i].@img.toString());
                _obj.title = (coverflowXML.cover[i].@title.toString());
                _obj.link = (coverflowXML.cover[i].@link.toString());
                _data[i] = _obj;

            }
            loadCover();
        }

        private function coverflowXMLLoader_IOError(event:IOErrorEvent):void {
            trace("Coverflow XML Load Error: "+ event);
        }

        // load the image cover when xml is loaded
        private function loadCover():void {

            for (var i:int = 0; i < coverflowItemsTotal; i++) {
                var cover:Sprite=createCover(i,_data[i].image);
                coverArray[i]=cover;
                cover.y=centerY;
                cover.z=0;
                coverflowItemContainer.addChild(cover);
            }

            if (startIndexInCenter) {
                startIndex=coverArray.length>>1;
                gotoCoverflowItem(startIndex);

            } else {

                gotoCoverflowItem(startIndex);

            }
            _currentCover=startIndex;
            coverSlider=new Scrollbar(coverflowItemsTotal,_stage);
            coverSlider.value=startIndex;
            coverSlider.x = (_stage.stageWidth/2) - (coverSlider.width/2);
            coverSlider.y=_stage.stageHeight-40;
            coverSlider.addEventListener("UPDATE", coverSlider_Update);
            coverSlider.addEventListener("PREVIOUS", coverSlider_Previous);
            coverSlider.addEventListener("NEXT", coverSlider_Next);
            addChild(coverSlider);

            //coverLabel.x = (sw - coverLabel.width)>>1;
            coverLabel.x = (_stage.stageWidth/2) - (coverLabel.width/2);
            coverLabel.y=coverLabelPositionY;
            addChild(coverLabel);

            addChild(coverSlider);
            addChild(coverLabel);

        }

        private function coverSlider_Update(e:Event):void {
            var value:Number=(coverSlider.value);
            gotoCoverflowItem(value);
            e.stopPropagation();
        }

        private function coverSlider_Previous(e:Event):void {
            clickPre();
        }

        private function coverSlider_Next(e:Event):void {
            clickNext();
        }

        // move to a certain cover via number
        private function gotoCoverflowItem(n:int):void {
            _currentCover=n;
            reOrderCover(n);
            if (coverSlider) {
                coverSlider.value=n;
            }
        }

        ExternalInterface.addCallback("gotoCover", gotoCoverflowItem);

        private function cover_Selected(event:CoverflowItemEvent):void {

            var currentCover:uint=event.data.id;

            if (coverArray[currentCover].rotationY==0) {
                try {
                    // open the link if user click the cover in the middle again
                    if (_data[currentCover].link!="") {
                        navigateToURL(new URLRequest(_data[currentCover].link), _target);
                    }

                } catch (e:Error) {
                    //
                }

            } else {
                gotoCoverflowItem(currentCover);

            }

        }

        // change each cover's position and rotation
        private function reOrderCover(currentCover:uint):void {
            for (var i:uint = 0, len:uint = coverArray.length; i < len; i++) {
                var cover:Sprite=coverArray[i];

                if (i<currentCover) {
                    //Left Side
                    TweenLite.to(cover, transitionTime, {x:(centerX - (currentCover - i) * coverflowSpacing - coverflowImageWidth/2), z:(coverflowImageWidth/2), rotationY:-65});
                } else if (i > currentCover) {
                    //Right Side
                    TweenLite.to(cover, transitionTime, {x:(centerX + (i - currentCover) * coverflowSpacing + coverflowImageWidth/2), z:(coverflowImageWidth/2), rotationY:65});
                } else {
                    //Center Coverflow
                    TweenLite.to(cover, transitionTime, {x:centerX, z:centerCoverflowZPosition, rotationY:0});

                    //Label Handling
                    coverLabel._text.text=_data[i].title;
                    coverLabel.alpha=0;
                    TweenLite.to(coverLabel, 0.75, {alpha:1,delay:0.2});

                }
            }
            for (i = 0; i < currentCover; i++) {
                addChild(coverArray[i]);
            }
            for (i = coverArray.length - 1; i > currentCover; i--) {
                addChild(coverArray[i]);
            }

            addChild(coverArray[currentCover]);
            if (coverSlider) {
                addChild(coverSlider);
                addChild(coverLabel);
            }
        }

        //Create CoverflowItem and Set Data To It
        private function createCover(num:uint, url:String):Sprite {

            //Setup Data
            var _data:Object = new Object();
            _data.id=num;

            //Create CoverflowItem
            var cover:CoverflowItem=new CoverflowItem(_data);

            //Listen for Click
            cover.addEventListener(CoverflowItemEvent.COVERFLOWITEM_SELECTED, cover_Selected);

            //Set Some Values
            cover.name=num.toString();
            cover.image=url;
            cover.padding=padding;
            cover.imageWidth=coverflowImageWidth;
            cover.imageHeight=coverflowImageHeight;
            cover.setReflection(reflectionAlpha, reflectionRatio, reflectionDistance, reflectionUpdateTime, reflectionDropoff);

            //Put CoverflowItem in Sprite Container
            var coverItem:Sprite = new Sprite();
            cover.x=- coverflowImageWidth/2-padding;
            cover.y=- coverflowImageHeight/2-padding;
            coverItem.addChild(cover);
            coverItem.name=num.toString();

            return coverItem;
        }

    }
}

The code I added is:

ExternalInterface.addCallback("gotoCover", gotoCoverflowItem);

Please help!

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-22T21:43:35+00:00Added an answer on May 22, 2026 at 9:43 pm

    Putting the ExternalInterface call at the end of the Coverflow constructor should work as desired. The current line you have is not inside a function.

    I don’t know what your javascript looks like, but this code requires a parameter for gotoCoverflowItem, so I am assuming you are passing the appropriate data.

    I haven’t gone through all the code, but keep in mind that the current code might have certain things that it does – that might not get done if you are feeding it just the index of the next cover. I do see code in the gotoColorflowItem function that updates variables for the slider and current cover based on the selection, so it might be just fine.

    Also, you are most likely going to get a runtime error if you try to test this outside of a browser for any reason, so you might want to put a try/catch for that case.

    The author included his wisdom on the page :

    “NOTE: I would not recommend trying to learn flash with this file. There are a lot of people asking how to change text color, if you are having these requests I would suggest going through some Lynda.com Flash tutorials to get you familiar with Flash or hiring a Flash developer to help you out.”

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm kinda new in flash and as3 so this may not be as difficult
I have a nested form problem. I implemented the nested forms solution form the
I have found this example on StackOverflow: var people = new List<Person> { new
This is similar to the problem posted here , but that solution doesn't work
Im new to Flash AS3 Game programming,,,There is a problem i'm facing,,,Im trying to
I am new at flash, the below is my script, i have 3 textinput
For a new project with Flash I was looking for something along the lines
Make a new AS3 Document in Flash, paste in the following code and run
New to javascript/jquery and having a hard time with using this or $(this) to
I have a Drupal view which should output a video player using flash. I

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.