From 3bab4725d0f34cb00e864fc0a344148ea5ace572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benedikt=20R=C3=B6tsch?= Date: Thu, 20 Oct 2016 12:55:37 +0200 Subject: [PATCH 1/4] feat(sticky): add option to select a different triggering element --- src/shortcuts/sticky.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/shortcuts/sticky.js b/src/shortcuts/sticky.js index 7dc7054a..97bc6093 100644 --- a/src/shortcuts/sticky.js +++ b/src/shortcuts/sticky.js @@ -18,7 +18,7 @@ var originalHandler = this.options.handler this.waypoint = new Waypoint($.extend({}, this.options, { - element: this.wrapper, + element: this.triggerElement || this.wrapper, handler: $.proxy(function(direction) { var shouldBeStuck = this.options.direction.indexOf(direction) > -1 var wrapperHeight = shouldBeStuck ? this.$element.outerHeight(true) : '' @@ -56,7 +56,8 @@ Sticky.defaults = { wrapper: '
', stuckClass: 'stuck', - direction: 'down right' + direction: 'down right', + triggerElement: false } Waypoint.Sticky = Sticky From 073295c1ec91a7227652b8b5e80ed61e98df0894 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benedikt=20R=C3=B6tsch?= Date: Thu, 20 Oct 2016 13:36:26 +0200 Subject: [PATCH 2/4] test(sticky): add test for new triggerElement option --- test/fixtures/sticky.html | 8 +++++++- test/sticky-spec.js | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/test/fixtures/sticky.html b/test/fixtures/sticky.html index 6084e7c7..09acbd2d 100644 --- a/test/fixtures/sticky.html +++ b/test/fixtures/sticky.html @@ -1,10 +1,12 @@
+
\ No newline at end of file + .triggerElement { + position: absolute; + top: 1000px; + } + diff --git a/test/sticky-spec.js b/test/sticky-spec.js index b6128a0b..da032445 100644 --- a/test/sticky-spec.js +++ b/test/sticky-spec.js @@ -7,11 +7,12 @@ describe('Waypoint Sticky Shortcut', function() { var $ = window.jQuery var $scroller = $(window) - var $sticky, waypoint, handlerSpy + var $sticky, $triggerElement, waypoint, handlerSpy beforeEach(function() { loadFixtures('sticky.html') $sticky = $('.sticky') + $triggerElement = $('.triggerElement') }) describe('with default options', function() { @@ -114,4 +115,39 @@ describe('Waypoint Sticky Shortcut', function() { expect(parent).toBe(waypoint.wrapper) }) }) + + describe('with triggerElement', function() { + beforeEach(function() { + waypoint = new Waypoint.Sticky({ + element: $sticky[0], + handler: handlerSpy, + triggerElement: $triggerElement[0] + }) + // $scroller.scrollTop(0) + }) + afterEach(function() { + waypoint.destroy() + }) + + it('does not stick the element on init', function() { + expect($sticky).not.toHaveClass('stuck') + }) + + it('when scrolling', function() { + runs(function() { + var rect = $triggerElement[0].getBoundingClientRect(); + $scroller.scrollTop($triggerElement.offset().top) + }) + waitsFor(function() { + var rect = $triggerElement[0].getBoundingClientRect(); + return $sticky.hasClass('stuck') + }, 'gets stuck at triggerElement') + runs(function() { + $scroller.scrollTop(0) + }) + waitsFor(function() { + return !$sticky.hasClass('stuck') + }, 'gets unstuck when scrolling back to top') + }) + }) }) From 55a4273ffd4d79c3e7dc2b0d098c717bfc94bfda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benedikt=20R=C3=B6tsch?= Date: Thu, 20 Oct 2016 14:38:06 +0200 Subject: [PATCH 3/4] use correct triggerElement option --- src/shortcuts/sticky.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shortcuts/sticky.js b/src/shortcuts/sticky.js index 97bc6093..607509b5 100644 --- a/src/shortcuts/sticky.js +++ b/src/shortcuts/sticky.js @@ -18,7 +18,7 @@ var originalHandler = this.options.handler this.waypoint = new Waypoint($.extend({}, this.options, { - element: this.triggerElement || this.wrapper, + element: this.options.triggerElement || this.wrapper, handler: $.proxy(function(direction) { var shouldBeStuck = this.options.direction.indexOf(direction) > -1 var wrapperHeight = shouldBeStuck ? this.$element.outerHeight(true) : '' From f666b6839fbdd261f3427072486e6e16a7c2df79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benedikt=20R=C3=B6tsch?= Date: Thu, 20 Oct 2016 14:48:47 +0200 Subject: [PATCH 4/4] clean up and fix tests --- test/sticky-spec.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/test/sticky-spec.js b/test/sticky-spec.js index da032445..70c74fb8 100644 --- a/test/sticky-spec.js +++ b/test/sticky-spec.js @@ -120,34 +120,26 @@ describe('Waypoint Sticky Shortcut', function() { beforeEach(function() { waypoint = new Waypoint.Sticky({ element: $sticky[0], - handler: handlerSpy, triggerElement: $triggerElement[0] }) - // $scroller.scrollTop(0) }) afterEach(function() { waypoint.destroy() }) - it('does not stick the element on init', function() { - expect($sticky).not.toHaveClass('stuck') - }) - it('when scrolling', function() { runs(function() { - var rect = $triggerElement[0].getBoundingClientRect(); $scroller.scrollTop($triggerElement.offset().top) }) waitsFor(function() { - var rect = $triggerElement[0].getBoundingClientRect(); return $sticky.hasClass('stuck') }, 'gets stuck at triggerElement') runs(function() { - $scroller.scrollTop(0) + $scroller.scrollTop($triggerElement.offset().top - 1) }) waitsFor(function() { return !$sticky.hasClass('stuck') - }, 'gets unstuck when scrolling back to top') + }, 'gets unstuck when scrolling back') }) }) })