Activities for kids

With Stuck At Home, you’ll find a huge range of free downloads, products for sale and advice to survive (and maybe even flourish) while you and the kids can’t leave the house!



Educational

See all →

With our fun educational resources, your kids will be laughing just as much as they’ll be learning.

Games and Puzzles

See all →

Make sure the kids have their thinking caps on when they tackle our selection of engaging games and puzzles.

Arts and Crafts

See all →

Gather the glue, glitter and genius as you unleash the kids’ creativity on our variety of craft activities.

Kids' Colouring-In Pages

See all →

Break out the kids’ pencils and markers to get creative with heaps of colouring-in pages featuring our adorable designs.

Hygenie and The Washing Wizard

See all →

Teach the kids all about the importance of cleanliness with our magical friends and their adventures.

async function setDynamicBlocks() { try { const url = new URL('https\u003A\u002F\u002Fwww.stuckonyou.com\u002Fau\u002Fbanner\u002Fajax\u002Fload\u002F'); const sections = []; document .querySelectorAll('[data-banner-id]') .forEach(el => sections.push(el.getAttribute('data-banner-id'))); url.searchParams.append('requesting_page_url', url.origin); url.searchParams.append('sections', sections.toString()); const response = await fetch(url.href, { headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }); const data = await response.json(); const items = data.data.items.fixed; const elements = document.querySelectorAll('[data-ids]'); const dataItem = []; for (const element in items) { dataItem.push(element); } for (const element of elements) { const ids = element.getAttribute('data-ids').split(','); const config = { type: element.getAttribute('data-rotate'), bannerId: element.getAttribute('data-banner-id'), }; if (dataItem.includes(element.getAttribute('data-ids'))) { element.style.display = 'block'; } else { element.style.display = 'none'; } getByType(config, element, items, ids); } } catch (err) { console.warn(err); } } /** * Get banner items by type */ function getByType(config = null, container, items, ids) { if (!config) return; if (config.type === 'random') { const randomId = ids[Math.floor(Math.random() * ids.length)]; container.insertAdjacentHTML('beforeend', items[randomId].content); return; } if (config.type === 'series') { showInOrder(config, items, ids); return; } if (config.type === 'shuffle') { showInOrder(config, items, ids); return; } for (const id of ids) { const block = items[id]; if (block) { if(container.innerHTML.indexOf(block.content) == -1) container.insertAdjacentHTML('beforeend', block.content); } } } /** * Show blocks in order */ function showInOrder(config, items, ids) { const bannerId = config.bannerId; const type = config.type; let localSeries = JSON.parse(localStorage.getItem('data-dynamic-series')); if (!localSeries) { localStorage.setItem( 'data-dynamic-series', JSON.stringify({ [bannerId]: ids }) ); localSeries = { [bannerId]: ids }; } if (!localSeries[bannerId]?.length) { delete localSeries[bannerId]; if (Object.keys(localSeries).length === 0) localStorage.removeItem('data-dynamic-series'); showInOrder(config, items, ids); return; } let id = localSeries[bannerId][0]; if (type === 'series') { id = localSeries[bannerId].shift(); } if (type === 'shuffle') { const bannerOption = localSeries[bannerId]; if (bannerOption.length === 1) { id = localSeries[bannerId].shift(); } else { id = bannerOption[Math.floor(Math.random() * bannerOption.length)]; localSeries[bannerId].filter(item => item !== id); } } if (id) { const block = document.querySelector(`[data-banner-id="${bannerId}"]`); if (!items[id]) { localStorage.removeItem('data-dynamic-series'); showInOrder(config, items, ids); return; } block?.insertAdjacentHTML('beforeend', items[id].content); } localStorage.setItem( 'data-dynamic-series', JSON.stringify(localSeries = { [bannerId]: localSeries[bannerId] }) ); } // get Dynamic Block when change cart qty document.addEventListener("DOMContentLoaded", () => { const blockInterval = setInterval(function() { let target = document.querySelector('.count-item'); if (target) { clearInterval(blockInterval); //Create an observer instance. let observer = new MutationObserver(function(mutations) { setDynamicBlocks(); }); // Pass in the target node, as well as the observer options. observer.observe(target, { attributes: true, childList: true, characterData: true }); } }, 2000); setTimeout(function(){ clearInterval(blockInterval); }, 10000); }); /** Set blocks */ setDynamicBlocks();