Ubuntu

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ /*! * jQuery Scrollify * Version 0.1.10 * * Requires: * - jQuery 1.6 or higher * * https://github.com/lukehaas/Scrollify * * Copyright 2015, Luke Haas * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ (function ($,window,document,undefined) { "use strict"; var heights = [], names = [], elements = [], overflow = [], index = 0, interstitialIndex = 1, currentHash = window.location.hash, hasLocation = false, timeoutId, timeoutId2, top = $(window).scrollTop(), scrollable = false, locked = false, scrolled = false, manualScroll, swipeScroll, util, disabled = false, scrollTime = 0, settings = { //section should be an identifier that is the same for each section section: "section", sectionName: "section-name", easing: "easeOutExpo", scrollSpeed: 1100, offset : 0, scrollbars: true, axis:"y", target:"html,body", before:function() {}, after:function() {}, afterResize:function() {} }; function animateScroll(index,instant) { if(names[index]) { settings.before(index,elements); interstitialIndex = 1; if(settings.sectionName) { window.location.hash = names[index]; } if(instant) { $(settings.target).stop().scrollTop(heights[index]); settings.after(index,elements); } else { $(settings.target).stop().animate({ scrollTop: heights[index] }, settings.scrollSpeed,settings.easing); $(settings.target).promise().done(function(){locked = false;settings.after(index,elements);}); } } } $.scrollify = function(options) { $.easing['easeOutExpo'] = function(x, t, b, c, d) { return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; }; manualScroll = { handleMousedown:function() { scrollable = false; scrolled = false; }, handleMouseup:function() { scrollable = true; if(scrolled) { manualScroll.calculateNearest(); } }, handleScroll:function() { if(timeoutId){ clearTimeout(timeoutId); } timeoutId = setTimeout(function(){ scrolled = true; if(scrollable===false) { return false; } scrollable = false; manualScroll.calculateNearest(); }, 200); }, calculateNearest:function() { top = $(window).scrollTop(); var i =1, max = heights.length, closest = 0, prev = Math.abs(heights[0] - top), diff; for(;i0) { if(index>0) { if(atTop()) { e.preventDefault(); index--; locked = true; animateScroll(index,false); } } } //},5); }, keyHandler:function(e) { if(e.keyCode==38) { if(index>0) { if(atTop()) { index--; animateScroll(index,false); } } } else if(e.keyCode==40) { if(index -1) { if(Math.abs(swipeScroll.touches.touchmove.y-swipeScroll.touches.touchstart.y)>swipeScroll.options.distance) { if(swipeScroll.touches.touchstart.y < swipeScroll.touches.touchmove.y) { swipeScroll.up(); } else { swipeScroll.down(); } } } } } break; case 'touchend': if(swipeScroll.touches[event.type]===false) { swipeScroll.touches[event.type] = true; if (swipeScroll.touches.touchstart.y > -1 && swipeScroll.touches.touchmove.y > -1) { if(Math.abs(swipeScroll.touches.touchmove.y-swipeScroll.touches.touchstart.y)>swipeScroll.options.distance) { if(swipeScroll.touches.touchstart.y < swipeScroll.touches.touchmove.y) { swipeScroll.up(); } else { swipeScroll.down(); } } swipeScroll.touches.touchstart.y = -1; } } default: break; } } } }, down: function() { if(index<=heights.length-1) { if(atBottom() && indexinterstitialIndex) { interstitialScroll(parseInt(heights[index])+($(window).height()*interstitialIndex)); interstitialIndex += 1; } else { interstitialScroll(parseInt(heights[index])+(elements[index].height()-$(window).height())); } } } }, up: function() { if(index>=0) { if(atTop() && index>0) { index--; animateScroll(index,false); } else { if(interstitialIndex>2) { interstitialIndex -= 1; interstitialScroll(parseInt(heights[index])+($(window).height()*interstitialIndex)); } else { interstitialIndex = 1; interstitialScroll(parseInt(heights[index])); } } } }, init: function() { if (document.addEventListener) { document.addEventListener('touchstart', swipeScroll.touchHandler, false); document.addEventListener('touchmove', swipeScroll.touchHandler, false); document.addEventListener('touchend', swipeScroll.touchHandler, false); } } }; util = { handleResize:function() { clearTimeout(timeoutId2); timeoutId2 = setTimeout(function() { sizePanels(); calculatePositions(true); settings.afterResize(); },50); } }; settings = $.extend(settings, options); sizePanels(); calculatePositions(false); if(hasLocation===false && settings.sectionName) { window.location.hash = names[0]; } else { animateScroll(index,false); } manualScroll.init(); swipeScroll.init(); $(window).bind("resize",util.handleResize); function interstitialScroll(pos) { $(settings.target).stop().animate({ scrollTop: pos }, settings.scrollSpeed,settings.easing); } function sizePanels() { $(settings.section).each(function(i) { if($(this).css("height","auto").outerHeight()<$(window).height()) { $(this).css({"height":$(window).height()}); overflow[i] = false; } else { overflow[i] = true; } }); } function calculatePositions(resize) { $(settings.section).each(function(i){ if(i>0) { heights[i] = $(this).offset().top + settings.offset; } else { heights[i] = $(this).offset().top; } if(settings.sectionName && $(this).data(settings.sectionName)) { names[i] = "#" + $(this).data(settings.sectionName).replace(/ /g,"-"); } else { names[i] = "#" + (i + 1); } elements[i] = $(this); if(window.location.hash===names[i]) { index = i; hasLocation = true; } }); if(true===resize) { animateScroll(index,false); } } function atTop() { top = $(window).scrollTop(); if(top>parseInt(heights[index])) { return false; } else { return true; } } function atBottom() { top = $(window).scrollTop(); if(top=0;z--) { if(typeof panel === 'string') { if (names[z]===panel) { index = z; animateScroll(z,instant); } } else { if(z===panel) { index = z; animateScroll(z,instant); } } } } $.scrollify.move = function(panel) { if(panel===undefined) { return false; } move(panel,false); }; $.scrollify.instantMove = function(panel) { if(panel===undefined) { return false; } move(panel,true); }; $.scrollify.next = function() { if(index0) { index -= 1; animateScroll(index,false); } }; $.scrollify.instantNext = function() { if(index0) { index -= 1; animateScroll(index,true); } }; $.scrollify.destroy = function() { $(settings.section).each(function() { $(this).css("height","auto"); }); $(window).unbind("resize",util.handleResize); if(settings.scrollbars) { $(window).unbind('mousedown', manualScroll.handleMousedown); $(window).unbind('mouseup', manualScroll.handleMouseup); $(window).unbind('scroll', manualScroll.handleScroll); } $(document).unbind('DOMMouseScroll mousewheel',manualScroll.wheelHandler); $(document).unbind('keydown', manualScroll.keyHandler); if (document.addEventListener) { document.removeEventListener('touchstart', swipeScroll.touchHandler, false); document.removeEventListener('touchmove', swipeScroll.touchHandler, false); document.removeEventListener('touchend', swipeScroll.touchHandler, false); } heights = []; names = []; elements = []; overflow = []; }; $.scrollify.update = function() { util.handleResize(); }; $.scrollify.current = function() { return elements[index]; }; $.scrollify.disable = function() { disable = true; }; $.scrollify.enable = function() { disabled = false; }; }(jQuery,this,document));