Momentum Scrolling Script

Jonathan Lynch jonathandlynch at gmail.com
Wed Jun 28 13:04:25 EDT 2017


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



More information about the use-livecode mailing list