24 Days of Dinosaur Christmas Advent Calendar – 24 Collectible Dino Figurines & Holiday Surprises

2 sold
$29.99
$59.99
-$30.00
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = 'be43ebe6-13da-48ea-972f-c8e5db9d0a8b'; this.isRTL = SPZ.win.document.dir === 'rtl'; this.isAddingToCart_ = false; // 加购中状态 } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.init(); // 监听事件 this.bindEvent_(); } async init() { this.handleFitTheme(); const data = await this.getDiscountList(); this.renderApiData_(data); } async getDiscountList() { const productId = 'cb6b80ce-4416-48c3-b66e-499e14ca0451'; const variantId = this.variant_id; const productType = 'default'; const reqBody = { product_id: productId, variant_id: variantId, discount_method: "DM_AUTOMATIC", customer: { customer_id: window.C_SETTINGS.customer.customer_id, email: window.C_SETTINGS.customer.customer_email }, product_type: productType } const url = `/api/storefront/promotion/display_setting/text/list`; const data = await this.xhr_.fetchJson(url, { method: "post", body: reqBody }).then(res => { return res; }).catch(err => { this.setContainerDisabled(false); }) return data; } async renderDiscountList() { this.setContainerDisabled(true); const data = await this.getDiscountList(); this.setContainerDisabled(false); // 重新渲染 抖动问题处理 this.renderApiData_(data); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } async renderApiData_(data) { const parentDiv = document.querySelector('.automatic_discount_container'); const newTplDom = await this.getRenderTemplate(data); if (parentDiv) { parentDiv.innerHTML = ''; parentDiv.appendChild(newTplDom); } else { console.log('automatic_discount_container is null'); } } doRender_(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); this.element.appendChild(el); }); } async getRenderTemplate(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, { ...renderData, isRTL: this.isRTL }) .then((el) => { this.clearDom(); return el; }); } setContainerDisabled(isDisable) { const automaticDiscountEl = document.querySelector('.automatic_discount_container_outer'); if(isDisable) { automaticDiscountEl.setAttribute('disabled', ''); } else { automaticDiscountEl.removeAttribute('disabled'); } } // 绑定事件 bindEvent_() { window.addEventListener('click', (e) => { let containerNodes = document.querySelectorAll(".automatic-container .panel"); let bool; Array.from(containerNodes).forEach((node) => { if(node.contains(e.target)){ bool = true; } }) // 是否popover面板点击范围 if (bool) { return; } if(e.target.classList.contains('drowdown-icon') || e.target.parentNode.classList.contains('drowdown-icon')){ return; } const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { node.classList.remove('open-dropdown'); }) // 兼容主题 this.toggleProductSticky(true); }) // 监听变体变化 document.addEventListener('dj.variantChange', async(event) => { // 重新渲染 const variant = event.detail.selected; if (variant.product_id == 'cb6b80ce-4416-48c3-b66e-499e14ca0451' && variant.id != this.variant_id) { this.variant_id = variant.id; this.renderDiscountList(); } }); } // 兼容主题 handleFitTheme() { // top 属性影响抖动 let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ productInfoEl.classList.add('force-top-auto'); } } // 兼容 wind/flash /hero 主题 (sticky属性影响 popover 层级展示, 会被其他元素覆盖) toggleProductSticky(isSticky) { let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ if(isSticky) { // 还原该主题原有的sticky属性值 productInfoEl.classList.remove('force-position-static'); return; } productInfoEl.classList.toggle('force-position-static'); } } setupAction_() { this.registerAction('handleDropdown', (invocation) => { const discount_id = invocation.args.discount_id; const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { if(node.getAttribute('id') != `automatic-${discount_id}`) { node.classList.remove('open-dropdown'); } }) const $discount_item = document.querySelector(`#automatic-${discount_id}`); $discount_item && $discount_item.classList.toggle('open-dropdown'); // 兼容主题 this.toggleProductSticky(); }); // 加购事件 this.registerAction('handleAddToCart', (invocation) => { // 阻止事件冒泡 const event = invocation.event; if (event) { event.stopPropagation(); event.preventDefault(); } // 如果正在加购中,直接返回 if (this.isAddingToCart_) { return; } const quantity = invocation.args.quantity || 1; this.addToCart(quantity); }); } // 加购方法 async addToCart(quantity) { // 设置加购中状态 this.isAddingToCart_ = true; const productId = 'cb6b80ce-4416-48c3-b66e-499e14ca0451'; const variantId = this.variant_id; const url = '/api/cart'; const reqBody = { product_id: productId, variant_id: variantId, quantity: quantity }; try { const data = await this.xhr_.fetchJson(url, { method: 'POST', body: reqBody }); // 触发加购成功提示 this.triggerAddToCartToast_(); return data; } catch (error) { error.then(err=>{ this.showToast_(err?.message || err?.errors?.[0] || 'Unknown error'); }) } finally { // 无论成功失败,都重置加购状态 this.isAddingToCart_ = false; } } showToast_(message) { const toastEl = document.querySelector("#apps-match-drawer-add_to_cart_toast"); if (toastEl) { SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast(message); }); } } // 触发加购成功提示 triggerAddToCartToast_() { // 如果主题有自己的加购提示,则不显示 const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy'); if (themeAddToCartToastEl) return; // 显示应用的加购成功提示 this.showToast_("Added successfully"); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomProductAutomatic);
class SpzCustomDiscountBundle extends SPZ.BaseElement { constructor(element) { super(element); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } mountCallback() { // 同一页可能有多个 block 各自渲染本 snippet,导致逻辑元素 spz-custom-discount-toast(#appsAddCartToastFunc) 重复。 // 仅保留 DOM 中第一个实例,其余重复实例移除自身,保证逻辑元素及其 action 引用(appsAddCartToastFunc)唯一。 const funcs = document.querySelectorAll('#appsAddCartToastFunc'); if (funcs.length > 1 && this.element !== funcs[0]) { this.element.remove(); return; } // 全局折扣 toast 的弹出点分散在多个模板/组件里(含声明式 @atcError),无法逐一在弹出前前置, // 故挂载时幂等地去重并挂到 body;加购 toast 改为弹出前按需去重(见 showAddToCartToast) this.ensureSingleToastInBody_('cart_match_discount_toast_wrap'); } unmountCallback() {} // 同一页面可能有多个 block 各自渲染本 toast snippet(如商详的 discount_automatic + 购物车抽屉里的折扣横幅), // 导致 toast 外层出现重复 id。重复 id 下 getElementById/querySelector 及 SPZ 动作引用都只命中第一个, // 且被关进抽屉的那份会被抽屉的 transform/overflow 裁剪/错位。这里在挂载时幂等去重: // 只保留一份、移除多余的,并把保留的挂到 body(body 是 position:fixed 最安全的落点,避免被任何祖先裁剪)。可反复调用。 ensureSingleToastInBody_(id) { const els = Array.from(document.querySelectorAll('#' + id)); if (!els.length) return; els.slice(1).forEach((el) => el.remove()); const keep = els[0]; if (keep.parentNode !== document.body) { document.body.appendChild(keep); } } // 主题购物车抽屉是否打开 isInCartDrawer_() { return !!document.querySelector('[data-section-type="cart_drawer"] spz-sidebar[open]'); } setupAction_() { this.registerAction('showAddToCartToast', () => { // 抽屉内加购:主题本就不会有加购效果,统一弹插件自己的 toast // 非抽屉:主题有加购代理则沿用主题加购效果,否则插件兜底 const proxyEl = document.getElementById('add-cart-event-proxy'); const inDrawer = this.isInCartDrawer_(); if (!inDrawer && proxyEl) { return; } // 弹出前按需去重并挂到 body(幂等),避免重复 id 命中错对象或被抽屉裁剪/错位 this.ensureSingleToastInBody_('apps_add_cart_toast_wrap'); const toastEl = document.querySelector('#apps-match-drawer-add_to_cart_toast') SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast("Added successfully"); }); }); } buildCallback() { this.setupAction_(); }; } SPZ.defineElement('spz-custom-discount-toast', SpzCustomDiscountBundle);
Style- Buy 1 You save $30
Quantity
people are viewing this right now
Description

24 Days of Dinosaur Christmas. 24 Mini Prehistoric Surprises. 🎄🦕

If one roaring little dinosaur can light up a child’s eyes, imagine opening 24 of them before Christmas.

The 24 Days of Dinosaur Christmas Advent Calendar turns the holiday countdown into an epic daily prehistoric adventure, hiding 24 different collectible dinosaur figures behind individually numbered doors.

And every single dino has its own festive twist!

Meet a cozy winter T-Rex, a holiday-hat Triceratops, a gift-wrapped Stegosaurus, a snowy Velociraptor, a Santa-hat Brachiosaurus, and plenty of other wonderfully unexpected prehistoric pals.

Open one surprise each day and watch your tiny Jurassic herd grow all the way to Christmas Eve.

By Day 24, you'll have a complete collection of 24 adorable mini dinosaurs ready to conquer your play area, bookshelf, desk, or Christmas village.

One Dino a Day. An Entire Prehistoric Kingdom by Christmas. 🦖❤️

Why You’ll Love It

🦕 24 Unique Festive Dinosaur Characters

No two days feel the same! Each door reveals a new, shaggy-toothed or spike-backed mini dinosaur dressed up in holiday cheer.

One day it might be a T-Rex carrying a candy cane.

The next could be a Pterodactyl wearing a tiny scarf.

Then a sleepy holiday Hatchling.

The excitement of never knowing who’s stomping out next keeps kids (and big kids!) eager every single morning.

🎁 A Thrilling New Surprise Every Day

Why limit Christmas excitement to just one morning?

Open one numbered compartment each day from December 1st through Christmas Eve, turning the entire month into an interactive holiday tradition.

24 mornings. 24 reveals. 24 reasons to smile and play.

🌋 Spark Imagination & Festive Play

Big horns, tiny arms, colorful scales, and Christmas hats!

If your kids or grandkids are obsessed with dinos, this calendar blends their favorite prehistoric creatures with the magic of the holidays. It’s hands-on, screen-free fun that fuels imagination all month long.

🎄 Build Your Own Prehistoric Christmas Village

Start December with one brave little Raptor.

Then add a friendly Diplodocus.

And another.

By Christmas Eve, you’ll have a full 24-piece dinosaur herd ready for display or battle. Set them up around the Christmas tree, line them up across a bedroom shelf, or let them take over a winter wonderland play mat.

❤️ A Gift That Keeps the Anticipation Alive

Instead of a single toy opened and forgotten in five minutes, this gives the recipient a brand-new mini figure every single day leading up to Christmas.

It’s an absolute home-run gift for sons, daughters, grandkids, nephews, nieces, and young dinosaur enthusiasts.

✨ Collectibles That Last Far Beyond December

Unlike chocolate calendars that vanish in seconds, these durable mini figures stay around for years of play.

When the countdown ends, the dino squad is ready for:

  • Daily pretend play & toy battles

  • Desk & bookshelf decorations

  • Birthday party favors & cake toppers

  • DIY holiday display scenes

What You’ll Get

Each set includes:

  • 🦕 24 × Collectible Holiday Dinosaur Figures

  • 🎄 1 × 24-Day Prehistoric Christmas Advent Calendar

  • 🔢 24 individually numbered surprise compartments

  • 🎁 24 distinct, character-inspired dino designs

  • ✨ A complete collectible dinosaur herd after all 24 days are opened

Start with Dino #1 on December 1st. By Christmas Eve, the whole prehistoric pack is ready to celebrate!

Perfect For

  • 🦖 Dinosaur Lovers & Dino-Kid Powerhouses — An instant hit for any child obsessed with T-Rexes, Raptors, and ancient giants.

  • 🎁 Parents & Grandparents — A joyful, screen-free December morning routine that creates lasting holiday memories.

  • 🎄 Toy & Miniature Collectors — High-detail mini figures that make for a hilarious and unique holiday display.

  • 👨‍👩‍👧‍👦 Family Countdown Traditions — Gather around each morning or bedtime to reveal the daily prehistoric friend together.

  • ✨ Creative Alternative to Candy — Keep the holiday magic high without the extra sugar rush every morning.

Size & Specs

  • Countdown: 24 Days

  • Total Figures: 24 collectible dinosaur characters

  • Calendar Design: 24 individually numbered surprise doors

  • Theme: Prehistoric Dinosaurs / Festive Christmas / Holiday Adventure

  • Style: Mini collectible character figures (Flat acrylic / molded design)

  • Recommended Use: Advent countdown, daily play, collecting, and holiday decoration

  • Set Includes: 1 Outer Advent Box + 24 Dinosaur Surprises

🎄 Bring Home the Prehistoric Herd

Christmas isn't just one day—it's all the joyful moments leading up to it.

The morning giggles.

The anticipation behind each door.

The magical family traditions.

And maybe… a few ridiculously cute, Christmas-hat-wearing dinosaurs along the way.

Open One. Roar Together. Build Your Christmas Dino Pack. 🦖🎅❤️

24 Days. 24 Dinosaurs. One Epic Holiday Countdown.

You may also like