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