🌊✨ DIY 3D Sea Glass Art Kit – Coastal & Christmas Collection

$39.99 $59.99 Save $20.00
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // 复制按钮和内容的类名 this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // 初始化服务 this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * 渲染优惠码组件 * @param {Object} data - 渲染数据 */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // 绑定复制代码功能 this.copyCode(el, data); }); } /** * 获取渲染模板 * @param {Object} data - 渲染数据 */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * 清除DOM内容 */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * 获取默认数据 * @returns {Object} 默认数据对象 */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * 复制优惠码功能 * @param {Element} el - 当前元素 */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // 确保获取正确的元素和内容 const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // 获取纯文本内容 const textToCopy = codeElement.innerText.trim(); // 尝试使用现代API,如果失败则使用备用方案 try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // 显示复制成功提示 this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // 使用备用复制方案 this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // 跳转决策: is_redirection + link(可选覆盖) const setting = { is_redirection: item.dataset["redirection"] === "true", link: item.dataset["link"], }; const landingUrl = `/promotions/discount-default/${discountId}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element)) { this.win.open(finalUrl, '_blank', 'noopener'); } } }) } } /** * 使用 execCommand 的复制方案 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // 设置样式使文本框不可见 textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // 添加 readonly 属性防止移动端虚拟键盘弹出 textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // 显示复制成功提示 this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * 创建 Toast 元素 * @returns {Element} 创建的 Toast 元素 */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * 挂载 Toast 元素到 body * @returns {Element} 挂载的 Toast 元素 */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * 复制成功的提醒 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * 复制优惠码成功后要存一份到本地存储中,购物车使用 * @param {string} codeText - 要复制的文本 */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // 注册自定义元素 SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "17d453f8-f389-47c9-8105-d66dd8f22376"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '0709decf-8aee-4141-b261-b872402ca4ae' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "0709decf-8aee-4141-b261-b872402ca4ae", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);
Style:  🎄 Christmas Tree
Quantity
Share the love
Free worldwide shipping
Free returns
Sustainably made
Secure payments
Description

Turn shimmering sea glass, delicate shells, pearl-style accents, and warm fairy lights into a glowing 3D decoration created by you.

From peaceful ocean animals to cozy Christmas favorites, each design transforms layers of frosted sea glass into a dimensional display piece filled with coastal color, handmade texture, and soft illuminated charm.

✨ Why You’ll Love It

💎 Create Your Own 3D Sea Glass Art

Build your design piece by piece as individual sea glass shapes gradually come together into a beautiful three-dimensional sculpture.

Layer the sea glass, add shells and pearl accents, weave in the warm lights, and watch your creation come to life.

🌊 Layer every piece.
🐚 Add every coastal detail.
✨ Create something beautifully yours.

🧵 Relaxing DIY Craft Experience

Enjoy peaceful, screen-free creative time as you arrange, assemble, and decorate each section at your own pace.

The satisfying layering process turns a collection of small pieces into a detailed finished decoration—perfect for cozy weekends, quiet evenings, holiday crafting, or creative time with someone you love.

🌊 Beautiful Ocean-Inspired Colors

Seafoam green, aqua, turquoise, frosted white, and deep ocean blue create the signature coastal palette throughout the collection.

The translucent sea glass catches surrounding light beautifully, creating subtle changes in color and texture from different angles.

✨ Fresh by day.
🌊 Coastal from every angle.
💎 Beautiful under the light.

✨ Warm Light-Up Design

Tiny warm LED lights glow between the layered sea glass pieces, adding another dimension to the finished design.

During the day, enjoy the frosted coastal colors and intricate textures.

At night, switch on the lights and transform your creation into a softly glowing centerpiece.

💡 Soft warm illumination
🌊 Light through translucent sea glass
✨ Cozy evening atmosphere

🪡 Craftsmanship Details

Layered 3D sea glass construction
Graduated seafoam, aqua, white, and ocean-blue pieces
Decorative seashell and pearl-style accents
Starfish-inspired tree topper
Warm LED light detailing
Sturdy round wooden display base
Adhesive and assembly tools
Carefully arranged overlapping branches
Freestanding tabletop design
Designed to create a luminous handcrafted appearance
Suitable for seasonal display after completion

✨ Every piece of sea glass contributes to the final shape, color, texture, and coastal personality of your finished Christmas tree.

🐚 Beautiful Dimensional Details

The beauty of each design comes from the layers.

Individual sea glass pieces overlap to create the appearance of fur, feathers, scales, waves, clothing, or Christmas tree branches depending on the character.

Decorative details may include:

Layered sea glass construction
Frosted translucent finish
Seafoam, aqua, white, and ocean-blue tones
Pearl-style bead accents
Miniature seashell embellishments
Character-specific decorative details
Warm LED light string
Dimensional sculptural shapes
Round wooden display base
Detailed front and side appearance

✨ Every individual piece contributes to the finished sculpture’s shape, texture, movement, and personality.

☀️ Beautiful by Day — Magical by Night 🌙

During the day, the frosted sea glass creates an airy, elegant coastal appearance.

After dark, the warm lights shine through the translucent layers and transform the piece into a glowing decorative centerpiece.

☀️ Day: Fresh coastal color and texture
🌙 Night: Soft illuminated ambiance
🎄 Holidays: A magical seasonal statement

One handmade creation with two completely different moods.

🪡 Everything You Need to Start Creating

Each kit brings together the main components needed to transform the design from individual pieces into a finished 3D decoration.

Depending on the selected style, the kit may include:

💎 Coordinated sea glass pieces
🐚 Decorative shells
🤍 Pearl-style accents
💡 LED light string
🧴 Adhesive
🪵 Wooden display base
🛠 Assembly accessories
📖 Project guidance

Choose your design, arrange the pieces, and enjoy watching your coastal artwork gradually take shape.

🌊 Perfect For

✔ Relaxing weekend craft projects
✔ Creative screen-free activities
✔ Coastal and beach-house decorating
✔ Mother-and-daughter craft time
✔ Craft clubs and creative gatherings
✔ Christmas DIY projects
✔ Ocean and marine-life lovers
✔ Animal-themed décor collections
✔ Handmade seasonal displays
✔ Unique birthday and Christmas gifts
✔ Creating memorable home décor
✔ Building a coordinated sea glass collection

💎 Build Your Own Sea Glass Collection

Choose the design that speaks to you—or create several and build a complete glowing coastal world.

🐮 Highland Cow — Coastal farmhouse charm
🐢 Sea Turtle — Peaceful ocean beauty
🐚 Seashell — Luminous seaside elegance
🎄 Nutcracker — Classic coastal Christmas
🐋 Whale — Majestic ocean movement
🐶 Dachshund — Playful pet-lover personality
🐧 Penguin — Sweet winter charm
🎄 Christmas Tree — Glowing coastal holiday centerpiece
 Snowman — Cheerful Christmas magic
🐙 Octopus — Whimsical underwater character
🧙♂️ Gnome — Cozy seaside personality

✨ Display several together for an unforgettable combination of ocean color, warm light, and handmade character.

🛒 Shop Now

Choose your favorite design and start creating a glowing piece of coastal art you can proudly display.

💎 Layer the sea glass.
🐚 Add the finishing details.
💡 Turn on the lights.
🌊 Bring your creation to life.

Limited design availability—collect your favorite DIY 3D Sea Glass Art Kits and create a coastal collection that glows with handmade charm.

🎁 Pakage Includes

  • 1 x 🌊✨ DIY 3D Sea Glass Art Kit