Glowing Bat Desk Lamp – LED, Everyday Comfort, Was $45, Save 11%

$39.99  - $79.99
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ 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 = "74ea119c-cd23-4119-ab64-32cc4ee18dae"; // 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 == 'ecdab337-248c-42e5-9c6f-89e42af60652' && 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: "ecdab337-248c-42e5-9c6f-89e42af60652", 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);
Buy More Save More:  Buy 1
Quantity
Free worldwide shipping
Free returns
Sustainably made
Secure payments

Description

Bring a dramatic and atmospheric touch to your space with the Glowing Bat Desk Lamp. Designed with a wing-spread bat perched on a twisted branch, this decorative lamp blends gothic charm, Halloween mood, fantasy style, and warm ambient lighting.

By day, it works as a striking tabletop sculpture. By night, the bat wings glow with a soft warm light, creating a mysterious yet cozy atmosphere for bedrooms, desks, bookshelves, mantels, entryways, offices, cafés, bars, and Halloween displays.


Why You’ll Love Our Product 🦇

1. Striking Wing-Spread Bat Design

The dramatic bat silhouette, open wings, and twisted branch base create a bold gothic look that instantly stands out. It feels more like a decorative art piece than an ordinary night light.

2. Warm Ambient Wing Glow

The wings light up with a soft warm yellow glow, adding cozy mood lighting without feeling harsh. Perfect for evening décor, Halloween setups, and dark aesthetic rooms.

3. Perfect for Gothic & Halloween Styling

This lamp pairs beautifully with gothic décor, dark academia rooms, fantasy collections, vampire-inspired themes, black books, candles, pumpkins, and spooky seasonal displays.

4. Sculptural Branch Base

The twisted branch stand gives the lamp a dynamic, story-like appearance, as if the bat has landed from the night sky. The round base makes it easy to place on desks, shelves, and tabletops.

5. Daytime Décor & Nighttime Glow

Use it as a decorative sculpture during the day and turn it on at night for warm atmospheric lighting. It is ideal for bedrooms, study corners, mantels, entry tables, cafés, shops, and party scenes.

6. Unique Gift for Dark Décor Lovers

A memorable gift for anyone who loves bats, Halloween, gothic interiors, fantasy décor, witchy rooms, vampire themes, and unusual collectible home accents.


Product Specifications 📏

Item Details
Product Name Glowing Bat Desk Lamp
Product Type Desk lamp / ambient light / Halloween décor / gothic ornament
Design Elements Wing-spread bat, twisted branch, round base, glowing wings
Style Gothic, dark, fantasy, vintage, Halloween-inspired
Light Color Warm yellow light
Main Color Black body with warm glowing wings
Material Resin / plastic / LED components, 

Safety Note: This is a decorative lamp, not a toy. Place it on a flat, dry surface and keep it away from water, open flames, and areas where it may be knocked over.


What’s In The Box? 📦

  • 1 × Glowing Bat Desk Lamp
  • 1 × Protective packaging
  • 1 × User guide or care card, if included
  • 1 × USB cable, if included
  • Batteries, if included with the actual SKU

Before publishing, confirm whether the lamp includes batteries, supports USB power, has replaceable batteries, or offers brightness adjustment.


How To Use 🛠️

  1. Remove the lamp from the package and check that the wings, branch stand, and base are intact.
  2. Place it on a stable, flat, dry surface such as a desk, shelf, mantel, or bedside table.
  3. If battery-powered, install the required batteries according to the instructions.
  4. If USB-powered, connect it to a power adapter, computer, or power bank.
  5. Turn on the switch to activate the warm wing glow.
  6. Style it with candles, books, pumpkins, autumn leaves, vintage frames, or gothic décor.
  7. Turn off after use and wipe dust gently with a soft dry cloth.

Customer Reviews ⭐

⭐⭐⭐⭐⭐ Perfect gothic atmosphere

Emily Johnson|Verified Purchase
I placed it on my desk next to my books, and it looks amazing at night. The warm glow through the wings is soft and dramatic.

⭐⭐⭐⭐⭐ Great for Halloween and beyond

Michael Anderson|Verified Purchase
I bought it for Halloween, but it looks too good to put away. It fits my office décor perfectly.

⭐⭐⭐⭐⭐ Beautiful dark academia piece

Sarah Miller|Verified Purchase
This lamp looks great on my bookshelf with black books and candles. It has that moody, vintage feel I wanted.

⭐⭐⭐⭐⭐ Unique gift idea

Jessica Brown|Verified Purchase
I gave this to a friend who loves bats and Halloween décor. She loved it right away because it is so different from regular decorations.

⭐⭐⭐⭐⭐ Nice ambient light

David Thompson|Verified Purchase
It is more of an atmosphere light than a reading lamp, which is exactly what I wanted. The glow is warm and not too bright.


FAQ ❓

Q1: Is this lamp only for Halloween?

No. It works beautifully for Halloween, but it can also be used year-round in gothic, dark academia, fantasy, witchy, or vintage-inspired rooms.

Q2: Is it bright enough for reading?

It is designed as an ambient decorative light, not a primary reading lamp.

Q3: What is it made of?

The lamp is typically made from resin or plastic with LED components. Please confirm the exact material based on your final SKU.

Q4: Can I use it outdoors?

Indoor use is recommended. If used on a covered porch or display area, keep it protected from rain, moisture, and direct exposure.

Q5: Is it safe for children’s rooms?

It may be used as décor, but it is not a toy. Keep it where children cannot easily pull it down or knock it over.

Q6: How do I clean it?

Wipe gently with a soft dry cloth. Do not soak, rinse, or use harsh cleaning chemicals.

Q7: Is it a good gift?

Yes. It makes a unique gift for bat lovers, Halloween fans, gothic décor collectors, fantasy lovers, and anyone who enjoys unusual home accents.


Final Call To Action 🦇

Add a warm glow with a darkly elegant twist.
The Glowing Bat Desk Lamp combines a wing-spread bat sculpture, twisted branch base, and cozy warm light—perfect for transforming any desk, shelf, mantel, or Halloween display into a mysterious atmospheric corner.