mirror of
https://github.com/webslides/WebSlides.git
synced 2025-08-23 21:33:09 +02:00
kss - content organization
This commit is contained in:
@@ -1,147 +0,0 @@
|
||||
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
function ScrollSpy (wrapper, opt) {
|
||||
|
||||
this.doc = document;
|
||||
this.wrapper = (typeof wrapper === 'string') ? this.doc.querySelector(wrapper) : wrapper;
|
||||
this.nav = this.wrapper.querySelectorAll(opt.nav);
|
||||
|
||||
this.contents = [];
|
||||
this.win = window;
|
||||
|
||||
this.winH = this.win.innerHeight;
|
||||
|
||||
this.className = opt.className;
|
||||
|
||||
this.callback = opt.callback;
|
||||
|
||||
this.init();
|
||||
}
|
||||
|
||||
ScrollSpy.prototype.init = function () {
|
||||
this.contents = this.getContents();
|
||||
this.attachEvent();
|
||||
};
|
||||
|
||||
ScrollSpy.prototype.getContents = function () {
|
||||
var targetList = [];
|
||||
|
||||
for (var i = 0, max = this.nav.length; i < max; i++) {
|
||||
var href = this.nav[i].href;
|
||||
|
||||
targetList.push(this.doc.getElementById(href.split('#')[1]));
|
||||
}
|
||||
|
||||
return targetList;
|
||||
};
|
||||
|
||||
ScrollSpy.prototype.attachEvent = function () {
|
||||
this.win.addEventListener('load', (function () {
|
||||
this.spy(this.callback);
|
||||
}).bind(this));
|
||||
|
||||
|
||||
var scrollingTimer;
|
||||
|
||||
this.win.addEventListener('scroll', (function () {
|
||||
if (scrollingTimer) {
|
||||
clearTimeout(scrollingTimer);
|
||||
}
|
||||
|
||||
var _this = this;
|
||||
|
||||
scrollingTimer = setTimeout(function () {
|
||||
_this.spy(_this.callback);
|
||||
}, 10);
|
||||
}).bind(this));
|
||||
|
||||
|
||||
var resizingTimer;
|
||||
|
||||
this.win.addEventListener('resize', (function () {
|
||||
if (resizingTimer) {
|
||||
clearTimeout(resizingTimer);
|
||||
}
|
||||
|
||||
var _this = this;
|
||||
|
||||
resizingTimer = setTimeout(function () {
|
||||
_this.spy(_this.callback);
|
||||
}, 10);
|
||||
}).bind(this));
|
||||
};
|
||||
|
||||
ScrollSpy.prototype.spy = function (cb) {
|
||||
var elems = this.getElemsViewState();
|
||||
|
||||
this.markNav(elems);
|
||||
|
||||
if (typeof cb === 'function') {
|
||||
cb(elems);
|
||||
}
|
||||
};
|
||||
|
||||
ScrollSpy.prototype.getElemsViewState = function () {
|
||||
var elemsInView = [],
|
||||
elemsOutView = [],
|
||||
viewStatusList = [];
|
||||
|
||||
for (var i = 0, max = this.contents.length; i < max; i++) {
|
||||
var currentContent = this.contents[i],
|
||||
isInView = this.isInView(currentContent);
|
||||
|
||||
if (isInView) {
|
||||
elemsInView.push(currentContent);
|
||||
} else {
|
||||
elemsOutView.push(currentContent);
|
||||
}
|
||||
viewStatusList.push(isInView);
|
||||
}
|
||||
|
||||
return {
|
||||
inView: elemsInView,
|
||||
outView: elemsOutView,
|
||||
viewStatusList: viewStatusList
|
||||
};
|
||||
};
|
||||
|
||||
ScrollSpy.prototype.isInView = function (el) {
|
||||
var winH = this.winH,
|
||||
scrollTop = this.doc.documentElement.scrollTop || this.doc.body.scrollTop,
|
||||
scrollBottom = scrollTop + winH,
|
||||
rect = el.getBoundingClientRect(),
|
||||
elTop = rect.top + scrollTop,
|
||||
elBottom = elTop + el.offsetHeight;
|
||||
|
||||
return (elTop < scrollBottom) && (elBottom > scrollTop);
|
||||
};
|
||||
|
||||
ScrollSpy.prototype.markNav = function (elems) {
|
||||
var navItems = this.nav,
|
||||
isAlreadyMarked = false;
|
||||
|
||||
for (var i = 0, max = navItems.length; i < max; i++) {
|
||||
if (elems.viewStatusList[i] && !isAlreadyMarked) {
|
||||
isAlreadyMarked = true;
|
||||
navItems[i].classList.add(this.className);
|
||||
} else {
|
||||
navItems[i].classList.remove(this.className);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
module.exports = ScrollSpy;
|
||||
|
||||
},{}],2:[function(require,module,exports){
|
||||
(function (global){
|
||||
/**
|
||||
* ScrollSpy
|
||||
*
|
||||
*/
|
||||
|
||||
var ScrollSpy = require('./modules/scrollspy');
|
||||
|
||||
global.ScrollSpy = module.exports = ScrollSpy;
|
||||
|
||||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
||||
},{"./modules/scrollspy":1}]},{},[2]);
|
Reference in New Issue
Block a user