diff options
| author | fat <[email protected]> | 2014-06-10 17:37:40 -0700 |
|---|---|---|
| committer | fat <[email protected]> | 2014-06-10 17:38:42 -0700 |
| commit | 571fd32bcee3d069d5f30167a887b47efd492f01 (patch) | |
| tree | be5968a96cabe313d8e4acf934bb3cbf4c14c18a | |
| parent | 8d8524e5946fbc72e15cd206423e5ff1b10d6b2f (diff) | |
| download | bootstrap-571fd32bcee3d069d5f30167a887b47efd492f01.tar.xz bootstrap-571fd32bcee3d069d5f30167a887b47efd492f01.zip | |
fix #13220 Scrollspy generates wrong offsets for a page-- recalculate offsets if `scrollheight` changes
| -rw-r--r-- | js/scrollspy.js | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/js/scrollspy.js b/js/scrollspy.js index 78858680e..fe8fbc682 100644 --- a/js/scrollspy.js +++ b/js/scrollspy.js @@ -27,6 +27,7 @@ this.offsets = [] this.targets = [] this.activeTarget = null + this.scrollHeight = 0 this.$scrollElement.on('scroll.bs.scrollspy', process) this.refresh() @@ -39,6 +40,10 @@ offset: 10 } + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + ScrollSpy.prototype.refresh = function () { var offsetMethod = 'offset' var offsetBase = 0 @@ -50,6 +55,7 @@ this.offsets = [] this.targets = [] + this.scrollHeight = this.getScrollHeight() var self = this @@ -74,13 +80,17 @@ 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 scrollHeight = this.getScrollHeight() var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() var offsets = this.offsets var targets = this.targets var activeTarget = this.activeTarget var i + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + if (scrollTop >= maxScroll) { return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) } |
