| OLD | NEW |
| (Empty) | |
| 1 (function(scope) { |
| 2 'use strict'; |
| 3 |
| 4 var tokens = null; |
| 5 var scroll = null; |
| 6 var previous = 0; |
| 7 var consecutiveSnappableFrames = 0; |
| 8 |
| 9 function getClosestSnapPoint(oldscroll, delta) { |
| 10 var diff = oldscroll % delta; |
| 11 if (diff >= delta / 2) { |
| 12 return oldscroll + (delta - diff); |
| 13 } |
| 14 |
| 15 return oldscroll - diff; |
| 16 } |
| 17 |
| 18 function getVelocity(distance) { |
| 19 if (distance === 0) |
| 20 return 0; |
| 21 var sign = distance > 0 ? 1 : -1; |
| 22 |
| 23 return distance / 5; |
| 24 //return Math.log(distance + 1); |
| 25 //return sign * (Math.log(Math.abs(distance)+0.0025)+2); |
| 26 } |
| 27 |
| 28 function shouldSnap(previous, current) { |
| 29 var pixelThreshold = 0; |
| 30 //var pixelThreshold = 10; |
| 31 var frameThreshold = 10; |
| 32 |
| 33 if (Math.abs(current - previous) <= pixelThreshold) { |
| 34 consecutiveSnappableFrames++; |
| 35 } else { |
| 36 consecutiveSnappableFrames = 0; |
| 37 } |
| 38 |
| 39 return consecutiveSnappableFrames >= frameThreshold; |
| 40 } |
| 41 |
| 42 // An extremely cheesy animation. |
| 43 function tick(context) { |
| 44 var seconds = context.timestamp / 1000.0; |
| 45 var oldscroll = context.getScalar(scroll); |
| 46 var newscrollposition = oldscroll; |
| 47 |
| 48 if (shouldSnap(previous, oldscroll)) { |
| 49 console.log('good'); |
| 50 var snap = getClosestSnapPoint(oldscroll, 400); |
| 51 var distance = snap - oldscroll; |
| 52 var velocity = getVelocity(distance); |
| 53 newscrollposition += velocity; |
| 54 console.log("snap " + snap + ", distance " + distance + ", velocity "
+ velocity); |
| 55 |
| 56 context.setScalar(scroll, newscrollposition); |
| 57 } else { |
| 58 console.log('bad ' + previous + ' ' + oldscroll); |
| 59 } |
| 60 |
| 61 previous = newscrollposition; |
| 62 scope.teleportMessage(context, tick); |
| 63 } |
| 64 |
| 65 scope.onmessage = function(e) { |
| 66 tokens = e.data; |
| 67 scroll = tokens[0]; |
| 68 var context = new TeleportContext(tokens); |
| 69 scope.teleportMessage(context, tick); |
| 70 }; |
| 71 |
| 72 })(self); |
| OLD | NEW |