diff options
| author | Mark Otto <[email protected]> | 2016-11-27 22:29:33 -0800 |
|---|---|---|
| committer | Mark Otto <[email protected]> | 2016-11-27 22:29:33 -0800 |
| commit | 5db88075c1dbdf55f2ae4a11d79bd2c3b8d65d43 (patch) | |
| tree | 2590d95f94a7ec3933fcf70a8acbcc31aef13fd6 /js | |
| parent | 1562a2db4ca973c56e8d353f98ea85bd9ef81329 (diff) | |
| parent | 54908a95a87b592d81df3231823979c75917d57a (diff) | |
| download | bootstrap-5db88075c1dbdf55f2ae4a11d79bd2c3b8d65d43.tar.xz bootstrap-5db88075c1dbdf55f2ae4a11d79bd2c3b8d65d43.zip | |
Merge branch 'v4-dev' of https://github.com/twbs/bootstrap into v4-dev
Diffstat (limited to 'js')
| -rw-r--r-- | js/src/scrollspy.js | 2 | ||||
| -rw-r--r-- | js/tests/unit/scrollspy.js | 44 |
2 files changed, 45 insertions, 1 deletions
diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js index 9b39acd36..9cb1438ca 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -221,7 +221,7 @@ const ScrollSpy = (($) => { return } - if (this._activeTarget && scrollTop < this._offsets[0]) { + if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { this._activeTarget = null this._clear() return diff --git a/js/tests/unit/scrollspy.js b/js/tests/unit/scrollspy.js index a349b5337..877ec67a2 100644 --- a/js/tests/unit/scrollspy.js +++ b/js/tests/unit/scrollspy.js @@ -287,6 +287,50 @@ $(function () { .scrollTop(201) }) + QUnit.test('should NOT clear selection if above the first section and first section is at the top', function (assert) { + assert.expect(4) + var done = assert.async() + + var sectionHTML = '<div id="header" style="height: 500px;"></div>' + + '<nav id="navigation" class="navbar">' + + '<ul class="nav navbar-nav">' + + '<li><a id="one-link" class="nav-link active" href="#one">One</a></li>' + + '<li><a id="two-link" class="nav-link" href="#two">Two</a></li>' + + '<li><a id="three-link" class="nav-link" href="#three">Three</a></li>' + + '</ul>' + + '</nav>' + $(sectionHTML).appendTo('#qunit-fixture') + + var negativeHeight = -10 + var startOfSectionTwo = 101 + + var scrollspyHTML = '<div id="content" style="height: 200px; overflow-y: auto;">' + + '<div id="one" style="height: 100px;"/>' + + '<div id="two" style="height: 100px;"/>' + + '<div id="three" style="height: 100px;"/>' + + '<div id="spacer" style="height: 100px;"/>' + + '</div>' + var $scrollspy = $(scrollspyHTML).appendTo('#qunit-fixture') + + $scrollspy + .bootstrapScrollspy({ + target: '#navigation', + offset: $scrollspy.position().top + }) + .one('scroll', function () { + assert.strictEqual($('.active').length, 1, '"active" class on only one element present') + assert.strictEqual($('.active').is('#two-link'), true, '"active" class on second section') + $scrollspy + .one('scroll', function () { + assert.strictEqual($('.active').length, 1, '"active" class on only one element present') + assert.strictEqual($('.active').is('#one-link'), true, '"active" class on first section') + done() + }) + .scrollTop(negativeHeight) + }) + .scrollTop(startOfSectionTwo) + }) + QUnit.test('should correctly select navigation element on backward scrolling when each target section height is 100%', function (assert) { assert.expect(5) var navbarHtml = |
