Momentum Scrolling Script

Sean Cole (Pi) sean at pidigital.co.uk
Wed Jun 28 12:49:34 EDT 2017


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



More information about the use-livecode mailing list