Dushangart Smart Neck Massager

$85.99
$99.99
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = 'a1ba9b80-4845-4eaf-8428-94d7051a41f8'; this.isRTL = SPZ.win.document.dir === 'rtl'; } 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 = '34d1db13-c544-47c5-97bd-879ae16bb907'; 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 == '34d1db13-c544-47c5-97bd-879ae16bb907' && 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(); }); } 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);
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);

Description

  • ✔️Partial or full refund depend on the situation
  • ✔️Handling time>> Priority is given to delivery after payment.

📣BUY MORE SAVE MORE!

SHIPPING WORLDWIDE.

💯Payments Via PayPal® and CreditCard.


1.Your Neck Deserves a Break!

🤦‍♀️ Head-down phone use, desk work marathons, long trips—does your neck feel tighter by the day? This smart neck massager works like a "portable masseuse": relieves soreness in 3 minutes, is lightweight enough to carry anywhere, and fits your work/home/travel routine!

2. 4 Core Selling Points (Ties to Shoulder Massager Strengths, No Fluff)

① Human-Like Kneading: Targets Stiff Neck Muscles

Uses the same "thumb-like pressure" design as the shoulder massager. Massage heads fit your neck curve perfectly, kneading stiff knots (especially trapezius muscles) like real hands—no discomfort, no missed spots. Way more effective than basic massagers.

② 42-45℃ Constant Heating: Warmth That Penetrates

Same constant-temperature heating as the shoulder massager. Gentle warmth seeps deep into muscles to boost blood flow—ideal for cold-weather stiffness or desk-work tightness. Heating + kneading work together to ease soreness fast.

③ 4 Modes + 10-Minute Timer: Easy & Safe

  • 4 modes for every need: Relax (mild stiffness) → Deep Relief (severe tightness) → Recovery (post-workout) → Sleep Prep (bedtime calm).
  • 10-minute auto-shutoff: No overuse risk. Simple one-touch controls—even seniors or first-time users can master it.

④ Lightweight & Cordless: Hands-Free, Take It Anywhere

As lightweight as the shoulder massager, with a 1500mAh rechargeable battery + USB-C charging cable (included):
  • Wear it at work: No hassle while typing—relax your neck while getting things done.
  • Take it traveling: Fits in your bag, charges via power bank—use it on trains or planes.

3. After-Sales Guarantee 

  1. U.S.-Made Quality: Durable materials, no cheap parts.
  2. Fast Shipping & Free Delivery: Ships next business day (U.S. only); free shipping on orders over $50.
  3. 12-Month Warranty: Free repair/replacement for non-human damage.
  4. 7-Day Refund: Full refund if unsatisfied (unused, original condition).

4. Who Needs This?

  • 🖥️ Desk Workers: Ease neck stiffness from long hours at the computer.
  • 📱 Phone Lovers: Fix "phone neck" soreness from scrolling.
  • 👵 Seniors/Fitness Fans: Daily care or post-workout recovery.
  • 🎁 Gift Shoppers: Practical, no-fail gift—everyone will love it!
👉 Order now, give your neck the relief it needs, and stay comfortable all day!
Parameter Category Specifications Notes/Practical Instructions
Basic Product Info
- Product Name Dushangart Smart Neck Massager Smart massager designed for neck muscle relief
- Massage Head Type Human-Like Contoured Massage Heads Mimics real thumb pressure, fits neck curve perfectly, no discomfort
- Massage Modes 4 Modes (Relax/Deep Relief/Recovery/Sleep Prep) Adapts to mild stiffness, severe tightness, post-workout recovery, and pre-sleep relaxation
- Heating Function Constant Temperature Heating (42°C - 45°C) Aligns with the heating standard of the referenced shoulder massager; boosts blood circulation
- Timer Function 10-Minute Auto Power-Off Prevents overuse, balances safety and energy efficiency
Battery & Charging
- Battery Capacity 1500mAh Rechargeable Lithium Battery Stable battery life for daily multiple uses
- Charging Port Type-C Port Includes Type-C charging cable (charger not included; compatible with regular phone chargers/power banks)
- Full-Charge Battery Life Approx. 60-80 Minutes (varies by mode) Deep Relief Mode consumes more power; Relax Mode offers longer battery life
Size & Weight
- Net Weight Approx. 0.5kg (±0.05kg) Lightweight design; no neck strain when wearing, easy to carry and store
- Product Dimensions Approx. 18cm×10cm×6cm (L×W×H) 1-3cm error due to manual measurement; fits most adults’ neck sizes
Safety & Operation
- Safety Design 10-Minute Auto Power-Off, Preset Safe Heating Temp Prevents overheating or over-massage; safe for seniors/children to use
- Operation Method One-Button Control (Power/Mode Switch/Heating On/Off) No complicated settings; easy to use for first-time users
- Noise Level ≤45dB Low-noise operation; won’t disturb others in offices or meetings
- Additional Function Voice Broadcast (Battery Level/Mode Prompt) Real-time device status feedback; no need to frequently check buttons
After-sales service
- Warranty Period 12-Month Quality Warranty Free repair for non-human damage (e.g., accessory malfunctions)