This issue just bit me spectacularally in the backside due to the fact
that I'm trying to scroll one div inside another by adjusting the
inner's div top relative to the container div.  when scrolling right
this value becomes negative and the result is a relative animation
instead of an absolute one as it was under 1.1.x . I like the proposed
+= and -= notation, it makes sense to me.

On Sep 12, 2:12 pm, "John Resig" <[EMAIL PROTECTED]> wrote:
> Hey, thanks for your thoughts. I thought this issue over last night
> and have come up with the following solution:
>
> Absolute Animations:
> "50px"
> "-50px"
>
> Relative Animations:
> "+=50px"
> "-=50px"
>
> I'm going to be pushing this live in an update this weekend, so that
> it's fixed quickly. (In the future, stuff like this should be brought
> up on the jquery-dev list.)
>
> --John
>
> On 9/12/07, Wizzud <[EMAIL PROTECTED]> wrote:
>
>
>
> > The code ...
>
> >         // If a +/- token was provided, we're doing a relative animation
> >         if ( parts[1] )
> >                 end = ((parts[1] == "-" ? -1 : 1) * end) + start;
>
> > ... is based on the assumption that any value with a leading +/- indicator
> > is a relative animation.
> > Unfortunately this means that it can't (currently!) cope with absolute
> > animation in a negative range. For example, if you want to animate anything
> > from currentValue TO -y it will translate that into animate from
> > currentValue BY -y, simply because of the negative sign in front of y.
> > With positives, in mathematical terms x (unsigned) is equivalent to +x, so
> > purposefully inserting a plus sign could be interpreted as a relative
> > movement as opposed to a positive absolute. However, you can only get
> > relative changes to be recognised by sending a String, ie. {top:+234} will
> > be taken as absolute, whereas {top:'+234'} will be taken as relative. This
> > is because (at least in Firefox!) the number loses the plus sign as being
> > irrelevant, so conversion to String for pattern recognition of the leading
> > '+' will never have a leading '+'!
>
> > This leaves 2 questions:
> > 1. How do you get around it until it's fixed?
> > 2. How do you fix it?
>
> > (1) Work-around. There are 2 ways (I think).
> > Either: Try sending the change through as a String with a leading space, eg
> > instead of animate({marginTop:-2492}), try animate({marginTop:' -2492'}).
> > (This worked for me in a very simple test)
> > Or: Translate any absolute movement to a negative position into a relative
> > movement before calling animate, eg. get current marginTop yourself and work
> > out the relative change required
>
> > (2) Fix. Hmmm. There are undoubtedly lots of possible solutions and I
> > hesitate to suggest one in favour of any other, but ... seeing as a String
> > has to be used to get the leading '+' sign recognised, why not make relative
> > changes be enforced by a double sign.
> > For example:
> > animate({top:234}) = absolute change to 234px
> > animate({top:'+234em'}) = absolute change to 234em
> > animate({top:-234}) = absolute change to -234px
> > animate({top:'-234%'}) = absolute change to -234%
> > animate({top:'++234'}) = relative change by 234px
> > animate({top:'+-234'}) = relative change by -234px
> > animate({top:'--234em'}) = relative change by -234em
> > animate({top:'-+234%'}) = relative change by +234%
>
> > [ NB 'double-signing' numbers:
> >   animate({top:++234}) = javascript error, invalid increment operand
> >   animate({top:--234}) = javascript error, invalid decrement operand
> >   animate({top:+-234}) = absolute change to -234px
> >   animate({top:-+234}) = absolute change to -234px ]
>
> > In the above examples, the direction of the first sign doesn't matter - it
> > could be a '+' or a '-', all it does is indicate that the change is
> > relative. For that matter, it could be something else, like an 'r' instead
> > of a +/-, eg animate({top:'r234'}) or animate({top:'r-234'}), but I'm not
> > sure whether that might not be more confusing. Allowing either a '+' or a
> > '-' could allow users to more easily apply the 'relative' directive
> > depending upon how they work out and construct their values.
>
> > Anyway, to make this 'double-signing' work would require 2 changes (v1.2
> > source):
> > At roughly line 2578...
> > //      var parts = val.toString().match(/^([+-]?)([\d.]+)(.*)$/),
> >         var parts = val.toString().match(/^([+-]*?)([\d.]+)(.*)$/),
> > And roughly 2592...
> >         // If 'double-signed', we're doing a relative animation
> >         if ( parts[1] )
> > //              end = ((parts[1] == "-" ? -1 : 1) * end) + start;
> >                 end = ((parts[1].substr(parts[1].length-1) == "-" ? -1 : 1) 
> > * end) +
> > (parts[1].length>1 ? start : 0);
>
> > As I stated at the start, this is only a suggestion and may turn out to be
> > non-viable in the bigger picture - but it does seem to work (bearing in mind
> > I'm only testing in Firefox!).
>
> > bmsterling wrote:
>
> > > Not sure if this is any more help, but looking at the core around line
> > > 2593,
> > > it looks like you check for a minus sign and then add that to the start
> > > position/style and your comments says:
>
> > > "// If a +/- token was provided, we're doing a relative animation"
>
> > > But yet you are not looking, explicitly, for a plus sign.
>
> > > Well, hope this helps in some way.
>
> > > On 9/11/07, Benjamin Sterling <[EMAIL PROTECTED]> wrote:
>
> > >> Will do, I also just did some testing and it looks like it happens when a
> > >> minus sign is in play.  I will post my findings to the bug report.
>
> > >> On 9/11/07, John Resig <[EMAIL PROTECTED]> wrote:
>
> > >> > Sounds like a true bug. Could you submit a bug report?
> > >> >http://dev.jquery.com/
>
> > >> > --John
>
> > >> > On 9/11/07, Benjamin Sterling <[EMAIL PROTECTED]> wrote:
> > >> > > Url in question:
> > >> > >http://benjaminsterling.com/experiments/jqGalViewV2/
>
> > >> > > At about line 87 and then again at line 91 I have the following:
>
> > >> > $holder.animate({marginTop:-($mainImgContainer.height()*index)},'1000',
> > >> > > opts.tnease);
>
> > >> > > Depending on the link at bottom clicked, the marginTop gets set to
> > >> > what ever
> > >> > > $mainImgContainer.height()*index adds up to, but with a
> > >> > > minus infront.  So if you click on eight you get -2492.  And when you
> > >> > > clicked 7, you would get -2136.  In 1.1.3 this worked fine[1].  But
> > >> > with 1.2
> > >> > > it will just add up the marginTop, so -2492 and -2136 becomes -4628.
>
> > >> > > In an earlier post, John[2] suggested that the animation method only
> > >> > took in
> > >> > > integers, so if I do:
>
> > >> $holder.animate({marginTop:parseInt(-($mainImgContainer.height()*index))},'1000',
>
> > >> > > opts.tnease);
>
> > >> > > It should work, but sadly, still adds up.  Is this a true bug, or am
> > >> I
> > >> > > missing something?
>
> > >> > > [1]http://benjaminsterling.com/experiments/jqGalView
> > >> > > [2]
>
> > >>http://groups.google.com/group/jquery-en/browse_thread/thread/705cd47...
>
> > >> > > --
> > >> > > Benjamin Sterling
> > >> > >http://www.KenzoMedia.com
> > >> > >http://www.KenzoHosting.com
>
> > >> --
> > >> Benjamin Sterling
> > >>http://www.KenzoMedia.com
> > >>http://www.KenzoHosting.com
>
> > > --
> > > Benjamin Sterling
> > >http://www.KenzoMedia.com
> > >http://www.KenzoHosting.com
>
> > --
> > View this message in 
> > context:http://www.nabble.com/Animation-bug-in-1.2-tf4426383s15494.html#a1263...
> > Sent from the JQuery mailing list archive at Nabble.com.

Reply via email to