Created
April 8, 2015 06:44
-
-
Save slbug/18b0c315f4aeae94af08 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* ### Transitions between Sections ##################################################################### */ | |
(function() { | |
// detect if IE : from http://stackoverflow.com/a/16657946 | |
var ie = (function(){ | |
var undef,rv = -1; // Return value assumes failure. | |
var ua = window.navigator.userAgent; | |
var msie = ua.indexOf('MSIE '); | |
var trident = ua.indexOf('Trident/'); | |
if (msie > 0) { | |
// IE 10 or older => return version number | |
rv = parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); | |
} else if (trident > 0) { | |
// IE 11 (or newer) => return version number | |
var rvNum = ua.indexOf('rv:'); | |
rv = parseInt(ua.substring(rvNum + 3, ua.indexOf('.', rvNum)), 10); | |
} | |
return ((rv > -1) ? rv : undef); | |
}()); | |
// disable/enable scroll (mousewheel and keys) from http://stackoverflow.com/a/4770179 | |
// left: 37, up: 38, right: 39, down: 40, | |
// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36 | |
var keys = [32, 37, 38, 39, 40], wheelIter = 0; | |
function preventDefault(e) { | |
e = e || window.event; | |
if (e.preventDefault) | |
e.preventDefault(); | |
e.returnValue = false; | |
} | |
function keydown(e) { | |
for (var i = keys.length; i--;) { | |
if (e.keyCode === keys[i]) { | |
preventDefault(e); | |
return; | |
} | |
} | |
} | |
function touchmove(e) { | |
preventDefault(e); | |
} | |
function wheel(e) { | |
// for IE | |
//if( ie ) { | |
//preventDefault(e); | |
//} | |
} | |
function disable_scroll() { | |
window.onmousewheel = document.onmousewheel = wheel; | |
document.onkeydown = keydown; | |
document.body.ontouchmove = touchmove; | |
} | |
function enable_scroll() { | |
window.onmousewheel = document.onmousewheel = document.onkeydown = document.body.ontouchmove = null; | |
} | |
var docElem = window.document.documentElement, | |
scrollVal, | |
isRevealed, | |
noscroll, | |
isAnimating, | |
container = document.getElementById( 'container' ), | |
trigger = container.querySelector( 'button.trigger' ); | |
trigger_up = container.querySelector( 'div.top' ); | |
function scrollY() { | |
return window.pageYOffset || docElem.scrollTop; | |
} | |
function scrollToTitle(){ | |
var elm = document.getElementById('title'); | |
var stopY = elm.offsetTop - 20; | |
var startY = 0; | |
var distance = stopY > startY ? stopY - startY : startY - stopY; | |
var speed = 20; | |
var step = Math.round(distance / 25); | |
var leapY = stopY > startY ? startY + step : startY - step; | |
var timer = 0; | |
if (stopY > startY) { | |
for ( var i=startY; i<stopY; i+=step ) { | |
console.log(leapY); | |
setTimeout("window.scrollTo(0, "+leapY+")", timer * speed); | |
leapY += step; if (leapY > stopY) leapY = stopY; timer++; | |
} | |
} | |
} | |
function scrollPage() { | |
scrollVal = scrollY(); | |
if( noscroll && !ie ) { | |
if( scrollVal < 0 ) return false; | |
// keep it that way | |
window.scrollTo( 0, 0 ); | |
} | |
if( classie.has( container, 'notrans' ) ) { | |
classie.remove( container, 'notrans' ); | |
return false; | |
} | |
if( isAnimating ) { | |
return false; | |
} | |
if( scrollVal <= 0 && isRevealed && !trigger_up ) { | |
toggle(0); | |
} | |
else if( scrollVal > 0 && !isRevealed ){ | |
toggle(1); | |
} | |
} | |
function toggle_up(){ | |
if( scrollVal <= 0 && isRevealed ) { | |
toggle(0); | |
} | |
} | |
function toggle( reveal ) { | |
isAnimating = true; | |
if( reveal ) { | |
classie.add( container, 'modify' ); | |
} | |
else { | |
noscroll = true; | |
disable_scroll(); | |
classie.remove( container, 'modify' ); | |
} | |
//simulating the end of the transition: | |
setTimeout( function() { | |
isRevealed = !isRevealed; | |
isAnimating = false; | |
if( reveal ) { | |
noscroll = false; | |
enable_scroll(); | |
} | |
}, 600 ); | |
} | |
// refreshing the page... | |
var pageScroll = scrollY(); | |
noscroll = pageScroll === 0; | |
disable_scroll(); | |
if( pageScroll ) { | |
isRevealed = true; | |
classie.add( container, 'notrans' ); | |
classie.add( container, 'modify' ); | |
} | |
if (trigger_up) { | |
trigger_up.addEventListener( 'click', toggle_up ); | |
} | |
window.addEventListener( 'scroll', scrollPage ); | |
trigger.addEventListener( 'click', function() { toggle( 'reveal' ); } ); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment