toc.js: fix wrong link being highlighted when page length changes dynamically

- from https://github.com/jgallen23/toc/pull/48
This commit is contained in:
Matthias Kretschmann 2016-03-12 19:25:24 +01:00
parent 5580ae658d
commit 866e504a82
1 changed files with 13 additions and 5 deletions

View File

@ -59,9 +59,17 @@
var container = $(opts.container);
var headings = $(opts.selectors, container);
var headingOffsets = [];
var activeClassName = opts.activeClass;
var headingOffsets = function() {
var offsets = [];
headings.each(function(i, heading) {
var $h = $(heading);
offsets.push($h.offset().top - opts.highlightOffset);
});
return offsets;
};
var scrollTo = function(e, callback) {
if (opts.smoothScrolling && typeof opts.smoothScrolling === 'function') {
e.preventDefault();
@ -82,10 +90,11 @@
timeout = setTimeout(function() {
var top = $(window).scrollTop(),
highlighted, closest = Number.MAX_VALUE,
index = 0;
index = 0
offsets = headingOffsets();
for (var i = 0, c = headingOffsets.length; i < c; i++) {
var currentClosest = Math.abs(headingOffsets[i] - top);
for (var i = 0, c = offsets.length; i < c; i++) {
var currentClosest = Math.abs(offsets[i] - top);
if (currentClosest < closest) {
index = i;
closest = currentClosest;
@ -109,7 +118,6 @@
headings.each(function(i, heading) {
var $h = $(heading);
headingOffsets.push($h.offset().top - opts.highlightOffset);
var anchorName = opts.anchorName(i, heading, opts.prefix);