PluginProbe
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor / 2.0.7
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor v2.0.7
2.0.13 2.0.12 2.0.11 2.0.10 2.0.9 trunk 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8
blockenberg / blocks / service-cards / frontend.js

frontend.js in Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor 2.0.7, at blocks/service-cards/frontend.js

56 lines 2.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function () {
2 'use strict';
3
4 document.addEventListener('DOMContentLoaded', function () {
5 initServiceCards();
6 });
7
8 function initServiceCards() {
9 if (!('IntersectionObserver' in window)) return;
10
11 document.querySelectorAll('.bkbg-sk-wrapper').forEach(function (wrapper) {
12 /* Responsive column CSS vars from data attributes */
13 var colsTablet = wrapper.dataset.colsTablet;
14 var colsMobile = wrapper.dataset.colsMobile;
15
16 if (colsTablet) wrapper.style.setProperty('--bkbg-sk-cols-tablet', colsTablet);
17 if (colsMobile) wrapper.style.setProperty('--bkbg-sk-cols-mobile', colsMobile);
18
19 /* Staggered card entrance animation */
20 var cards = Array.from(wrapper.querySelectorAll('.bkbg-sk-card'));
21 if (!cards.length) return;
22
23 /* Hide cards initially */
24 cards.forEach(function (card) {
25 card.classList.add('bkbg-sk--hidden');
26 card.style.opacity = '0';
27 card.style.transform = 'translateY(20px)';
28 });
29
30 var observer = new IntersectionObserver(function (entries) {
31 entries.forEach(function (entry) {
32 if (entry.isIntersecting) {
33 var card = entry.target;
34 var idx = cards.indexOf(card);
35 var delay = idx * 80; /* ms stagger */
36
37 setTimeout(function () {
38 card.style.opacity = '';
39 card.style.transform = '';
40 card.style.transition = 'opacity 0.45s ease, transform 0.45s ease';
41 card.classList.remove('bkbg-sk--hidden');
42 card.classList.add('bkbg-sk--visible');
43 }, delay);
44
45 observer.unobserve(card);
46 }
47 });
48 }, { threshold: 0.12 });
49
50 cards.forEach(function (card) {
51 observer.observe(card);
52 });
53 });
54 }
55 })();
56