1var fakeEnd = 10000; 2var cancelNextScroll = false; 3var lastScroll = 0; 4var ticking = false; 5var keepTicking = false; 6var endMarker = null; 7 8Math.sign = Math.sign || function(x) { 9 x = +x; // convert to a number 10 if (x === 0 || isNaN(x)) { 11 return x; 12 } 13 return x > 0 ? 1 : -1; 14} 15 16$(window).on('mousewheel DOMMouseScroll', function(e){ 17 if(typeof e.originalEvent.detail == 'number' && e.originalEvent.detail !== 0) { 18 if(e.originalEvent.detail > 0) { 19 // console.log('Down'); 20 scrollIntention(e); 21 } else if(e.originalEvent.detail < 0){ 22 // console.log('Up'); 23 scrollIntention(e); 24 } 25 } else if (typeof e.originalEvent.wheelDelta == 'number') { 26 if(e.originalEvent.wheelDelta < 0) { 27 // console.log('Down'); 28 scrollIntention(e); 29 } else if(e.originalEvent.wheelDelta > 0) { 30 // console.log('Up'); 31 scrollIntention(e); 32 } 33 } 34}); 35 36function scrollIntention(event) { 37 var scrollTotalDeltaY = event.deltaY * event.deltaFactor 38 var preScrollTop = window.pageYOffset; 39 var postScrollTop = window.pageYOffset - scrollTotalDeltaY; 40 var pageRect = endMarker.getBoundingClientRect(); 41 42 if (postScrollTop < 0 && scrollTotalDeltaY > 0) { 43 cancelNextScroll = true; 44 //window.scrollTo(0, pageRect.top + preScrollTop); 45 window.scrollBy(0, pageRect.top + preScrollTop); 46 } 47 else if (pageRect.top <= 0 && scrollTotalDeltaY < 0) { 48 cancelNextScroll = true; 49 window.scrollTo(0, pageRect.top); 50 //window.scrollBy(0, -(pageRect.top + preScrollTop)); 51 } 52} 53 54function refresh() { 55 var st = window.pageYOffset; 56 57 if (st != lastScroll) { 58 var scrollDelta = lastScroll - st 59 60 if (cancelNextScroll) { 61 cancelNextScroll = false; 62 } else { 63 scrollIntention({ deltaY: Math.sign(scrollDelta), deltaFactor: Math.abs(scrollDelta) }) 64 } 65 66 } 67} 68 69$(document).ready(function() { 70 71 endMarker = $("#end-marker")[0]; 72 73 var $window = $(window); 74 75 // check whether we want to scroll but we're at the top of the page 76// $window.mousewheel(scrollIntention); 77 78// $(document).mousewheel(function(event) { 79// scrollIntention(event); 80// console.log(event.deltaX, event.deltaY, event.deltaFactor); 81// }); 82 83 // update parallax on scroll events 84 $window.scroll(refresh); 85 86 // initial refresh 87 refresh(); 88}); 89 90$(document).keyup(function(e) { 91 switch (e.keyCode) { 92 case 27: // escape 93 window.location.href = "#_"; 94 break; 95 } 96}); 97 98$(document).keydown(function(e) { 99 switch (e.keyCode) { 100 case 38: // up 101 case 33: // page-up 102 window.scrollTo(0, 0); 103 return false; 104 if (window.pageYOffset == 0) 105 scrollIntention({ deltaY: 1, deltaFactor: 1 }) 106 break; 107 108 case 40: // down 109 case 34: // page-down 110 if (endMarker){ 111 var pageRect = endMarker.getBoundingClientRect(); 112 window.scrollTo(0, pageRect.top) 113 } 114 return false; 115 /*if (window.pageYOffset >= pageSize) 116 scrollIntention({ deltaY: -1, deltaFactor: 1 })*/ 117 break; 118 119 case 35: // end 120 window.scrollTo(0, fakeEnd); 121 cancelNextScroll = true; 122 return false; 123 break; 124 125 case 36: // home 126 window.scrollTo(0, 1); 127 cancelNextScroll = true; 128 return false; 129 break; 130 } 131});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.