Momentum Scrolling Script

Tom Glod tom at makeshyft.com
Wed Jun 28 14:06:52 EDT 2017


nice.... going to try this out...I had a good scrolling script, but
definitely not momentum based... will give it a shot...thanks.

On Wed, Jun 28, 2017 at 1:04 PM, Jonathan Lynch via use-livecode <
use-livecode at lists.runrev.com> wrote:

> I just realized I had the wrong way of checking to see if scrolling should
> stop. Somehow it still worked, which is kinda weird. Here is the revised
> script, with checking for tCount < 1 rather than tCount > 50
>
> ---------
>
> Momentum Scrolling Code
>
>
> Local StartDrag
>
> Local AllowDrag
>
> Local StartDragMil
>
> Local CumulativeMomentum
>
>
> on mousedown
>
>    focus on nothing
>
>    if word 1 of the name of the target = "button" or the isbutton of the
> target = 1 then
>
>       exit mousedown
>
>    end if
>
>    put (the mouseV)+(the vScroll of me) into AllowDrag
>
>    put the milliseconds into StartDragMil
>
>    put (the mouseV) into StartDrag
>
>    repeat with CM = 1 to 5
>
>       put 0 into CumulativeMomentum[CM]
>
>    end repeat
>
>    send momentumAccumulate to me in 0 milliseconds
>
> end mousedown
>
>
> on momentumAccumulate
>
>    if mouse(1) <> "down" then
>
>       exit momentumAccumulate
>
>    end if
>
>
>
>    put the milliseconds-StartDragMil into tTimeForLastMove
>
>    put (the mouseV) into tCurrentMouseV
>
>    put tCurrentMouseV - StartDrag into tLastDistanceCovered
>
>
>
>    if tTimeForLastMove = 0 then
>
>       put 1 into tTimeForLastMove
>
>    end if
>
>    repeat with CM = 5 down to 2
>
>       put CumulativeMomentum[CM-1] into CumulativeMomentum[CM]
>
>    end repeat
>
>    put (tLastDistanceCovered*10) / tTimeForLastMove into
> CumulativeMomentum[1]
>
>    put tCurrentMouseV into StartDrag
>
>    put the milliseconds into StartDragMil
>
>    send momentumAccumulate to me in 5 milliseconds
>
> end momentumAccumulate
>
>
> on mousemove
>
>    if AllowDrag <> empty then
>
>       set the vScroll of me to AllowDrag-(the mouseV)
>
>    end if
>
> end mousemove
>
>
> on mouseup
>
>    put empty into AllowDrag
>
>    put 0 into tCMTotal
>
>    Repeat with CM = 1 to 5
>
>       add CumulativeMomentum[CM] to tCMTotal
>
>    end Repeat
>
>    put tCMTotal/5 into tAverageMomentum
>
>    put tAverageMomentum * 30 into tRemainingDistance
>
>    doMomentumScrolling tRemainingDistance,50
>
> end mouseup
>
>
> on doMomentumScrolling tRemainingDistance, tCount
>
>    if tCount < 1 then
>
>       exit doMomentumScrolling
>
>    end if
>
>    if mouse(1) is "down" then
>
>       exit doMomentumScrolling
>
>    end if
>
>    put tRemainingDistance/15 into tDistanceToMove
>
>    put the vScroll of me into tVScroll
>
>    set the vScroll of me to tVScroll - tDistanceToMove
>
>    put tRemainingDistance-tDistanceToMove into tRemainingDistance
>
>    put tCount-1 into tCount
>
>    send "doMomentumScrolling tRemainingDistance, tCount" to me in 5
> milliseconds
>
> end doMomentumScrolling
>
> On Wed, Jun 28, 2017 at 12:49 PM, Sean Cole (Pi) via use-livecode <
> use-livecode at lists.runrev.com> wrote:
>
> > Jonathan,
> > I would also recommend using the var name prefixes as recommended by LC
> in
> > thier Tips for Writing Good Code when sharing publicly. Like this I mean:
> >
> > Local sStartDrag
> > Local sAllowDrag
> > Local sStartDragMil
> > Local sCumulativeMomentum
> >
> > on mousedown
> >    focus on nothing
> >    if word 1 of the name of the target = "button" or the isbutton of the
> > target = 1 then
> >       exit mousedown
> >    end if
> >    put (the mouseV)+(the vScroll of me) into sAllowDrag
> >    put the milliseconds into sStartDragMil
> >    put (the mouseV) into sStartDrag
> >    repeat with CM = 1 to 5
> >       put 0 into sCumulativeMomentum[CM]
> >    end repeat
> >    send momentumAccumulate to me in 0 milliseconds
> > end mousedown
> >
> > on momentumAccumulate
> > local tTimeForLastMove, tCurrentMouseV, tLastDistanceCovered
> >    if mouse(1) <> "down" then
> >       exit momentumAccumulate
> >    end if
> >    put the milliseconds-sStartDragMil into tTimeForLastMove
> >    put (the mouseV) into tCurrentMouseV
> >    put tCurrentMouseV - sStartDrag into tLastDistanceCovered
> >    if tTimeForLastMove = 0 then
> >       put 1 into tTimeForLastMove
> >    end if
> >    repeat with CM = 5 down to 2
> >       put sCumulativeMomentum[CM-1] into sCumulativeMomentum[CM]
> >    end repeat
> >    put (tLastDistanceCovered*10) / tTimeForLastMove into
> > sCumulativeMomentum[1]
> >    put tCurrentMouseV into sStartDrag
> >    put the milliseconds into sStartDragMil
> >    send momentumAccumulate to me in 5 milliseconds
> > end momentumAccumulate
> >
> > on mousemove
> >    if sAllowDrag <> empty then
> >       set the vScroll of me to sAllowDrag-(the mouseV)
> >    end if
> > end mousemove
> >
> > on mouseup
> > local tCMTotal, tAverageMomentum, tRemainingDistance
> >    put empty into sAllowDrag
> >    put 0 into tCMTotal
> >    Repeat with CM = 1 to 5
> >       add sCumulativeMomentum[CM] to tCMTotal
> >    end Repeat
> >    put tCMTotal/5 into tAverageMomentum
> >    put tAverageMomentum * 30 into tRemainingDistance
> >    doMomentumScrolling tRemainingDistance,50
> > end mouseup
> >
> > on doMomentumScrolling pRemainingDistance, pCount
> > local tDistanceToMove
> >    if pCount > 50 then
> >       exit doMomentumScrolling
> >    end if
> >    if mouse(1) is "down" then
> >       exit doMomentumScrolling
> >    end if
> >    put pRemainingDistance/15 into tDistanceToMove
> >    put the vScroll of me into tVScroll
> >    set the vScroll of me to tVScroll - tDistanceToMove
> >    put pRemainingDistance-tDistanceToMove into pRemainingDistance
> >    put pCount-1 into pCount
> >    send "doMomentumScrolling pRemainingDistance, pCount" to me in 5
> > milliseconds
> > end doMomentumScrolling
> >
> >
> > I hope this doesn't come across as patronising. You've obviously got some
> > years of skill behind you and I don't want to come across as demeaning.
> >
> > Sean Cole
> > *Pi Digital Productions Ltd*
> >
> > eMail Ts & Cs <http://pidigital.co.uk/emailTCs.rtf>   Pi Digital
> > Productions Ltd is a UK registered limited company, no. 5255609
> > _______________________________________________
> > use-livecode mailing list
> > use-livecode at lists.runrev.com
> > Please visit this url to subscribe, unsubscribe and manage your
> > subscription preferences:
> > http://lists.runrev.com/mailman/listinfo/use-livecode
> >
>
>
>
> --
> Do all things with love
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>



More information about the use-livecode mailing list