diff options
| author | Chris Rebert <[email protected]> | 2014-05-23 14:36:05 -0700 |
|---|---|---|
| committer | Chris Rebert <[email protected]> | 2014-05-23 14:36:05 -0700 |
| commit | 475dbe58b03c214d973d50ba1fb48fba325cfd85 (patch) | |
| tree | cadfaa9a37d5500734e60ab12c7537700bbd86a1 | |
| parent | bc1ce426d9dc831f5363369de723ef328e71f297 (diff) | |
| parent | c2e94eba8da462ba8cacbc1558f7fdf6b3e28007 (diff) | |
| download | bootstrap-475dbe58b03c214d973d50ba1fb48fba325cfd85.tar.xz bootstrap-475dbe58b03c214d973d50ba1fb48fba325cfd85.zip | |
Merge pull request #13589 from mrobinet/scrollspy-maxScroll-with-offset
Adjust for Scrollspy offset when calculating maxScroll.
| -rw-r--r-- | js/scrollspy.js | 2 | ||||
| -rw-r--r-- | js/tests/unit/scrollspy.js | 38 |
2 files changed, 37 insertions, 3 deletions
diff --git a/js/scrollspy.js b/js/scrollspy.js index 74e016dc9..53e1c48ba 100644 --- a/js/scrollspy.js +++ b/js/scrollspy.js @@ -69,7 +69,7 @@ ScrollSpy.prototype.process = function () { var scrollTop = this.$scrollElement.scrollTop() + this.options.offset var scrollHeight = this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) - var maxScroll = scrollHeight - this.$scrollElement.height() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() var offsets = this.offsets var targets = this.targets var activeTarget = this.activeTarget diff --git a/js/tests/unit/scrollspy.js b/js/tests/unit/scrollspy.js index 90c95d769..9a00221fd 100644 --- a/js/tests/unit/scrollspy.js +++ b/js/tests/unit/scrollspy.js @@ -42,7 +42,8 @@ $(function () { ok($topbar.find('.active', true)) }) - test('should only switch active class on current target', function () { + asyncTest('should only switch active class on current target', function () { + expect(1); var sectionHTML = '<div id="root" class="active">' + '<div class="topbar">' + '<div class="topbar-inner">' + @@ -75,7 +76,40 @@ $(function () { .find('#scrollspy-example') .bootstrapScrollspy({target: '#ss-target'}) + $scrollSpy.on('scroll.bs.scrollspy', function () { + ok($section.hasClass('active'), 'Active class still on root node') + start() + }) $scrollSpy.scrollTop(350); - ok($section.hasClass('active'), 'Active class still on root node') + }) + + asyncTest('middle navigation option correctly selected when large offset is used', function () { + expect(3); + var sectionHTML = '<div id="header" style="height: 500px;"></div>' + + '<nav id="navigation" class="navbar">' + + '<ul class="nav navbar-nav">' + + '<li class="active"><a id="one-link" href="#one">One</a></li>' + + '<li><a id="two-link" href="#two">Two</a></li>' + + '<li><a id="three-link" href="#three">Three</a></li>' + + '</ul>' + + '</nav>' + + '<div id="content" style="height: 200px; overflow-y: auto;">' + + '<div id="one" style="height: 500px;"></div>' + + '<div id="two" style="height: 300px;"></div>' + + '<div id="three" style="height: 10px;"></div>' + + '</div>', + $section = $(sectionHTML).appendTo('#qunit-fixture'), + $scrollSpy = $section + .show() + .filter('#content') + $scrollSpy.bootstrapScrollspy({target: '#navigation', offset: $scrollSpy.position().top}) + + $scrollSpy.on('scroll.bs.scrollspy', function () { + ok(!$section.find('#one-link').parent().hasClass('active'), 'Active class removed from first section') + ok($section.find('#two-link').parent().hasClass('active'), 'Active class on middle section') + ok(!$section.find('#three-link').parent().hasClass('active'), 'Active class not on last section') + start() + }) + $scrollSpy.scrollTop(550); }) }) |
