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 / lottie / frontend.js

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

103 lines 3.3 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 var LOTTIE_CDN = 'https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.12.2/lottie.min.js';
5
6 function loadScript(src, cb) {
7 if (window.lottie) { cb(); return; }
8 var s = document.createElement('script');
9 s.src = src;
10 s.onload = cb;
11 s.onerror = function () { console.warn('Blockenberg: failed to load Lottie from', src); };
12 document.head.appendChild(s);
13 }
14
15 function initLottie(outer) {
16 var src = outer.dataset.src || '';
17 var trigger = outer.dataset.trigger || 'autoplay';
18 var loop = outer.dataset.loop !== '0';
19 var speed = parseFloat(outer.dataset.speed || '1') || 1;
20 var direction = parseInt(outer.dataset.direction || '1', 10) || 1;
21 var keepFrame = outer.dataset.keepFrame === '1';
22
23 if (!src) return;
24
25 var container = outer.querySelector('.bkbg-lt-player');
26 if (!container) return;
27
28 var anim = null;
29
30 function createAnim(autoStart) {
31 anim = window.lottie.loadAnimation({
32 container : container,
33 renderer : 'svg',
34 loop : loop,
35 autoplay : autoStart,
36 path : src
37 });
38 anim.setSpeed(speed);
39 anim.setDirection(direction);
40
41 if (keepFrame) {
42 anim.addEventListener('complete', function () {
43 anim.goToAndStop(anim.totalFrames - 1, true);
44 });
45 }
46 }
47
48 if (trigger === 'autoplay') {
49 createAnim(true);
50
51 } else if (trigger === 'hover') {
52 createAnim(false);
53 outer.addEventListener('mouseenter', function () { anim && anim.play(); });
54 outer.addEventListener('mouseleave', function () { anim && anim.pause(); });
55
56 } else if (trigger === 'click') {
57 createAnim(false);
58 var isPlaying = false;
59 outer.addEventListener('click', function () {
60 if (!anim) return;
61 if (isPlaying) {
62 anim.pause();
63 isPlaying = false;
64 } else {
65 anim.play();
66 isPlaying = true;
67 }
68 });
69
70 } else if (trigger === 'scroll') {
71 var io = new IntersectionObserver(function (entries) {
72 entries.forEach(function (entry) {
73 if (entry.isIntersecting) {
74 if (!anim) {
75 createAnim(true);
76 } else {
77 anim.play();
78 }
79 if (!loop) io.unobserve(outer);
80 } else if (anim) {
81 anim.pause();
82 }
83 });
84 }, { threshold: 0.25 });
85 io.observe(outer);
86 }
87 }
88
89 function init() {
90 var wrappers = document.querySelectorAll('.bkbg-lt-outer[data-src]');
91 if (!wrappers.length) return;
92 loadScript(LOTTIE_CDN, function () {
93 wrappers.forEach(initLottie);
94 });
95 }
96
97 if (document.readyState === 'loading') {
98 document.addEventListener('DOMContentLoaded', init);
99 } else {
100 init();
101 }
102 })();
103