No edit summary Tag: Manual revert |
No edit summary Tag: Reverted |
||
Line 104: | Line 104: | ||
startImageRotation(); // Start the initial rotation | startImageRotation(); // Start the initial rotation | ||
}; | }; | ||
$(function() { | |||
$(this).impulse(); | |||
$('#container').impulse({effect: 'easeOutBack', fluid: false}); | |||
}); | |||
// ataredo.com/morphology/lucidscroll - documentation | |||
(function($, nib) { | |||
$.fn.impulse = function(options) { | |||
var set = $.extend({}, $.fn.impulse.default, options), gate = $(nib), | |||
vessel = this, object = $(set.target), area = {}, edge = [], | |||
fad = {}, entity, brink = [], outset = [], quit = [], morph, | |||
way, speed, destined = [], pour = 'requestAnimationFrame', | |||
use = $.extend({novel: pour in nib, turned: 0}, set); | |||
elementAnalysis(); | |||
vessel.each(function(hit) { | |||
use = $.extend({}, use); | |||
$(this).data('impulse', use).on('wheel.excite', function(act, info) { | |||
if (!use.keen && !act.mien) return; | |||
if (act.mien) { | |||
fad = $.extend({}, use, info); | |||
use.annul = fad.delay == true; | |||
var loom = act.mien; | |||
fad.fluid = false; | |||
} | |||
else { | |||
if (use.annul) return; | |||
fad = use; | |||
loom = act.originalEvent.deltaY; | |||
} | |||
loom = loom/Math.abs(loom); | |||
if (use.crux) { | |||
entity = $(this); | |||
brink[0] = edge[hit]; | |||
} | |||
else { | |||
entity = object; | |||
brink = edge; | |||
} | |||
$.each({range: 'orbit', tempo: 'pace'}, function(slot, mate) { | |||
if (typeof fad[slot] === 'function') fad[mate] = fad[slot](); | |||
else fad[mate] = fad[slot]; | |||
}); | |||
if (loom != use.zeal || act.mien) use.turned = 1; | |||
else use.turned = Math.min(use.curb, use.turned+1); | |||
if (!fad.delay && fad.fluid && use.turned == 1) morph = 'curve'; | |||
else morph = fad.effect; | |||
way = loom*fad.orbit*Math.pow(use.leap, use.turned-1); | |||
speed = fad.pace*Math.pow(use.sloth, use.turned-1) || 1; | |||
use.zeal = loom; | |||
entity.each(function(part) { | |||
outset[part] = $(this).scrollTop(); | |||
destined[part] = outset[part]+way; | |||
quit[part] = onFringe(this, part, outset[part]); | |||
}); | |||
use.waive = ceaseOperation(); | |||
if (!way) speed = 1; | |||
if (use.novel) { | |||
if (use.motion) { | |||
cancelAnimationFrame(use.motion); | |||
use.initial = use.present; | |||
} | |||
else use.initial = Date.now(); | |||
use.motion = nib[pour](streamCore); | |||
} | |||
else inciteSource(); | |||
}); | |||
this.addEventListener('wheel', function(tick) { | |||
if (!use.keen) return; | |||
if (use.annul) return denyRise(tick); | |||
else if (fad.delay == true && !use.waive) use.annul = true; | |||
if (!(use.waive && use.occur)) denyRise(tick); | |||
}, hasQuiet() ? {passive: false} : false); | |||
}); | |||
$.easing['curve'] = $.easing['easeInOutSine']; | |||
gate.resize(function() { | |||
clearTimeout(use.bound); | |||
use.bound = setTimeout(detectOverflow, 100); | |||
}); | |||
return this; | |||
function streamCore() { | |||
use.present = Date.now(); | |||
var advance = Math.min(use.present-use.initial, speed)/speed, | |||
increase = $.easing[morph](advance); | |||
entity.each(function(key) { | |||
if (!quit[key]) { | |||
$(this).scrollTop(outset[key]+increase*way); | |||
checkLimits(this, key, advance); | |||
} | |||
}); | |||
if (advance < 1 && !use.waive) use.motion = nib[pour](streamCore); | |||
else hindStage(); | |||
} | |||
function inciteSource() { | |||
entity.each(function(beat) { | |||
if (!quit[beat]) { | |||
$(this).stop().animate({scrollTop: destined[beat]}, { | |||
duration: speed, | |||
easing: morph, | |||
progress: function(current, sequence) { | |||
checkLimits(this, beat, sequence); | |||
}, | |||
complete: hindStage | |||
}); | |||
} | |||
}); | |||
} | |||
function checkLimits(essence, rank, factor) { | |||
if (100*factor >= fad.reset) use.turned = 0; | |||
if (onFringe(essence, rank)) { | |||
quit[rank] = true; | |||
if (!use.novel) $(essence).stop(true, true); | |||
use.waive = ceaseOperation(); | |||
} | |||
} | |||
function onFringe(matter, cue, genesis) { | |||
var put = Math.round(genesis || $(matter).scrollTop()), | |||
above = destined[cue] < 0 && !put, | |||
below = destined[cue] > brink[cue] && put == brink[cue] && fad.orbit > 0; | |||
return above || below; | |||
} | |||
function ceaseOperation() { | |||
return quit.every(function(flag) {return flag}); | |||
} | |||
function hindStage() { | |||
use.turned = use.annul = use.motion = 0; | |||
} | |||
function denyRise(jab) { | |||
jab.preventDefault(); | |||
jab.stopPropagation(); | |||
} | |||
function elementAnalysis() { | |||
var item = $(); | |||
if (!object.length) { | |||
use.crux = true; | |||
object = vessel; | |||
} | |||
object.each(function() { | |||
if ($.zenith(this)) { | |||
if (!use.main) { | |||
if (use.novel) use.main = nib; | |||
else use.main = baseTag(); | |||
item = item.add(use.main); | |||
} | |||
} | |||
else item = item.add(this); | |||
}); | |||
use.target = object = item; | |||
object.each(function(zest) { | |||
if ($.zenith(this)) area[zest] = 'hub'; | |||
else area[zest] = 'sub'; | |||
}); | |||
if (use.crux && use.main) vessel = object; | |||
detectOverflow(); | |||
} | |||
function baseTag() { | |||
var origin = gate.scrollTop(); | |||
gate.scrollTop(1); | |||
if ($('html').scrollTop()) var root = 'html'; | |||
else if ($('body').scrollTop()) root = 'body'; | |||
else root = 'html, body'; | |||
gate.scrollTop(origin); | |||
return root; | |||
} | |||
function detectOverflow() { | |||
object.each(function(peg) { | |||
if (area[peg] == 'hub') var teem = $(document).height()-gate.height(); | |||
else teem = this.scrollHeight-$(this).height(); | |||
edge[peg] = Math.round(teem); | |||
}); | |||
} | |||
function hasQuiet() { | |||
var cold = false, | |||
hike = function() {}; | |||
try { | |||
var aid = Object.defineProperty({}, 'passive', { | |||
get: function() {cold = true} | |||
}); | |||
nib.addEventListener('test', hike, aid); | |||
nib.removeEventListener('test', hike, aid); | |||
} catch(e) {} | |||
return cold; | |||
} | |||
}; | |||
$.zenith = function(sample) { | |||
var peak = [nib,document,'HTML','BODY'], facet; | |||
if (sample) return peak.indexOf(sample) > -1 || peak.indexOf(sample.tagName) > -1; | |||
$.each(peak, function(spot, detail) { | |||
facet = $(detail).data('impulse'); | |||
if (facet) return false; | |||
}); | |||
return facet; | |||
}; | |||
$.fn.impulse.default = { | |||
target: '', | |||
range: 135, | |||
leap: 1.35, | |||
tempo: 500, | |||
sloth: 1.1, | |||
curb: 5, | |||
reset: 85, | |||
effect: 'easeOutSine', | |||
keen: true, | |||
delay: false, | |||
occur: true, | |||
fluid: true | |||
}; | |||
$.fn.demit = function() { | |||
return this.each(function() { | |||
if ($.zenith(this)) var habit = $.zenith(); | |||
else habit = $(this).data('impulse'); | |||
if (habit) { | |||
if (habit.novel) cancelAnimationFrame(habit.motion); | |||
else habit.target.stop(); | |||
habit.turned = habit.annul = habit.motion = 0; | |||
} | |||
}); | |||
}; | |||
$.fn.amend = function(gist) { | |||
return this.each(function() { | |||
if ($.zenith(this)) var quirk = $.zenith(); | |||
else quirk = $(this).data('impulse'); | |||
if (quirk) { | |||
$.each(gist, function(sign, rate) { | |||
if (sign in quirk) quirk[sign] = rate; | |||
}); | |||
} | |||
}); | |||
}; | |||
$.fn.evoke = function(unit) { | |||
var lot = $.Event('wheel.excite', {mien: true}), bulk; | |||
return this.each(function() { | |||
if ($.zenith(this)) { | |||
if (!bulk) { | |||
bulk = $.zenith(); | |||
if (bulk) $(bulk.main).trigger(lot, unit); | |||
} | |||
} | |||
else $(this).trigger(lot, unit); | |||
}); | |||
}; | |||
}(jQuery, window)); | |||
(function($){var b={};$.each(['Quad','Cubic','Quart','Quint','Expo'],function(i,n){b[n]=function(p){return Math.pow(p,i+2)}});$.extend(b,{Sine:function(p){return 1-Math.cos(p*Math.PI/2)},Circ:function(p){return 1-Math.sqrt(1-p*p)},Elastic:function(p){return p===0||p===1?p:-Math.pow(2,8*(p-1))*Math.sin(((p-1)*80-7.5)*Math.PI/15)},Back:function(p){return p*p*(3*p-2)},Bounce:function(p){var f,h=4;while(p<((f=Math.pow(2,--h))-1)/11){}return (1/Math.pow(4,3-h)-7.5625*Math.pow((f*3-2)/22-p,2))}});$.each(b,function(n,e){$.easing['easeIn'+n]=e;$.easing['easeOut'+n]=function(p){return 1-e(1-p)};$.easing['easeInOut'+n]=function(p){return p<0.5?e(p*2)/2:1-e(p*-2+2)/2}})})(jQuery); |
Revision as of 14:20, 1 February 2024
/* Any JavaScript here will be loaded for all users on every page load. */ var coll = document.getElementsByClassName("collapsible"); var i; for (i = 0; i < coll.length; i++) { coll[i].addEventListener("click", function() { this.classList.toggle("active"); var content = this.nextElementSibling; $(content).toggle('fast'); }); } var imageRotationTimeout; // Declare this variable globally var loading = true; function setMainImage(imageHtml) { var mainImageDiv = document.querySelector('.mainImage'); // Apply the blink effect mainImageDiv.classList.add('blink'); // Delay the image update to allow the blink effect to be visible setTimeout(function() { // Set new image HTML and loading bar mainImageDiv.innerHTML = imageHtml + '<div class="loadingBar"></div>'; resetAndStartLoadingBar(); // Remove the blink class after the animation ends setTimeout(function() { mainImageDiv.classList.remove('blink'); }, 500); // Duration of the blink animation in milliseconds }, 250); // Short delay before updating the image } function toggleLoadingBarVisibility() { loading = false; var loadingBar = document.querySelector('.loadingBar'); if (loadingBar) { var isHidden = loadingBar.style.display === 'none'; loadingBar.style.display = isHidden ? 'block' : 'none'; } } function addClickEventToImages() { var images = document.querySelectorAll('.carousel .dpImage'); images.forEach(function(image, index) { image.addEventListener('click', function() { // Cancel auto rotation clearTimeout(imageRotationTimeout); // Hide the loading bar by setting its display to 'none' toggleLoadingBarVisibility(); // Set clicked image as main image setMainImage(this.innerHTML); }); }); } var lastSelectedIndex = -1; var currentIndex = 0; var rotationInterval = 10000; // 10 seconds var imageRotationTimeout; function getNextIndex(imagesLength) { var nextIndex; do { nextIndex = Math.floor(Math.random() * imagesLength); } while (nextIndex === lastSelectedIndex); return nextIndex; } function startImageRotation() { var images = document.querySelectorAll('.carousel .dpImage'); currentIndex = getNextIndex(images.length); setMainImage(images[currentIndex].innerHTML); lastSelectedIndex = currentIndex; resetAndStartLoadingBar(); // Schedule the next rotation imageRotationTimeout = setTimeout(startImageRotation, rotationInterval); } function resetAndStartLoadingBar() { if(loading) { var loadingBar = document.querySelector('.loadingBar'); loadingBar.style.transition = 'none'; // Disable transition loadingBar.style.width = '0%'; // Reset the width immediately setTimeout(function() { loadingBar.style.transition = 'width ' + rotationInterval + 'ms linear'; loadingBar.style.width = '100%'; // Start the transition }, 10); // Small delay to allow for width reset } } // Initialize window.onload = function() { addClickEventToImages(); startImageRotation(); // Start the initial rotation }; $(function() { $(this).impulse(); $('#container').impulse({effect: 'easeOutBack', fluid: false}); }); // ataredo.com/morphology/lucidscroll - documentation (function($, nib) { $.fn.impulse = function(options) { var set = $.extend({}, $.fn.impulse.default, options), gate = $(nib), vessel = this, object = $(set.target), area = {}, edge = [], fad = {}, entity, brink = [], outset = [], quit = [], morph, way, speed, destined = [], pour = 'requestAnimationFrame', use = $.extend({novel: pour in nib, turned: 0}, set); elementAnalysis(); vessel.each(function(hit) { use = $.extend({}, use); $(this).data('impulse', use).on('wheel.excite', function(act, info) { if (!use.keen && !act.mien) return; if (act.mien) { fad = $.extend({}, use, info); use.annul = fad.delay == true; var loom = act.mien; fad.fluid = false; } else { if (use.annul) return; fad = use; loom = act.originalEvent.deltaY; } loom = loom/Math.abs(loom); if (use.crux) { entity = $(this); brink[0] = edge[hit]; } else { entity = object; brink = edge; } $.each({range: 'orbit', tempo: 'pace'}, function(slot, mate) { if (typeof fad[slot] === 'function') fad[mate] = fad[slot](); else fad[mate] = fad[slot]; }); if (loom != use.zeal || act.mien) use.turned = 1; else use.turned = Math.min(use.curb, use.turned+1); if (!fad.delay && fad.fluid && use.turned == 1) morph = 'curve'; else morph = fad.effect; way = loom*fad.orbit*Math.pow(use.leap, use.turned-1); speed = fad.pace*Math.pow(use.sloth, use.turned-1) || 1; use.zeal = loom; entity.each(function(part) { outset[part] = $(this).scrollTop(); destined[part] = outset[part]+way; quit[part] = onFringe(this, part, outset[part]); }); use.waive = ceaseOperation(); if (!way) speed = 1; if (use.novel) { if (use.motion) { cancelAnimationFrame(use.motion); use.initial = use.present; } else use.initial = Date.now(); use.motion = nib[pour](streamCore); } else inciteSource(); }); this.addEventListener('wheel', function(tick) { if (!use.keen) return; if (use.annul) return denyRise(tick); else if (fad.delay == true && !use.waive) use.annul = true; if (!(use.waive && use.occur)) denyRise(tick); }, hasQuiet() ? {passive: false} : false); }); $.easing['curve'] = $.easing['easeInOutSine']; gate.resize(function() { clearTimeout(use.bound); use.bound = setTimeout(detectOverflow, 100); }); return this; function streamCore() { use.present = Date.now(); var advance = Math.min(use.present-use.initial, speed)/speed, increase = $.easing[morph](advance); entity.each(function(key) { if (!quit[key]) { $(this).scrollTop(outset[key]+increase*way); checkLimits(this, key, advance); } }); if (advance < 1 && !use.waive) use.motion = nib[pour](streamCore); else hindStage(); } function inciteSource() { entity.each(function(beat) { if (!quit[beat]) { $(this).stop().animate({scrollTop: destined[beat]}, { duration: speed, easing: morph, progress: function(current, sequence) { checkLimits(this, beat, sequence); }, complete: hindStage }); } }); } function checkLimits(essence, rank, factor) { if (100*factor >= fad.reset) use.turned = 0; if (onFringe(essence, rank)) { quit[rank] = true; if (!use.novel) $(essence).stop(true, true); use.waive = ceaseOperation(); } } function onFringe(matter, cue, genesis) { var put = Math.round(genesis || $(matter).scrollTop()), above = destined[cue] < 0 && !put, below = destined[cue] > brink[cue] && put == brink[cue] && fad.orbit > 0; return above || below; } function ceaseOperation() { return quit.every(function(flag) {return flag}); } function hindStage() { use.turned = use.annul = use.motion = 0; } function denyRise(jab) { jab.preventDefault(); jab.stopPropagation(); } function elementAnalysis() { var item = $(); if (!object.length) { use.crux = true; object = vessel; } object.each(function() { if ($.zenith(this)) { if (!use.main) { if (use.novel) use.main = nib; else use.main = baseTag(); item = item.add(use.main); } } else item = item.add(this); }); use.target = object = item; object.each(function(zest) { if ($.zenith(this)) area[zest] = 'hub'; else area[zest] = 'sub'; }); if (use.crux && use.main) vessel = object; detectOverflow(); } function baseTag() { var origin = gate.scrollTop(); gate.scrollTop(1); if ($('html').scrollTop()) var root = 'html'; else if ($('body').scrollTop()) root = 'body'; else root = 'html, body'; gate.scrollTop(origin); return root; } function detectOverflow() { object.each(function(peg) { if (area[peg] == 'hub') var teem = $(document).height()-gate.height(); else teem = this.scrollHeight-$(this).height(); edge[peg] = Math.round(teem); }); } function hasQuiet() { var cold = false, hike = function() {}; try { var aid = Object.defineProperty({}, 'passive', { get: function() {cold = true} }); nib.addEventListener('test', hike, aid); nib.removeEventListener('test', hike, aid); } catch(e) {} return cold; } }; $.zenith = function(sample) { var peak = [nib,document,'HTML','BODY'], facet; if (sample) return peak.indexOf(sample) > -1 || peak.indexOf(sample.tagName) > -1; $.each(peak, function(spot, detail) { facet = $(detail).data('impulse'); if (facet) return false; }); return facet; }; $.fn.impulse.default = { target: '', range: 135, leap: 1.35, tempo: 500, sloth: 1.1, curb: 5, reset: 85, effect: 'easeOutSine', keen: true, delay: false, occur: true, fluid: true }; $.fn.demit = function() { return this.each(function() { if ($.zenith(this)) var habit = $.zenith(); else habit = $(this).data('impulse'); if (habit) { if (habit.novel) cancelAnimationFrame(habit.motion); else habit.target.stop(); habit.turned = habit.annul = habit.motion = 0; } }); }; $.fn.amend = function(gist) { return this.each(function() { if ($.zenith(this)) var quirk = $.zenith(); else quirk = $(this).data('impulse'); if (quirk) { $.each(gist, function(sign, rate) { if (sign in quirk) quirk[sign] = rate; }); } }); }; $.fn.evoke = function(unit) { var lot = $.Event('wheel.excite', {mien: true}), bulk; return this.each(function() { if ($.zenith(this)) { if (!bulk) { bulk = $.zenith(); if (bulk) $(bulk.main).trigger(lot, unit); } } else $(this).trigger(lot, unit); }); }; }(jQuery, window)); (function($){var b={};$.each(['Quad','Cubic','Quart','Quint','Expo'],function(i,n){b[n]=function(p){return Math.pow(p,i+2)}});$.extend(b,{Sine:function(p){return 1-Math.cos(p*Math.PI/2)},Circ:function(p){return 1-Math.sqrt(1-p*p)},Elastic:function(p){return p===0||p===1?p:-Math.pow(2,8*(p-1))*Math.sin(((p-1)*80-7.5)*Math.PI/15)},Back:function(p){return p*p*(3*p-2)},Bounce:function(p){var f,h=4;while(p<((f=Math.pow(2,--h))-1)/11){}return (1/Math.pow(4,3-h)-7.5625*Math.pow((f*3-2)/22-p,2))}});$.each(b,function(n,e){$.easing['easeIn'+n]=e;$.easing['easeOut'+n]=function(p){return 1-e(1-p)};$.easing['easeInOut'+n]=function(p){return p<0.5?e(p*2)/2:1-e(p*-2+2)/2}})})(jQuery);