
Please update your flash player
Download Group94 style scrolling menu
I built this circular version of the group94 style scrolling menu for a flash website awards showcase called I was asked to work on. The original design was based around circles, but we ended up redesigning as parts of the interface (not this menu!) were to processor intensive.
Ok, so part two of my tribute to Group 94’s menu system! This is again inspired by the Group 94 (at least they are most famous for it) shuffle menu in Flash, which pushes items off the top and bottom as the menu shuffles into place.
This version is circular though, and each menu item rotates around a pivot. Initiating the prototype with particular variables will define the spacing between items, the radius of the Group 94 circular menu and the amount of items visible at one time.
Please note, this is in no way a rip of the Group 94 menu. In fact, I haven’t even seen a circular version which is why I made it. I have no idea how Group 94’s actionscript looks, or how they would have approached this style of menu. I do know however, that they have produced many innovative navigation systems, and so this is a simple tribute to their talent and innovation.
As with the regular group 94 scrolling menu, you will need Fuse installed, though all it does is handle tweening so you could use tweener or the inbuilt Flash tweening functions. I just prefer Fuse!
How it is done.
First import Fuse for tweening, then setup the array we will use for the menu:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import com.mosesSupposes.fuse.*; ZigoEngine.simpleSetup (Shortcuts,PennerEasing); var planets:Array = new Array (); planets.push ("Mercury"); planets.push ("Venus"); planets.push ("Earth"); planets.push ("Mars"); planets.push ("Jupiter"); planets.push ("Saturn"); planets.push ("Uranus"); planets.push ("Neptune"); planets.push ("Pluto"); |
Then some very basic functionality for each menu button. I have ommited rollOvers for the demo…
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | MovieClip.prototype.circNavBtn = function (id:Number, par:MovieClip, name:String) { this.pos = this.id = id; this.par = par; this.btn.txt.text = name.toUpperCase (); this._rotation = 90; this._alpha = 0; this.onPress = function () { this.par.circNavRot (this.pos); this.activeBtn (); }; }; |
Then two small prototypes to handle the activation and de-activation of the buttons when the scroll function is called:
39 40 41 42 43 44 45 46 47 48 49 50 51 52 | MovieClip.prototype.activeBtn = function () { activeNavBtn.inactiveBtn (); activeNavBtn = this; this.btn.scaleTo (200,0.5); this.enabled = false; }; MovieClip.prototype.inactiveBtn = function () { this.btn.scaleTo (100,0.5); }; |
Then the main shuffle or rotation function, which designates tweens to all visible movieClips and hides those outside of the visible items range.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | MovieClip.prototype.circNavRot = function (num:Number) { var diff:Number = num; for (var i:Number = 0; i < this.btns.length; i++) { var btn:MovieClip = this["navBtn" + i]; btn.pos -= diff; if (Math.abs (btn.pos) < this.visItems) { var offset:Number; btn.pos != 0 ? (offset = btn.pos > 0 ? 15 : -15) : offset = 0; var rot:Number = offset + (this.spacing * btn.pos); var alph:Number = 100 - ((100 / this.visItems) * Math.abs (btn.pos)); var scl:Number = 100 - (5 * Math.abs (btn.pos)); btn.rotateTo (rot,0.5,"easeOutExpo"); btn.alphaTo (alph,0.5); btn.btn.scaleTo (scl,0.5); } else { btn.stopTween ("_alpha"); btn.stopTween ("_rotation"); btn._rotation = btn.pos > 0 ? 90 : -90; btn._alpha = 0; } btn.enabled = Math.abs (btn.pos) < this.visItems; } this["navBtn" + num].activeBtn (); }; |
Now we setup the circular scrolling menu on a movieClip:
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | MovieClip.prototype.circNav = function (array:Array, radius:Number, spacing:Number, visItems:Number) { this.btns = new Array (); this.spacing = spacing; this.visItems = visItems; for (var i:Number = 0; i < array.length; i++) { var navBtn:MovieClip = this.createEmptyMovieClip ("navBtn" + i, i); var btnTxt:MovieClip = navBtn.attachMovie ("btn", "btn", 0); btnTxt._x = radius; navBtn.circNavBtn (i,this,array[i]); this.btns.push (navBtn); } this.circNavRot (0); }; |
Her we dynamically create a movieClip, position in, then call our prototype to create the lovely Group94 style menu…
108 109 110 111 112 | var testMenu:MovieClip = this.createEmptyMovieClip ("nav", 0); testMenu._x = 20; testMenu._y = 112; testMenu.circNav (planets, 60, 15, 4); |
And finally we add the ability to use the mouse wheel to scroll the menu. otherwise we just click the menu items:
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | var mouseListener:Object = new Object (); mouseListener.onMouseWheel = function (delta) { var navIndex:Number = activeNavBtn.id; if (delta < 0 && activeNavBtn.id < planets.length - 1) { testMenu.circNavRot (1); testMenu["navBtn" + (navIndex + 1)].activeBtn (); } else if (delta > 0 && activeNavBtn.id > 0) { testMenu.circNavRot (-1); testMenu["navBtn" + (navIndex - 1)].activeBtn (); } }; Mouse.addListener (mouseListener); |
I hope this is useful to someone! If you find a home for it, please let me know.
5 Responses to G94 Circular Menu
goliatone
Aug 7th 2007
4:01 pm
hi Justin,
really cool stuff! Im happy that you actually did answer my post. thumbs up!
regards,
goliatone
cube
Oct 3rd 2007
8:45 am
Great piece of script and a beautiful page as well! Wordpress? Any special theme?
BTW: There must be a small bug in the script as the fading buttons are not active constantly. Will try to figure it out and tell you if I find a solution.
BTW2: Been in your library… I would recommend “The pillars of the earth” by Ken Follett if you got some time left. Good book… no, great book! ;)
BTW3: You got one more rss-reader.
cheers,
cube
John
Nov 1st 2007
6:36 am
Hi there,
Was just wondering what version of Flash your using. I have Flash 8 and can’t open the download.
Cheers,
John.
Jeremy
Dec 12th 2007
7:38 am
Hello,
very nice menu! Just wondering if it is possible to replace the text with images?
Cheers
Jeremy
Sensbachtal
Mar 17th 2008
2:24 am
Just wanted to say Hello to everyone.
Much to read and learn here, I’m sure I will enjoy !
Leave a Reply