From 1c23e983ba6ae31c5a863c3e5e1f5e1f794f7756 Mon Sep 17 00:00:00 2001 From: Gleb Date: Mon, 15 Jan 2018 20:13:02 +0300 Subject: [PATCH 1/4] fix scrolling back to top when at bottom because of NaN bug --- smartscroll.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/smartscroll.js b/smartscroll.js index 8362c8a..7967db4 100644 --- a/smartscroll.js +++ b/smartscroll.js @@ -250,9 +250,7 @@ }, speed, function () { // eslint-disable-line func-names isScrolling = false; if (options.eventEmitter) { - var windowTop = getWindowTop(); - var sectionIndexAtWindowMiddle = getSectionIndexAt(windowTop + ($(window).height() / 2)); - options.eventEmitter.emitEvent('scrollEnd', [sectionIndexAtWindowMiddle]); + options.eventEmitter.emitEvent('scrollEnd'); } }); }; @@ -261,9 +259,8 @@ this.scroll = function scroll(down) { if (sections) { var windowTop = getWindowTop(); - var sectionIndexAtWindowMiddle; if (options.eventEmitter) { - sectionIndexAtWindowMiddle = getSectionIndexAt(windowTop + ($(window).height() / 2)); + var sectionIndexAtWindowMiddle = getSectionIndexAt(windowTop + ($(window).height() / 2)); var nextSlideNumber = down ? ( sectionIndexAtWindowMiddle + 1 ) : ( @@ -279,7 +276,7 @@ scrollToPixel(sections[i - 1] - $(window).height(), 700); } if (options.eventEmitter) { - options.eventEmitter.emitEvent('scrollEnd', [sectionIndexAtWindowMiddle]); + options.eventEmitter.emitEvent('scrollEnd'); } return false; } @@ -330,9 +327,11 @@ options.eventEmitter.emitEvent('scrollStart', [sectionIndexAtWindowMiddle - 1]); } } else if (scrollAction === 'down') { - scrollToPixel(sections[sectionIndexAtWindowMiddle] + 1, options.animationSpeed); - if (options.eventEmitter) { - options.eventEmitter.emitEvent('scrollStart', [sectionIndexAtWindowMiddle + 1]); + if (sections[sectionIndexAtWindowMiddle]) { + scrollToPixel(sections[sectionIndexAtWindowMiddle] + 1, options.animationSpeed); + if (options.eventEmitter) { + options.eventEmitter.emitEvent('scrollStart', [sectionIndexAtWindowMiddle + 1]); + } } } } From df156f4647bb8563aa8f103433413b3cd8a1bf74 Mon Sep 17 00:00:00 2001 From: Gleb Tv Date: Mon, 15 Jan 2018 20:14:23 +0300 Subject: [PATCH 2/4] Revert "fix scrolling back to top when at bottom because of NaN bug" This reverts commit 1c23e983ba6ae31c5a863c3e5e1f5e1f794f7756. --- smartscroll.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/smartscroll.js b/smartscroll.js index 7967db4..8362c8a 100644 --- a/smartscroll.js +++ b/smartscroll.js @@ -250,7 +250,9 @@ }, speed, function () { // eslint-disable-line func-names isScrolling = false; if (options.eventEmitter) { - options.eventEmitter.emitEvent('scrollEnd'); + var windowTop = getWindowTop(); + var sectionIndexAtWindowMiddle = getSectionIndexAt(windowTop + ($(window).height() / 2)); + options.eventEmitter.emitEvent('scrollEnd', [sectionIndexAtWindowMiddle]); } }); }; @@ -259,8 +261,9 @@ this.scroll = function scroll(down) { if (sections) { var windowTop = getWindowTop(); + var sectionIndexAtWindowMiddle; if (options.eventEmitter) { - var sectionIndexAtWindowMiddle = getSectionIndexAt(windowTop + ($(window).height() / 2)); + sectionIndexAtWindowMiddle = getSectionIndexAt(windowTop + ($(window).height() / 2)); var nextSlideNumber = down ? ( sectionIndexAtWindowMiddle + 1 ) : ( @@ -276,7 +279,7 @@ scrollToPixel(sections[i - 1] - $(window).height(), 700); } if (options.eventEmitter) { - options.eventEmitter.emitEvent('scrollEnd'); + options.eventEmitter.emitEvent('scrollEnd', [sectionIndexAtWindowMiddle]); } return false; } @@ -327,11 +330,9 @@ options.eventEmitter.emitEvent('scrollStart', [sectionIndexAtWindowMiddle - 1]); } } else if (scrollAction === 'down') { - if (sections[sectionIndexAtWindowMiddle]) { - scrollToPixel(sections[sectionIndexAtWindowMiddle] + 1, options.animationSpeed); - if (options.eventEmitter) { - options.eventEmitter.emitEvent('scrollStart', [sectionIndexAtWindowMiddle + 1]); - } + scrollToPixel(sections[sectionIndexAtWindowMiddle] + 1, options.animationSpeed); + if (options.eventEmitter) { + options.eventEmitter.emitEvent('scrollStart', [sectionIndexAtWindowMiddle + 1]); } } } From 942f841a7261be34ada9cf5f3f53493b057c6d6d Mon Sep 17 00:00:00 2001 From: Gleb Date: Mon, 15 Jan 2018 20:15:04 +0300 Subject: [PATCH 3/4] fix scrolling back to top when at bottom because of NaN bug --- smartscroll.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/smartscroll.js b/smartscroll.js index 8362c8a..1840abb 100644 --- a/smartscroll.js +++ b/smartscroll.js @@ -330,9 +330,11 @@ options.eventEmitter.emitEvent('scrollStart', [sectionIndexAtWindowMiddle - 1]); } } else if (scrollAction === 'down') { - scrollToPixel(sections[sectionIndexAtWindowMiddle] + 1, options.animationSpeed); - if (options.eventEmitter) { - options.eventEmitter.emitEvent('scrollStart', [sectionIndexAtWindowMiddle + 1]); + if (sections[sectionIndexAtWindowMiddle]) { + scrollToPixel(sections[sectionIndexAtWindowMiddle] + 1, options.animationSpeed); + if (options.eventEmitter) { + options.eventEmitter.emitEvent('scrollStart', [sectionIndexAtWindowMiddle + 1]); + } } } } From 3263df726bf877f947cf8ddf10c86067afe4626d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B2=D1=8F=D1=82=D0=BE=D1=81=D0=BB=D0=B0=D0=B2=20?= =?UTF-8?q?=D0=9F=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=B5=D0=B2?= Date: Tue, 20 Feb 2018 16:48:58 +0300 Subject: [PATCH 4/4] fixed manual scroll down, add animation speed from option for manual scroll --- smartscroll.js | 4 ++-- smartscroll.min.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/smartscroll.js b/smartscroll.js index 1840abb..3146c67 100644 --- a/smartscroll.js +++ b/smartscroll.js @@ -274,9 +274,9 @@ for (var i = 0; i < sections.length; i += 1) { if (windowTop < sections[i]) { if (down) { - scrollToPixel(sections[i], 700); + scrollToPixel(sections[i] + 1, options.animationSpeed); } else { - scrollToPixel(sections[i - 1] - $(window).height(), 700); + scrollToPixel(sections[i - 1] - $(window).height(), options.animationSpeed); } if (options.eventEmitter) { options.eventEmitter.emitEvent('scrollEnd', [sectionIndexAtWindowMiddle]); diff --git a/smartscroll.min.js b/smartscroll.min.js index 6195f9a..140d9e3 100644 --- a/smartscroll.min.js +++ b/smartscroll.min.js @@ -1 +1 @@ -!function(e){var t,n="mousewheel DOMMouseScroll wheel MozMousePixelScroll";"undefined"!=typeof Lethargy&&null!==Lethargy&&(t=new Lethargy);var i=function(){return Math.max(window.pageYOffset,window.document.body.scrollTop,window.document.documentElement.scrollTop)};e.smartscroll=function(o){var r=e.extend({},e.smartscroll.defaults,o);if(r.sectionSelector||(r.sectionSelector="."+r.sectionClass),("undefined"==typeof EventEmitter||null===EventEmitter||r.eventEmitter&&r.eventEmitter.constructor!==EventEmitter)&&(r.eventEmitter=null),r.bindSwipe)var a=null,l=null,s=function(e){var t=e.originalEvent||e;a=t.touches[0].clientX,l=t.touches[0].clientY},c=function(e){var t=e.originalEvent||e;if(a&&l){var n=t.touches[0].clientX,i=t.touches[0].clientY,o=a-n,s=l-i;Math.abs(o)>Math.abs(s)?o>0?r.eventEmitter.emitEvent("swipeLeft"):r.eventEmitter.emitEvent("swipeRight"):s>0?r.eventEmitter.emitEvent("swipeUp"):r.eventEmitter.emitEvent("swipeDown"),a=null,l=null}};var d,h,u=!1,w=[],v=!1,p=!1,f=window.location.hash,m=e(r.sectionWrapperSelector+":first"),E=function(){var t=[];d=Math.round(m.position().top+parseInt(m.css("paddingTop"),10)+parseInt(m.css("borderTopWidth"),10)+parseInt(m.css("marginTop"),10)),h=Math.round(d+m.height(),10),t.push(d),e(r.sectionSelector).each(function(n,i){t.push(Math.round(d+e(i).position().top+e(i).outerHeight()))}),w=t},g=function(e){for(var t=0;t0||e.originalEvent.detail<0)return"up";if(e.originalEvent.wheelDelta<0||e.originalEvent.detail>0)return"down"}return!1}(n);r.dynamicHeight&&E();var a=i(),l=a+e(window).height();if(l>d&&a<=h){var s=g(a),c=g(a+e(window).height()/2);s===g(l)&&r.innerSectionScroll||(n.preventDefault(),n.stopPropagation(),o&&("up"===o?(r.toptotop?b(w[c-2]+1,r.animationSpeed):b(w[c-1]-e(window).height(),r.animationSpeed),r.eventEmitter&&r.eventEmitter.emitEvent("scrollStart",[c-1])):"down"===o&&(b(w[c]+1,r.animationSpeed),r.eventEmitter&&r.eventEmitter.emitEvent("scrollStart",[c+1]))))}})};if(m.css({position:"relative"}),setTimeout(function(){if(E(),r.autoHash&&(null===r.eventEmitter||r.hashContinuousUpdate?e(window).bind("scroll",S):r.eventEmitter.addListener("scrollEnd",S)),r.initialScroll&&f.length>0){var t=e('[data-hash="'+f.substr(1)+'"]');t.length>0&&b(t[0].offsetTop+d,0)}},50),e(window).bind("resize",E),null!==r.breakpoint&&r.breakpoint===parseInt(r.breakpoint,10)&&r.breakpoint>0&&(v=!0),"vp"===r.mode)if(r.ie8){var k=function(){e(r.sectionSelector).css({height:e(window).height()})};k(),e(window).bind("resize",k)}else e(r.sectionSelector).css({height:"100vh"});if(r.sectionScroll&&(v&&e(window).bind("resize",function(){if(e(window).width()d&&t<=h}()){var l=g(o),s=g(o+e(window).height()/2);if(l!==g(a)||!r.innerSectionScroll)switch(n.which){case 38:n.preventDefault(),n.stopPropagation(),r.toptotop?b(w[s-2]+1,r.animationSpeed):b(w[s-1]-e(window).height(),r.animationSpeed),r.eventEmitter&&r.eventEmitter.emitEvent("scrollStart",[s-1]);break;case 40:n.preventDefault(),n.stopPropagation(),b(w[s]+1,r.animationSpeed),r.eventEmitter&&r.eventEmitter.emitEvent("scrollStart",[s+1])}}})}return this},e.smartscroll.defaults={animationSpeed:700,autoHash:!0,breakpoint:null,initialScroll:!0,headerHash:"header",keepHistory:!1,mode:"vp",sectionClass:"section",sectionSelector:null,sectionScroll:!0,sectionWrapperSelector:".section-wrapper",eventEmitter:null,dynamicHeight:!1,ie8:!1,hashContinuousUpdate:!0,innerSectionScroll:!0,toptotop:!1,bindSwipe:!0,bindKeyboard:!0}}(jQuery); \ No newline at end of file +!function(e){var t,n="mousewheel DOMMouseScroll wheel MozMousePixelScroll";"undefined"!=typeof Lethargy&&null!==Lethargy&&(t=new Lethargy);var i=function(){return Math.max(window.pageYOffset,window.document.body.scrollTop,window.document.documentElement.scrollTop)};e.smartscroll=function(o){var r=e.extend({},e.smartscroll.defaults,o);if(r.sectionSelector||(r.sectionSelector="."+r.sectionClass),("undefined"==typeof EventEmitter||null===EventEmitter||r.eventEmitter&&r.eventEmitter.constructor!==EventEmitter)&&(r.eventEmitter=null),r.bindSwipe)var a=null,l=null,s=function(e){var t=e.originalEvent||e;a=t.touches[0].clientX,l=t.touches[0].clientY},c=function(e){var t=e.originalEvent||e;if(a&&l){var n=t.touches[0].clientX,i=t.touches[0].clientY,o=a-n,s=l-i;Math.abs(o)>Math.abs(s)?o>0?r.eventEmitter.emitEvent("swipeLeft"):r.eventEmitter.emitEvent("swipeRight"):s>0?r.eventEmitter.emitEvent("swipeUp"):r.eventEmitter.emitEvent("swipeDown"),a=null,l=null}};var d,h,u=!1,w=[],v=!1,p=!1,f=window.location.hash,m=e(r.sectionWrapperSelector+":first"),E=function(){var t=[];d=Math.round(m.position().top+parseInt(m.css("paddingTop"),10)+parseInt(m.css("borderTopWidth"),10)+parseInt(m.css("marginTop"),10)),h=Math.round(d+m.height(),10),t.push(d),e(r.sectionSelector).each(function(n,i){t.push(Math.round(d+e(i).position().top+e(i).outerHeight()))}),w=t},g=function(e){for(var t=0;t0||e.originalEvent.detail<0)return"up";if(e.originalEvent.wheelDelta<0||e.originalEvent.detail>0)return"down"}return!1}(n);r.dynamicHeight&&E();var a=i(),l=a+e(window).height();if(l>d&&a<=h){var s=g(a),c=g(a+e(window).height()/2);s===g(l)&&r.innerSectionScroll||(n.preventDefault(),n.stopPropagation(),o&&("up"===o?(r.toptotop?b(w[c-2]+1,r.animationSpeed):b(w[c-1]-e(window).height(),r.animationSpeed),r.eventEmitter&&r.eventEmitter.emitEvent("scrollStart",[c-1])):"down"===o&&w[c]&&(b(w[c]+1,r.animationSpeed),r.eventEmitter&&r.eventEmitter.emitEvent("scrollStart",[c+1]))))}})};if(m.css({position:"relative"}),setTimeout(function(){if(E(),r.autoHash&&(null===r.eventEmitter||r.hashContinuousUpdate?e(window).bind("scroll",S):r.eventEmitter.addListener("scrollEnd",S)),r.initialScroll&&f.length>0){var t=e('[data-hash="'+f.substr(1)+'"]');t.length>0&&b(t[0].offsetTop+d,0)}},50),e(window).bind("resize",E),null!==r.breakpoint&&r.breakpoint===parseInt(r.breakpoint,10)&&r.breakpoint>0&&(v=!0),"vp"===r.mode)if(r.ie8){var k=function(){e(r.sectionSelector).css({height:e(window).height()})};k(),e(window).bind("resize",k)}else e(r.sectionSelector).css({height:"100vh"});if(r.sectionScroll&&(v&&e(window).bind("resize",function(){if(e(window).width()d&&t<=h}()){var l=g(o),s=g(o+e(window).height()/2);if(l!==g(a)||!r.innerSectionScroll)switch(n.which){case 38:n.preventDefault(),n.stopPropagation(),r.toptotop?b(w[s-2]+1,r.animationSpeed):b(w[s-1]-e(window).height(),r.animationSpeed),r.eventEmitter&&r.eventEmitter.emitEvent("scrollStart",[s-1]);break;case 40:n.preventDefault(),n.stopPropagation(),b(w[s]+1,r.animationSpeed),r.eventEmitter&&r.eventEmitter.emitEvent("scrollStart",[s+1])}}})}return this},e.smartscroll.defaults={animationSpeed:700,autoHash:!0,breakpoint:null,initialScroll:!0,headerHash:"header",keepHistory:!1,mode:"vp",sectionClass:"section",sectionSelector:null,sectionScroll:!0,sectionWrapperSelector:".section-wrapper",eventEmitter:null,dynamicHeight:!1,ie8:!1,hashContinuousUpdate:!0,innerSectionScroll:!0,toptotop:!1,bindSwipe:!0,bindKeyboard:!0}}(jQuery); \ No newline at end of file