API
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
/* ============================================================================
|
||||
SoftSPM - wejście bloków i liczniki
|
||||
Delikatne pojawianie się sekcji przy przewijaniu oraz naliczanie liczb
|
||||
w pasku Akademii. Wszystko wyłącza się przy prefers-reduced-motion,
|
||||
a bez JavaScriptu treść i tak jest widoczna - styl startowy nakładamy
|
||||
dopiero po dodaniu klasy js-reveal.
|
||||
========================================================================= */
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var supported = 'IntersectionObserver' in window && 'classList' in document.documentElement;
|
||||
var reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
||||
|
||||
if (!supported || reduced) {
|
||||
return;
|
||||
}
|
||||
|
||||
document.documentElement.classList.add('js-reveal');
|
||||
|
||||
function countUp(node) {
|
||||
var target = parseInt(node.getAttribute('data-count'), 10);
|
||||
if (isNaN(target)) { return; }
|
||||
var suffix = node.getAttribute('data-suffix') || '';
|
||||
var duration = 900;
|
||||
var started = null;
|
||||
|
||||
function step(now) {
|
||||
if (started === null) { started = now; }
|
||||
var progress = Math.min(1, (now - started) / duration);
|
||||
// wyhamowanie na końcu - liczba dobija do wartości, nie przeskakuje
|
||||
var eased = 1 - Math.pow(1 - progress, 3);
|
||||
node.textContent = Math.round(target * eased) + suffix;
|
||||
if (progress < 1) { requestAnimationFrame(step); }
|
||||
}
|
||||
|
||||
node.textContent = '0' + suffix;
|
||||
requestAnimationFrame(step);
|
||||
}
|
||||
|
||||
var observer = new IntersectionObserver(function (entries) {
|
||||
for (var i = 0; i < entries.length; i++) {
|
||||
var entry = entries[i];
|
||||
if (!entry.isIntersecting) { continue; }
|
||||
var node = entry.target;
|
||||
node.classList.add('is-in');
|
||||
observer.unobserve(node);
|
||||
|
||||
var counters = node.querySelectorAll('[data-count]');
|
||||
for (var c = 0; c < counters.length; c++) { countUp(counters[c]); }
|
||||
}
|
||||
}, { rootMargin: '0px 0px -12% 0px', threshold: 0.12 });
|
||||
|
||||
var blocks = document.querySelectorAll('[data-reveal]');
|
||||
for (var i = 0; i < blocks.length; i++) { observer.observe(blocks[i]); }
|
||||
})();
|
||||
Reference in New Issue
Block a user