Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids
Magic Water Elf Toy Kit: DIY STEM Fun for Kids

Magic Water Elf Toy Kit: DIY STEM Fun for Kids

Price

$38.99 $19.99
Save $19.00
2711 sold
20% OFF 2nd item
30% OFF 3rd item
50% OFF 4th item

style

Please select a style

Quantity

/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1539149753700').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);
Magic Hydrogel: The kit includes a variety of vibrant magic hydrogel beads that expand in water to form adorable water sprite shapes, sparking children's imagination and creativity. By observing the transformation of the gel, kids can learn about scientific principles.

Multi-functional Molds: Offers molds in various shapes and sizes, allowing children to freely create different water sprites. The molds are designed to be simple and easy to use, suitable for children of different ages, promoting hand-eye coordination and fine motor skill development.

Imagination Play: This toy kit is not just a toy but a tool to ignite children's creativity. Through making and playing with water sprites, kids can weave their own stories, engage in role-playing, and develop language expression and social skills.

Perfect Gift: Whether for Christmas, birthday parties, or family gatherings, the Magic Water Sprite Toy Kit is a unique and fun gift choice. It serves both as a toy for children and as materials for family DIY STEM projects, combining education with entertainment.

Family-Friendly: The kit is designed to be safe and eco-friendly, suitable for family participation. Parents can join in making water sprites with their children, fostering family bonds while sparking an interest in STEM (Science, Technology, Engineering, Mathematics) through playful scientific exploration.

Party Decoration: Water sprites are not only toys but can also serve as party decorations. Kids can use them to adorn party venues, adding fun and interactivity, enhancing the party atmosphere.