Support videos
Here's a virtual tour
<!-- Rolling numbers counter -->
<script src='https://unpkg.com/counterup2@2.0.2/dist/index.js'></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const RUN_INTERSECT_FN_ONCE = true;
const INTERSECT_SELECTOR = '.counter';
const RUN_ONCE_ATTRNAME = 'magic-intersect-once';
const counterUp = window.counterUp.default;
const INTERSECT_FN = (el) => {
counterUp(el, {
duration: 2000,
delay: 10,
});
}
const INTERSECT_PARAMS = { threshold: 1 }
const IO = new IntersectionObserver(entries => {
entries.forEach(entry => {
const el = entry.target;
if (entry.isIntersecting) {
if (RUN_INTERSECT_FN_ONCE) {
if (el.getAttribute(RUN_ONCE_ATTRNAME) === 'true') return;
else el.setAttribute(RUN_ONCE_ATTRNAME, 'true');
}
INTERSECT_FN(el);
}
});
}, INTERSECT_PARAMS);
document.querySelectorAll(INTERSECT_SELECTOR).forEach(el => { IO.observe(el); });
});
</script>
https://finsweet.com/attributes/cms-tabs
<!-- Tab change on hover not click -->
<script>
function waitForElements(selector, callback, retryAttempts = 10, retryInterval = 1000) {
let attemptsMade = 0;
function checkElements() {
const elements = document.querySelectorAll(selector);
attemptsMade++;
if (elements.length > 0) {
clearInterval(timer);
callback(elements);
} else if (attemptsMade >= retryAttempts) {
clearInterval(timer);
console.warn(`No elements found by selector '${selector}' after ${retryAttempts} attempts.`);
}
}
const timer = setInterval(checkElements, retryInterval);
checkElements();
}
waitForElements('.home_our-work_tabs-menu .tab-heading', (elements) => {
elements.forEach(el => {
el.addEventListener('mouseover', () => {
console.log(el);
el.click();
});
});
});
</script>
Compress images >> https://cloudconvert.com/
How to get background video >> https://www.loom.com/share/6cdf235cbcce45b0985f68cf822eb658?sid=15bfbd45-075e-464a-9124-9be1410386d2
Need help?
For support from the Flow Gurus team please email support@flowgurus.co
Other useful resources
Webflow Security
Webflow Hosting
Webflow Support
For more information about Webflow please visit webflow.com
How to videos
Get background video url for Case Studies
Edit global contact form pop up
Upload a new case study
Compress images >> https://cloudconvert.com/
How to get background video >> https://www.loom.com/share/6cdf235cbcce45b0985f68cf822eb658?sid=15bfbd45-075e-464a-9124-9be1410386d2
Technical Documentation
Rolling numbers
<!-- Rolling numbers counter -->
<script src='https://unpkg.com/counterup2@2.0.2/dist/index.js'></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const RUN_INTERSECT_FN_ONCE = true;
const INTERSECT_SELECTOR = '.counter';
const RUN_ONCE_ATTRNAME = 'magic-intersect-once';
const counterUp = window.counterUp.default;
const INTERSECT_FN = (el) => {
counterUp(el, {
duration: 2000,
delay: 10,
});
}
const INTERSECT_PARAMS = { threshold: 1 }
const IO = new IntersectionObserver(entries => {
entries.forEach(entry => {
const el = entry.target;
if (entry.isIntersecting) {
if (RUN_INTERSECT_FN_ONCE) {
if (el.getAttribute(RUN_ONCE_ATTRNAME) === 'true') return;
else el.setAttribute(RUN_ONCE_ATTRNAME, 'true');
}
INTERSECT_FN(el);
}
});
}, INTERSECT_PARAMS);
document.querySelectorAll(INTERSECT_SELECTOR).forEach(el => { IO.observe(el); });
});
</script>
Homepage tabs
https://finsweet.com/attributes/cms-tabs
<!-- Tab change on hover not click -->
<script>
function waitForElements(selector, callback, retryAttempts = 10, retryInterval = 1000) {
let attemptsMade = 0;
function checkElements() {
const elements = document.querySelectorAll(selector);
attemptsMade++;
if (elements.length > 0) {
clearInterval(timer);
callback(elements);
} else if (attemptsMade >= retryAttempts) {
clearInterval(timer);
console.warn(`No elements found by selector '${selector}' after ${retryAttempts} attempts.`);
}
}
const timer = setInterval(checkElements, retryInterval);
checkElements();
}
waitForElements('.home_our-work_tabs-menu .tab-heading', (elements) => {
elements.forEach(el => {
el.addEventListener('mouseover', () => {
console.log(el);
el.click();
});
});
});
</script>