Great, it's working perfectly now, thanks for all the help On May 26, 12:10 am, "Erik Beeson" <[EMAIL PROTECTED]> wrote: > Basically you want to call "callback();" when your function is > "finished". In the case of your function doing some animating, > "finished" happens when the last animation finishes, which is what I > had in my example. In your case, you have 2 conditions where the > function is "finished" right away, one if the element doesn't move, > and another if the element isn't visible. You just need to call > callback() when you're function is "finished". > > Just add "else if($.isFunction(callback)) callback();" to your outer > if and "if($.isFunction(callback)) callback();" inside the end of your > inner if. > > "callback" is probably a poor choice for a name. It would probably be > clearer if you rename "callback" to something like "finished" or > "next" or "doNext" or "nextEffect" or something like that. > > --Erik > > On 5/25/07, Gordon <[EMAIL PROTECTED]> wrote: > > > > > Though once again I've hit a bit of a snag. :) Here's the code I'm > > using for moving my elems around, rewritten as an animation > > callback. > > > $.fn.moveProducts = function (thisList, callback) > > // Product list move animation > > { > > var last = this.size () - 1; > > return this.each (function (thisElemNum) > > { > > elem = jQuery (this); > > newXPos = thisList.colToXPos (thisList.ordToCol > > (thisElemNum)); > > newYPos = thisList.rowToYPos (thisList.ordToRow > > (thisElemNum)); > > > // Only apply an animation if the element has moved > > if ((parseInt (elem.css ('left'), 10) != newXPos) || > > (parseInt > > (elem.css ('top'), 10) != newYPos)) > > { > > // Just change the position of the element if it's > > not visible, we > > don't need fancy animation effects > > if (elem.css ('display') == 'none') > > { > > elem.css ({ > > left : newXPos, > > top : newYPos > > }); > > } > > else > > { > > elem.animate ({ > > left : newXPos, > > top : newYPos > > }, Math.floor (Math.random () * 500) + 501, > > function () > > { > > if(thisElemNum == last && > > $.isFunction(callback)) > > { > > callback (); > > } > > }); > > } > > } > > }); > > } > > > As you can see there's a possibility that no animation will occur at > > all in here, and if that happens then an animate callback will not be > > triggered and the chain of subsequent animations is broken. > > > The following function fixes the broken chain function but introduces > > problems of its own. > > > $.fn.moveProducts = function (thisList, callback) > > // Product list move animation > > { > > var last = this.size () - 1; > > return this.each (function (thisElemNum) > > { > > elem = jQuery (this); > > newXPos = thisList.colToXPos (thisList.ordToCol > > (thisElemNum)); > > newYPos = thisList.rowToYPos (thisList.ordToRow > > (thisElemNum)); > > > elem.animate ({ > > left : newXPos, > > top : newYPos > > }, Math.floor (Math.random () * 500) + 501, function () > > { > > if(thisElemNum == last && $.isFunction(callback)) > > { > > callback(); > > } > > }); > > }); > > } > > > This is less optimal as effects are applied unconditionally, which > > would probably impact performance, especially if dealing with a lot of > > elements. Worse than that, if an element is invisible when the > > animation effect is applied then it is instantly rendered visible. > > The plan is to only reveal the invisible elements with a fade in after > > the move effects have ended. > > > I'm so close now! All I need now is some way to make the next stage > > in the queue occur regardless of whether my animation plugin actually > > causes any animation to happen. > > > On May 25, 9:20 pm, Gordon <[EMAIL PROTECTED]> wrote: > > > That's extremely impressive and exactly what I need, your work is > > > tremendously appreciated. Be sure to keep us all updated on how you > > > progress with this thing because I'm sure there's plenty of people out > > > there who would find this plugin to be a lifesaver > > > > On May 25, 7:54 pm, "Erik Beeson" <[EMAIL PROTECTED]> wrote: > > > > > Check this out:http://erikandcolleen.com/erik/jquery/fxQueue/random.html > > > > > Only tested on FF. I think that's doing what you want. The plugin > > > > doesn't have a concept of doing animations sequentially vs > > > > simultaniously; it only does sequentially. But the plugin does make it > > > > easy to use any animation function. So for the simultanious part, I > > > > created a custom animation function (called randomAnimation) that just > > > > randomly moves/resizes stuff. The only tricky bit it to make sure you > > > > only call the callback function in randomAnimation when the last item > > > > is finished animating. Check out the source to see how it's done. > > > > > I also fixed a few substantial flaws in the fxQueue plugin. Feedback > > > > is always welome. > > > > > --Erik > > > > > On 5/25/07, Gordon <[EMAIL PROTECTED]> wrote: > > > > > > I just downloaded it and am experimenting, so far I'm really > > > > > impressed. Thanks for the effort, it really is appreciated. > > > > > > I do have one question though, I'm not sure if this is possible or > > > > > not, but I need to be able to animate a group of objects together, but > > > > > with unique effects (they all need to move to different locations). > > > > > This moving effect will be bookended with a fadeout effect beforehand > > > > > for elements that are not included in the user's selection, and a fade > > > > > in effect afterward for elements that were excluded the previous > > > > > selection but which are to be reincluded this time around. > > > > > > I'll cut and paste what I put in the other thread for you because I > > > > > think it gets across what I'm thinking a bit better. > > > > > > In reflection, I think what I need is a queue into which classes of > > > > > animations can be inserted. All the animation events in a class get > > > > > executed together, but each class in the queue is executed one after > > > > > the other. Maybe something like this: > > > > > > animQueue.addClass ('hideClass'); > > > > > animQueue.addAnim ('hideClass', $('.toHide').fadeOut ('slow')); > > > > > animQueue.addClass ('moveClass'); > > > > > $('.moveClass').each (function (){ > > > > > animQueue.addAnim ('moveClass', $(this).animate ({ > > > > > top: Math.floor (Math.random () * 1000), > > > > > left: Math.floor (Math.random () * 1000) > > > > > },(Math.floor (Math.random () * 1000) + 500) )); > > > > > }); > > > > > animQueue.addClass ('showClass'); > > > > > animQueue.addAnim ('showClass', $('.toShow').fadeIn ('slow')); > > > > > > animQueue.execute (); > > > > > > Obviously the syntax is totally made up and possibly totally not > > > > > appropiate for what I'm trying to describe, but I hope yo ucan get the > > > > > gist of what I'm gatting at here. Is it possible to do this with your > > > > > plugin? Because, if so, then you've come up with pretty much the > > > > > perfect solution. :) > > > > > > On May 25, 4:08 pm, "Erik Beeson" <[EMAIL PROTECTED]> wrote: > > > > > > Hello all, > > > > > > > In response to a thread yesterday, I put together a little framework > > > > > > for effect queueing. My version yesterday, and subsequently > > > > > > Brandon's > > > > > > version aswell, don't correctly deal with effects applied to > > > > > > multiple > > > > > > elements, like when using classes instead of IDs. See here, and > > > > > > notice > > > > > > how the later effects all bunch up and don't run > > > > > > sequentially:http://erikandcolleen.com/erik/jquery/fxQueue/ba/test.html > > > > > > > This version deals with that correctly. Other features include: > > > > > > * Multiple queues that can run simultaniously > > > > > > * Pausing/resuming of queues > > > > > > * Works with any effect (just requires the effect function to take > > > > > > an > > > > > > "on effect finished" callback as its last parameter) like show, > > > > > > hide, > > > > > > animate, Pulsate, Puff, Grow, etc > > > > > > * Additional effects can be added to queues after they've been > > > > > > created > > > > > > > I've only tested it on FF1.5/Win and IE6 (I'll test OS X when I get > > > > > > home later today), and for some reason one of the demo pages doesn't > > > > > > work right on IE6. > > > > > > > Plugin src (with a little inline documentation!) and a couple of > > > > > > examples can be had > > > > > > here:http://erikandcolleen.com/erik/jquery/fxQueue/ > > > > > > > I mainly did this as an exercise for myself, so it won't hurt my > > > > > > feelings if it turns out this isn't really very useful, or if it's > > > > > > already been implemented in SVN or whatever. > > > > > > > Is this useful to anybody? Is it worth polishing up a little more? > > > > > > > --Erik