Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 106 additions & 0 deletions demo/hamster-wheel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
/*
*
*
*
* Copyright (c) 2016 Polar Notion
* Licensed under the MIT license.
*/
(function ($) {
$.fn.hamsterWheel = function(options) {
'use strict';

//create all the things
var settings = $.extend({}, $.fn.hamsterWheel.defaults, options),
$div = $(this),
$section = $div.children().first(),
sectionHeight = $section.height(),
height = $div.outerHeight(true),
offset = $div.offset(),
lastScrollTop = 0,
windowHeight = window.innerHeight,
divBottom = Math.round(height + offset.top - window.innerHeight),
scrollSpeed = settings.scrollSpeed,
scrollTimer;

function cloneSections(num) {
for (var i = 0; i < num; i++) {
$section.clone(true).appendTo($div);
}
}

function setHeight() {
height = $div.outerHeight(true);
offset = $div.offset();
divBottom = Math.round(height + offset.top - windowHeight);
}

if ( settings.scrollbar === false ) {
$('body').append('<style>::-webkit-scrollbar{display:none;}</style>');
}

if ( settings.autoscroll ) {
// move timeout call somewhere else maybe? timeout is blowing the stack
var scrollDown = function() {
window.scrollBy(0,1);
scrollTimer = setTimeout(scrollDown, scrollSpeed);
};
var scrollUp = function() {
window.scrollBy(0,-1);
scrollTimer = setTimeout(scrollUp, scrollSpeed);
};
}

if (settings.infinite) {
$(window).scroll(function() {
var st = $(this).scrollTop();
// skip to top or bottom of the page
if ( st > lastScrollTop && st >= divBottom) {
//scrolling down
$(document).scrollTop(offset.top + sectionHeight - windowHeight );
} else if ( st < lastScrollTop && st <= offset.top ) {
//scrolling upgit
$(document).scrollTop(divBottom - sectionHeight + windowHeight);
}
var delta = settings.scrollDelta;
// If you scroll fast enough, change scroll direction
if( Math.abs(lastScrollTop - st) >= delta && Math.abs(lastScrollTop - st) < 200 && settings.autoscroll === true ) {

if ( st > lastScrollTop ) {
//scrolling down
clearTimeout(scrollTimer);
scrollDown();
} else if ( st < lastScrollTop ) {
//scrolling up
clearTimeout(scrollTimer);
scrollUp();
} else {
return false;
}
}
lastScrollTop = st;
});
}

function init(sectionNumber) {
cloneSections(sectionNumber);
if( settings.infinite ){ setHeight(); }
if( settings.autoscroll ){ scrollDown(); }
}

init(settings.clones);
$(window).resize( function(){
setHeight();
});
return this;
};

$.fn.hamsterWheel.defaults = {
autoscroll: true,
infinite: true,
scrollSpeed: 40,
scrollDelta: 15,
clones: 6,
scrollbar: false
};

}(jQuery));
6 changes: 3 additions & 3 deletions demo/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Plugin Playground</title>
<title>Hamsterwheel</title>
<meta name="viewport" content="width=device-width, initial-scale=1">

<!-- Load local jQuery. -->
<script src="../bower_components/jquery/dist/jquery.js"></script>
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<!-- Load local lib and tests. -->
<script src="../src/hamster-wheel.js"></script>
<script src="./hamster-wheel.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="css/main.css">
</head>
Expand Down