Skip to content

Commit

Permalink
fix module bug
Browse files Browse the repository at this point in the history
  • Loading branch information
tholman committed Oct 10, 2017
1 parent 0e811d5 commit c19ae9e
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 78 deletions.
147 changes: 77 additions & 70 deletions elevator.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
*********************************************/

var Elevator = function(options) {

'use strict';
"use strict";

// Elements
var body = null;
Expand Down Expand Up @@ -39,17 +38,18 @@ var Elevator = function(options) {
*/

// Thanks Mr Penner - http://robertpenner.com/easing/
function easeInOutQuad( t, b, c, d ) {
function easeInOutQuad(t, b, c, d) {
t /= d / 2;
if ( t < 1 ) return c / 2 * t * t + b;
if (t < 1) return c / 2 * t * t + b;
t--;
return -c / 2 * ( t * ( t -2 ) - 1 ) + b;
return -c / 2 * (t * (t - 2) - 1) + b;
}

function extendParameters(options, defaults){
for( var option in defaults ){
var t = options[option] === undefined && typeof option !== "function";
if(t){
function extendParameters(options, defaults) {
for (var option in defaults) {
var t =
options[option] === undefined && typeof option !== "function";
if (t) {
options[option] = defaults[option];
}
}
Expand All @@ -58,13 +58,13 @@ var Elevator = function(options) {

function getVerticalOffset(element) {
var verticalOffset = 0;
while( element ){
while (element) {
verticalOffset += element.offsetTop || 0;
element = element.offsetParent;
}

if ( verticalPadding ) {
verticalOffset = verticalOffset - verticalPadding;
if (verticalPadding) {
verticalOffset = verticalOffset - verticalPadding;
}

return verticalOffset;
Expand All @@ -75,65 +75,73 @@ var Elevator = function(options) {
*/

// Time is passed through requestAnimationFrame, what a world!
function animateLoop( time ) {
if ( !startTime ) {
function animateLoop(time) {
if (!startTime) {
startTime = time;
}

var timeSoFar = time - startTime;
var easedPosition = easeInOutQuad(timeSoFar, startPosition, endPosition - startPosition, duration);
var easedPosition = easeInOutQuad(
timeSoFar,
startPosition,
endPosition - startPosition,
duration
);

window.scrollTo(0, easedPosition);

if( timeSoFar < duration ) {
if (timeSoFar < duration) {
animation = requestAnimationFrame(animateLoop);
} else {
animationFinished();
}
}

// ELEVATE!
// /
// ____
// .' '=====<0
// |======|
// |======|
// [IIIIII[\--()
// |_______|
// C O O O D
// C O O O D
// C O O O D
// C__O__O__O__D
// [_____________]
// ELEVATE!
// /
// ____
// .' '=====<0
// |======|
// |======|
// [IIIIII[\--()
// |_______|
// C O O O D
// C O O O D
// C O O O D
// C__O__O__O__D
// [_____________]
this.elevate = function() {

if( elevating ) {
if (elevating) {
return;
}

elevating = true;
startPosition = (document.documentElement.scrollTop || body.scrollTop);
startPosition = document.documentElement.scrollTop || body.scrollTop;
updateEndPosition();

// No custom duration set, so we travel at pixels per millisecond. (0.75px per ms)
if( !customDuration ) {
duration = ( Math.abs(endPosition - startPosition) * 1.5);
if (!customDuration) {
duration = Math.abs(endPosition - startPosition) * 1.5;
}

requestAnimationFrame( animateLoop );
requestAnimationFrame(animateLoop);

// Start music!
if( mainAudio ) {
if (mainAudio) {
mainAudio.play();
}

if( startCallback ) {
if (startCallback) {
startCallback();
}
};

function browserMeetsRequirements() {
return window.requestAnimationFrame && window.Audio && window.addEventListener;
return (
window.requestAnimationFrame &&
window.Audio &&
window.addEventListener
);
}

function resetPositions() {
Expand All @@ -143,39 +151,36 @@ var Elevator = function(options) {
}

function updateEndPosition() {
if(targetElement){
if (targetElement) {
endPosition = getVerticalOffset(targetElement);
}
}

function animationFinished() {

resetPositions();

// Stop music!
if( mainAudio ) {
if (mainAudio) {
mainAudio.pause();
mainAudio.currentTime = 0;
}

if( endAudio ) {
if (endAudio) {
endAudio.play();
}

if( endCallback ) {
if (endCallback) {
endCallback();
}
}

function onWindowBlur() {

// If animating, go straight to the top. And play no more music.
if( elevating ) {

cancelAnimationFrame( animation );
if (elevating) {
cancelAnimationFrame(animation);
resetPositions();

if( mainAudio ) {
if (mainAudio) {
mainAudio.pause();
mainAudio.currentTime = 0;
}
Expand All @@ -185,12 +190,12 @@ var Elevator = function(options) {
}
}

function bindElevateToElement( element ) {
if( element.addEventListener ) {
element.addEventListener('click', that.elevate, false);
function bindElevateToElement(element) {
if (element.addEventListener) {
element.addEventListener("click", that.elevate, false);
} else {
// Older browsers
element.attachEvent('onclick', function() {
element.attachEvent("onclick", function() {
updateEndPosition();
document.documentElement.scrollTop = endPosition;
document.body.scrollTop = endPosition;
Expand All @@ -199,7 +204,7 @@ var Elevator = function(options) {
}
}

function init( _options ) {
function init(_options) {
// Bind to element click event, if need be.
body = document.body;

Expand All @@ -215,51 +220,53 @@ var Elevator = function(options) {

_options = extendParameters(_options, defaults);

if( _options.element ) {
bindElevateToElement( _options.element );
if (_options.element) {
bindElevateToElement(_options.element);
}

// Take the stairs instead
if( !browserMeetsRequirements() ) {
if (!browserMeetsRequirements()) {
return;
}

if( _options.duration ) {
if (_options.duration) {
customDuration = true;
duration = _options.duration;
}

if( _options.targetElement ) {
if (_options.targetElement) {
targetElement = _options.targetElement;
}

if( _options.verticalPadding ) {
if (_options.verticalPadding) {
verticalPadding = _options.verticalPadding;
}

window.addEventListener('blur', onWindowBlur, false);
window.addEventListener("blur", onWindowBlur, false);

if( _options.mainAudio ) {
mainAudio = new Audio( _options.mainAudio );
mainAudio.setAttribute( 'preload', _options.preloadAudio );
mainAudio.setAttribute( 'loop', _options.loopAudio );
if (_options.mainAudio) {
mainAudio = new Audio(_options.mainAudio);
mainAudio.setAttribute("preload", _options.preloadAudio);
mainAudio.setAttribute("loop", _options.loopAudio);
}

if( _options.endAudio ) {
endAudio = new Audio( _options.endAudio );
endAudio.setAttribute( 'preload', 'true' );
if (_options.endAudio) {
endAudio = new Audio(_options.endAudio);
endAudio.setAttribute("preload", "true");
}

if( _options.endCallback ) {
if (_options.endCallback) {
endCallback = _options.endCallback;
}

if( _options.startCallback ) {
if (_options.startCallback) {
startCallback = _options.startCallback;
}
}

init(options);
};

module.exports = Elevator;
if (typeof module !== "undefined" && module.exports) {
module.exports = Elevator;
}
2 changes: 1 addition & 1 deletion elevator.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 4 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
{
"name": "elevator.js",
"version": "1.0.0",
"description": "Elevator.js fixes those awkward \"scroll to top\" moments the old fashioned way.",
"keywords": [
"scroll",
"top",
"elevator"
],
"version": "1.0.1",
"description":
"Elevator.js fixes those awkward \"scroll to top\" moments the old fashioned way.",
"keywords": ["scroll", "top", "elevator"],
"homepage": "http://tholman.com/elevator.js",
"bugs": {
"url": "https://github.com/tholman/elevator.js/issues"
Expand Down

0 comments on commit c19ae9e

Please sign in to comment.