Recreating the Path Menu with Adobe Edge

I saw this blog post by Victor Coulon about redoing the Path menu in CSS3 and thought it was really slick. I’m not as up to speed on CSS3 as I need to be yet, but after taking a look at the post, I thought this was a perfect use case for animation in an application. It’s unintrusive, adds some overall polish, and generally improves the user interface. I thought Victor’s demo was awesome and since this use case is a good one for animation, I thought it would be an ideal experiment for Adobe Edge. (Final result is here)

The Animation

Building the animation itself was quite simple. I took Victor’s graphics, made them transparent PNGs, and imported them into Edge. At that point it was just a matter of lining everything up and using the timeline to tweak the animation. I didn’t sit down and do the math on the circle, so the elements aren’t aligned perfectly (apologies) but it’s basically just six elements that all pop in from behind the plus button. With Edge it was pretty easy to add the bounce effect. I just set the easing property to easeOutBack and that gave me the bounce.

The project loaded in Adobe Edge

Interaction

While the animation was easy, it took me a bit to get the interaction down correctly. Basically whenever the red button was clicked I wanted to play the timeline animation. When it was clicked again I wanted to reverse it. Luckily Edge has a decent API that makes working with the code it generates pretty straightforward. The biggest issue I ran into was that the playReverse() API can only be run on a symbol and I was having trouble figuring out how to get a symbol instance from within my click event. Running play() on the Composition (kind of the main Edge element, and the one Edge uses by default) runs off an entire set of other operations that made it tougher to do what I wanted.

So instead I used comp.getStage() to get an instance of the “stage” symbol where I could play and reverse the timeline at will. The result is pretty close to what Victor created and what the Path app uses. To do it all, I replaced the Adobe Edge DOM Ready Event Handler code in my project_name_edge.js file with the following:

/**
 * Adobe Edge DOM Ready Event Handler
 */
$(window).ready(function() {
     comp = new Edge.Composition(compId, {stage: "." + compId}, {});
        /**
 * Adobe Edge Timeline Launch
 */
     comp.ready(function() {
         var symb = comp.getStage();
 
         $('#stage_add_button').click(function(e){
               if(played)
               {
                    symb.playReverse();
                    played = false;
               } else {
                    symb.play();
                    played = true;
               }
 
         });
     });
});

Downsides

One downside is that once I make a change in Edge it overwrites all of the changes I’ve made. I’m not sure if there’s a safe place to make JavaScript edits like the one above but I’m going to check with the team. The other downside is that it’s all JavaScript, which makes it kind of heavy and you won’t get the hardware transforms that some browsers use for CSS3. I’m not much of a designer but after this little proof of concept I’m excited to see how Edge could potentially be used to add some fine-tuned interactions like the Path menu.

You can see a working demo here and the source for the project is up on GitHub.

Related posts:

  1. Video of Thermo on Adobe Edge
  2. Flash Catalyst on the Edge
  3. What the Heck is Going on at MLB.com? About Silverlight on the Flash Context Menu?
  4. MAX Keynotes and Cocomo Sessions on Adobe TV
  5. Take a Tour of the On AIR Bus With Me
  • http://twitter.com/IvanIlijasic IvanIlijasic

    Nice sexy menu :) I’lluse it on my next AUG session.

  • http://twitter.com/IvanIlijasic IvanIlijasic

    Nice sexy menu :) I’lluse it on my next AUG session.

  • http://twitter.com/_victa Victor ☃

    Nice! To be honest, It was just an experiment with Sass and keyframes.I think keyframe animations aren’t necessary. It’s better and more compliant to add Css transitions with JS! About your experiment, may be you can change the easing during the animation width Edge (never tried Edge, sorry)?

    Example :
    @-webkit-keyframes appear { 
            0% {
               -webkit-animation-timing-function:cubic-bezier(1,.6,.57,.75);

            }             
            80% {
                -webkit-animation-timing-function:cubic-bezier(.45,.97,.51,.78);
            }
            100% { }
        }     

  • http://blog.digitalbackcountry.com Ryan Stewart

    Well I thought it was definitely a cool experiment. I’m not sure how easy it is to change the easing in Edge mid-animation, I’ll have to play with it.