aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfat <[email protected]>2014-06-10 17:37:40 -0700
committerfat <[email protected]>2014-06-10 17:38:42 -0700
commit571fd32bcee3d069d5f30167a887b47efd492f01 (patch)
treebe5968a96cabe313d8e4acf934bb3cbf4c14c18a
parent8d8524e5946fbc72e15cd206423e5ff1b10d6b2f (diff)
downloadbootstrap-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.js12
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)
}