We Offer Free Shipping Worldwide.
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
1 / 6
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll
15% OFF

Mino:MRL x Thehelmet_guy Futa Onahole Futanari Sex Doll

$193.80 $228.00
0 sold
Qty

MINO IS HERE

The Ultimate Co-Branded Futa Onahole & Hyper Proportioned Mini Torso

"You and me are gonna have So much fun!"

futa sex doll

Mino Hyper Futa Sex Doll

The name's Mino, you wanna play with me cute-stuff? I can take a lot of you, but how much can you take from me? Ready to play...? Just make sure no ones watching!

Born from the artistic vision of TheHelmetGuy, Mino is ready to make your wildest dreams come true!
With her state of the art proportions and masterful sensory engineering, this tier-one futa sex doll captures the ravenous and fiercely hungry presence of everyone's favorite bubbly tanuki.

Whether you're looking for cute comfortable fun or some intense love, Mino WILL consume your ALL senses.
Use code XHENTAI to get 15% OFF!

futa sex dollfuta sex doll

Tactical Unit In Action

Video Summary: Mino Prototype Review

This showcase demonstrates the 3D topology of the Mino co-branded onahole. Key attributes visible in the footage include: the anti-oil silicone material rebounding under applied pressure, the hyper-proportioned bust and hip measurements, and the overall 1.8kg mass distribution. The headless torso design provides a stable center of gravity, observable during handling throughout the video.

The Physical Asset

futa sex dollfuta sex dollfuta sex dollfuta sex doll

5 Exclusive Core Features:
The Immersive Sensory Matrix

Form Follows Function — The Ultimate Tactical Weighted-Reduced Head Design

futa sex doll

You might ask: how did we manage to include the head of this incredibly sexy tanuki girl without ruining the hardcore, utilitarian "combat" performance? During the brutal early prototype phases, mounting a standard full head atop such an overwhelmingly hyper-proportioned body created a disastrous shift in the center of gravity. The extreme inertia generated during intense thrusting sessions led to rapid wrist fatigue, uncontrollable swaying, and broken immersion.

Therefore, our R&D team made a groundbreaking tactical decision. We decided to keep her iconic head and blank, cat-like stare, but entirely removed the heavy internal skeleton.

By utilizing a brand-new internal 3D printing technology, we achieved an extreme weight reduction in the head. While you may still experience a slight, erratic wobbling of the head during intense, single-handed use, this minor physical feedback actually enhances the wild realism of the session.

By dramatically reducing the top-heavy instability, we locked the center of mass securely within her massive 40cm bust and core region. No matter how wild your session gets, she remains a grounded, immovable fortress of pleasure, forcing you to focus 100% of your sensory perception on the breathtaking tactile feedback of the premium silicone and the visual dominance of her body.

  • Stabilizes center of gravity within the 40cm bust and core zone
  • Eliminates top-heavy inertia during intense use sessions
  • Reduces wrist fatigue compared to full-head torso designs
  • Compact at 30cm height — easy to maneuver and store discreetly

Massive Futa Anatomy & Over-the-Top "Hyper" Proportions

Mino embodies peak “Hyper” proportions, translating exaggerated Western furry and anime doujin aesthetics into firm yet soft form. At 30 cm tall with a 40 cm bust, 20 cm waist, and 32 cm hips, her silhouette is intensely striking. Detailed 15 cm futa anatomy contrasts with her heavy chest, creating a bold, stylized look unique to the category.

  • Overall Height: 30 cm
  • Bust: 40 cm (hyper-exaggerated density)
  • Waist: 20 cm (ergonomic grip zone)
  • Hips: 32 cm (thick, resilient rebound)
  • Total Weight: 1.9 kg
  • Futa Cock: 15 cm

Feral tanuki Essence & Custom Textures Deeply Implanted

Mino is more than synthetic form—she’s a physical extension of a long-established original character. Inspired by TheHelmetGuy’s cheeky anthropomorphic tanuki design, her sculpt captures the tension and exaggerated curves of her wild personality.

Honoring this heritage, the ultra-soft silicone interior features a complex array of coiled rings and folds, delivering a dynamic, responsive feel that matches her lively energy.

  • Anti-oil silicone — zero sticky oil leakage, unlike standard TPE
  • Custom internal ring topology — coiled ridges and muscular folds
  • Sculpted to match TheHelmetGuy's original character anatomy reference

Heavyweight Core: The Golden Dimensional-Reduction Sex Doll Alternative

In adult collectibles, weight defines realism. Full-sized dolls are bulky, while pocket toys lack presence. Mino solves both with a “dimensional-reduction” design that delivers a premium, heavyweight feel in a compact form.

By concentrating 1.9 kg of dense silicone into key zones, she offers convincing warmth, weight, and body-like responsiveness—matching the presence of a larger form without the storage or upkeep.

  • 1.9kg — concentrated in bust and hip zones for maximum realism
  • More compact than a full-size sex doll — 30cm height, discreet storage
  • Heavier than a standard pocket onahole — authentic bodily presence
  • Easy to clean — anti-oil silicone requires minimal maintenance

Dual-Channel Matrix: Extracting Every Drop of Your Energy

futa sex dollfuta sex doll

Why settle for a singular sensation? To ensure Mino fully honors her insatiable appetite, we engineered an exhaustively deep, dual-channel matrix capable of delivering two distinctly different experiences.

  • Anterior Futa Channel — 13 cm: Complex textured walls with wrapping sensation and rhythmic suction. Designed to simulate a deeply dominant, overwhelming presence.
  • Posterior Anal Channel — 11 cm: Tighter, high-pressure friction with push-back resistance. Located within the thick, resilient tanuki hips for intense grip feedback.
  • Both channels accessible from a single compact 24cm torso unit
  • Independent tunnel geometry — each channel engineered for a distinct stimulation profile

Together, these dual passages allow for an infinite variety of angles, rhythms, and fantasies, ensuring that this futa sex doll answers every craving with consistent, yielding performance.

Technical Specifications &Character Lore Database

futa sex doll

Specification Verified Details
Official Name Mino Co-Brand Mini Sex Torso
Creator / Artist TheHelmetGuy
Base Material Premium Anti-Oil Silicone (Zero-leakage, medical-grade)
Total Weight 1.9 kg
Overall Height 30 cm
Bust Measurement 40 cm
Waist Measurement 20 cm
Hip Measurement 32 cm
Anterior Channel 13 cm Futa Entrance (complex textured walls)
Posterior Channel 11 cm Anal Entrance (high-pressure gripping mechanism)
Shipping Status In Stock — ready for immediate dispatch

Character Profile — Know Your Predator

Mino isn't just a product; she's an experience. Understanding the character behind the silicone is part of what makes this co-brand unique.

· The Vibe
She operates with a confident, cutesy, and unapologetically feminine body language. She's outgoing, loves exposing her hyper-proportions, and takes immense pleasure in encouraging her partners to completely lose control.
· The Dynamic
She will dominate the interaction most of the time, though she knows exactly how to "act" shy just to tease you further. You aren't just a user; you are a plaything she intends to eat up.
· A Message from the Creator
"She's no lucky cat but probably better… keep her fed and all that is good will follow~"

Frequently Asked Questions

Does the massive 37cm bust and 1.8kg weight make the Mino futa onahole difficult to handle?
No. The "headless" design specifically concentrates the 1.8kg weight into the core bust and hip region, making the product exceptionally stable during use. At 24cm in height, it is compact enough to maneuver with one hand and store in a discreet space.
What is the advantage of Anti-Oil Silicone over standard TPE material?
Unlike TPE (thermoplastic elastomer), which continuously leaches sticky mineral oils and degrades over time, premium anti-oil silicone requires no powdering, maintains a lifelike skin texture, and is significantly more durable against repeated use. It is also non-porous, which means bacteria cannot accumulate inside the material itself.
Are both the Futa and Anal channels textured differently?
Yes. The dual-channel matrix provides two entirely distinct experiences. The 12cm anterior futa channel features complex wrapping and rhythmic suction geometry. The 12cm posterior anal channel provides a significantly tighter, high-pressure friction environment with push-back resistance. Both channels are 12cm in depth but share no internal topology.
How do I clean and maintain the Mino onahole?
Anti-oil silicone is straightforward to clean. Rinse each channel thoroughly with warm water after use. A mild, fragrance-free toy cleaner can be used for deeper cleaning. Pat dry with a lint-free cloth and allow to fully air dry before storage. Avoid silicone-based lubricants, as these can degrade silicone material over time. Water-based lubricant is recommended for use.
Does the product ship with discreet packaging?
Yes. All MRL orders are shipped in plain, unmarked outer packaging with no product branding, logos, or descriptions visible on the exterior. The billing description on payment records is also discreet. If you have specific packaging or shipping concerns, please contact MRL customer support before placing your order.
Is the silicone odorless?
Premium anti-oil silicone is largely odorless. There may be a faint factory scent upon first opening, which is normal for freshly manufactured silicone products. This dissipates after the first wash. The material does not develop a persistent smell over time, unlike TPE, which is known to retain odors after extended use.
How does Mino compare to a full-size sex doll?
Mino is a mini torso, not a full-size doll. A full-size TPE or silicone sex doll typically weighs between 25kg and 50kg and costs several thousand dollars. Mino at 1.8kg is designed to deliver a realistic heavyweight experience in a compact, cost-effective, and easy-to-maintain format. She is best described as a premium alternative for users who want realistic body mass and detailed anatomy without the storage, cost, or cleaning burden of a full-size doll.
const TAG = "spz-custom-popup"; const DISPLAY_TYPE = { POPUP: "PTT_POPUP" // 弹窗 }; const API = { LIST: `/api/storefront/promotion/placement/list`, // 获取弹窗列表 REPORT: `/api/storefront/promotion/placement/data/report` // 上报数据 }; const DISPLAY_DEVICE = { PC_AND_MOBILE: "PD_PC_MOBILE", // PC和移动端 PC: "PD_PC", // PC MOBILE: "PD_MOBILE" // 移动端 }; const REPORT_EVENT = { CLICK: "PE_CLICK", // 点击事件 IMPRESSION: "PE_IMPRESSION" // 曝光事件 }; class SpzCustomPopup extends SPZ.BaseElement { constructor(element) { super(element); this.popupList_ = []; // 弹窗数据 this.popupZIndex = 1050; // 弹窗层级 // 节流处理 每5s内多次点击 算一次点击上报 this.throttleReport = this.win.SPZCore.Types.throttle( this.win, (data) => { this.reportData(data) }, 5000 ) } 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.fetchData_(); } // 接口请求,获取数据 fetchData_() { const id = window.SHOPLAZZA.meta.page.template_type === 51 ? window.SHOPLAZZA.meta.page.resource_id : 0; return this.xhr_.fetchJson(API.LIST, { method: 'POST', body: { page_id: window.SHOPLAZZA.meta.page.template_type, placement_type: DISPLAY_TYPE.POPUP, discount_id: id } }).then((res) => { // 请求成功 执行render this.doRender_(res.list); }).catch((err) => { console.error(err); }); } // 渲染dom doRender_(data) { this.popupList_ = data || []; if (this.popupList_.length > 0) { this.popupList_.forEach((item) => { item.config = JSON.parse(item.config); }) } return this.templates_ .findAndRenderTemplate(this.element, { list: this.popupList_ }) .then((el) => { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); this.element.appendChild(el); }) .then(() => { // 遍历显示弹窗 this.popupList_.forEach((item) => { this.showPopup_(item); }); }) } showPopup_(popup) { // 展示弹窗 符合展示条件的弹窗 const $popup = document.querySelector(`#popup-${popup.id}`); $popup && SPZ.whenApiDefined($popup).then((api)=> { const isPC = this.viewport_.getWidth() >= 960; const isMobile = this.viewport_.getWidth() < 960; const isMatchPCDevice = popup.device === DISPLAY_DEVICE.PC_AND_MOBILE || popup.device === DISPLAY_DEVICE.PC; const isMatchMobileDevice = popup.device == DISPLAY_DEVICE.PC_AND_MOBILE || popup.device === DISPLAY_DEVICE.MOBILE; if((isPC && isMatchPCDevice) || (isMobile && isMatchMobileDevice)) { // 根据推送时间 延迟展示弹窗 setTimeout(() => { api.open(); }, popup.delay_seconds * 1000); } }) } // 上报数据 async reportData(data) { this.xhr_.fetchJson(API.REPORT, { method: "POST", body: { placement_id: data.placement_id, event: data.event } }); } setupAction_() { this.registerAction('handleTrack', async(invocation) => { // 如果是主题编辑器则不用处理 if(window.top !== window.self) { return; } const data = invocation.args; const event = data.event; // 点击上报 节流处理 if(event === REPORT_EVENT.CLICK) { await this.throttleReport(data); } else { this.reportData(data); } }); } 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, SpzCustomPopup);
const TAG = "spz-custom-announcement"; const DISPLAY_TYPE = { ANNOUNCEMENT: "PTT_BANNER" // 公告栏 }; const API = { LIST: `/api/storefront/promotion/placement/list`, // 获取公告栏列表 REPORT: `/api/storefront/promotion/placement/data/report` // 上报数据 }; const DISPLAY_DEVICE = { PC_AND_MOBILE: "PD_PC_MOBILE", // PC和移动端 PC: "PD_PC", // PC MOBILE: "PD_MOBILE" // 移动端 }; const REPORT_EVENT = { CLICK: "PE_CLICK", // 点击事件 IMPRESSION: "PE_IMPRESSION" // 曝光事件 }; const POSITION = { TOP: "PP_TOP", // 顶部 BOTTOM: "PP_BOTTOM" // 底部 } const MODE = { FIXED: "PM_FIXED", // 固定 NORMAL: "PM_SCROLLING" // 滚动 } const THEME_NAME = window.SHOPLAZZA.theme.merchant_theme_name; class SpzCustomAnnouncement extends SPZ.BaseElement { constructor(element) { super(element); this.announcementList_ = []; // 公告栏数据 } 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.fetchData_(); this.createAnnouncementDom_(); this.listenCartChange_(); } fetchData_(type = '') { const id = window.SHOPLAZZA.meta.page.template_type === 51 ? window.SHOPLAZZA.meta.page.resource_id : 0; return this.xhr_.fetchJson(API.LIST, { method: 'POST', body: { page_id: window.SHOPLAZZA.meta.page.template_type, placement_type: DISPLAY_TYPE.ANNOUNCEMENT, discount_id: id } }).then((res) => { this.announcementList_ = res.list || []; if (this.announcementList_.length > 0) { this.announcementList_.forEach((item) => { item.config = JSON.parse(item.config); }); } if(type === 'cartChange') { this.announcementList_.forEach((item) => { this.updateText_(item); }); } else { this.doRender_(this.announcementList_); } }).catch((error) => { console.error(error); }) } doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, { list: this.announcementList_ }) .then((el) => { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); this.element.appendChild(el); }) .then(() => { this.announcementList_.forEach((item) => { this.showAnnouncement_(item); }); }).then(() => { this.handleThemeCompatibility_(); }); } // 更新文案 updateText_(item) { const announcement = document.querySelector(`#announcement-${item.id}`); const announcementText = announcement.querySelectorAll('.announcement_text'); const textArr = item.config.text_discount.replace_texts; const textDom = textArr.map((text) => { return `${text}`; }).join(','); announcementText.forEach((text) => { text.innerHTML = textDom; }); } // 创建公告栏dom createAnnouncementDom_() { const isHero = /Hero/.test(THEME_NAME); const isEva = /Eva/.test(THEME_NAME); const headerEl = document.querySelector('[data-section-type="header"]'); const headerSticky = headerEl && SPZCore.Dom.computedStyle(this.win, headerEl).position === 'sticky'; // 创建滚动的底部公告栏 const announcementBottomContainer = document.createElement('div'); announcementBottomContainer.className = 'announcement__container_bottom bootstrap'; document.body.appendChild(announcementBottomContainer); // 创建固定的底部公告栏 const announcementBottomSticky = document.createElement('ljs-sticky'); announcementBottomSticky.className = 'announcement__container_bottom-sticky'; announcementBottomSticky.setAttribute('layout', 'container'); announcementBottomSticky.setAttribute('position', 'bottom'); announcementBottomSticky.style.position = 'fixed'; announcementBottomSticky.style.bottom = '0'; announcementBottomSticky.style.left = '0'; announcementBottomSticky.style.right = '0'; announcementBottomSticky.style.zIndex = '1030'; document.body.appendChild(announcementBottomSticky); const announcementTopContainer = document.createElement('div'); announcementTopContainer.classList.add('announcement__container_top'); if (isHero) { announcementTopContainer.classList.add('announcement__container_top_zIndex_1030'); } announcementTopContainer.classList.add('bootstrap'); document.body.insertBefore(announcementTopContainer, document.body.children[0]); const announcementTopFixedContainer = document.createElement('div'); announcementTopFixedContainer.classList.add('announcement__container_top-fixed'); if (isHero) { announcementTopFixedContainer.classList.add('announcement__container_top_zIndex_1030'); } announcementTopFixedContainer.classList.add('bootstrap'); const insertBeforeElement = headerSticky ? headerEl : document.body; insertBeforeElement.insertBefore(announcementTopFixedContainer, insertBeforeElement.children[0]); if (isEva) { const evaHeader = document.querySelector('header.header'); const isEvaMaskHeader = evaHeader && SPZCore.Dom.computedStyle(this.win, evaHeader).position === 'absolute'; let fixedBannerTopContainer = document.querySelector('.announcement__container_top-fixed'); if (isEvaMaskHeader) { if (fixedBannerTopContainer) { fixedBannerTopContainer.remove(); } const newBanner = document.createElement('div'); newBanner.className = 'announcement__container_top-fixed bootstrap'; document.body.insertBefore(newBanner, document.body.firstChild); fixedBannerTopContainer = newBanner; } else { if (!headerEl) return; const observer = new MutationObserver(() => { const isSticky = SPZCore.Dom.computedStyle(this.win, headerEl).position === 'sticky'; if (!isSticky) return; const isTopFixedAnnouncementInHeader = headerEl.querySelector('.announcement__container_top-fixed'); if (isTopFixedAnnouncementInHeader) return; const announcementTopFixedContainer = document.querySelector('.announcement__container_top-fixed'); if (announcementTopFixedContainer) { announcementTopFixedContainer.remove(); headerEl.insertBefore(announcementTopFixedContainer, headerEl.children[0]); observer.disconnect(); } }); observer.observe(headerEl, { attributes: true, attributeFilter: ['style', 'class'] }); } if (headerSticky && !isEvaMaskHeader && fixedBannerTopContainer) { fixedBannerTopContainer.style.position = 'relative'; fixedBannerTopContainer.style.zIndex = '29'; } } } // 展示公告栏 showAnnouncement_(item) { const announcement = document.querySelector(`#announcement-${item.id}`); const announcementBottomContainer = document.querySelector('.announcement__container_bottom'); const announcementBottomSticky = document.querySelector('.announcement__container_bottom-sticky'); const announcementTopContainer = document.querySelector('.announcement__container_top'); const announcementTopFixedContainer = document.querySelector('.announcement__container_top-fixed'); const isPC = this.viewport_.getWidth() >= 960; const isMobile = this.viewport_.getWidth() < 960; const isMatchPCDevice = item.device === DISPLAY_DEVICE.PC_AND_MOBILE || item.device === DISPLAY_DEVICE.PC; const isMatchMobileDevice = item.device == DISPLAY_DEVICE.PC_AND_MOBILE || item.device === DISPLAY_DEVICE.MOBILE; if((isPC && isMatchPCDevice) || (isMobile && isMatchMobileDevice)) { if (item.position === POSITION.BOTTOM) { if(item.mode === MODE.FIXED) { announcementBottomSticky && announcementBottomSticky.appendChild(announcement); } else { announcementBottomContainer && announcementBottomContainer.appendChild(announcement); } } else { if (item.mode === MODE.FIXED) { announcementTopFixedContainer && announcementTopFixedContainer.appendChild(announcement); } else { announcementTopContainer && announcementTopContainer.appendChild(announcement); } } this.reportData({ placement_id: item.id, event: REPORT_EVENT.IMPRESSION }); } } // 处理主题兼容 handleThemeCompatibility_() { try { const isBoost = /Boost/.test(THEME_NAME); const isHyde = /Hyde/.test(THEME_NAME); const isEva = /Eva/.test(THEME_NAME); const boostHeader = document.querySelector('.boost-header'); const fixedBannerTopContainer = document.querySelector('.announcement__container_top-fixed'); const notFixedBannerTopContainer = document.querySelector('.announcement__container_top'); const headerEl = document.querySelector('[data-section-type="header"]'); const headerSticky = headerEl && SPZCore.Dom.computedStyle(this.win, headerEl).position === 'sticky'; const header = document.querySelector('.header__fixed') || document.querySelector('.header__wrapper'); const headerFixed = header && SPZCore.Dom.computedStyle(this.win, header).position === 'fixed'; const handleScroll = SPZCore.Types.throttle(this.win, () => { if (isHyde) { if (header && headerSticky) { header.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } } if (isEva) { const evaHeader = document.querySelector('header.header'); const isEvaMaskHeader = evaHeader && SPZCore.Dom.computedStyle(this.win, evaHeader).position === 'absolute'; if (!isEvaMaskHeader) return; if (evaHeader.classList.contains('header__fixed')) { evaHeader.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } if(document.documentElement.scrollTop === 0) { evaHeader.style.marginTop = '0'; } } if (headerSticky) return; if (headerFixed) { header.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { const observer = new MutationObserver((mutationsList, observer) => { for (const mutation of mutationsList) { if (mutation.type === 'childList' && fixedBannerTopContainer.childElementCount > 0) { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; observer.disconnect(); // 停止观察 break; } } }); // 开始观察 fixedBannerTopContainer 的子节点变化 observer.observe(fixedBannerTopContainer, { childList: true, subtree: true }); // 初始检查 if (fixedBannerTopContainer.childElementCount > 0) { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } if(header) { header.style.marginTop = '0'; } } if (isBoost) { fixedBannerTopContainer.style.zIndex = '1031'; if (boostHeader && boostHeader.classList.contains('header__fixed')) { boostHeader.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } else { notFixedBannerTopContainer.style.marginTop = `${fixedBannerTopContainer.offsetHeight}px`; } } }, 16); window.addEventListener('scroll', handleScroll); window.dispatchEvent(new Event('scroll')); } catch (error) { console.error('error', error); } } // 上报数据 async reportData(data) { // 如果是主题编辑器则不用处理 if(window.top !== window.self) { return; } this.xhr_.fetchJson(API.REPORT, { method: "POST", body: { placement_id: data.placement_id, event: data.event } }); } // 监听购物车变化事件dj.cartChange listenCartChange_() { SPZUtils.Event.listen(document, 'dj.cartChange', (event) => { this.fetchData_('cartChange'); }); } setupAction_() { this.registerAction('handleClose', (invocation) => { const data = invocation.args; const id = data.id; const announcement = document.querySelector(`#announcement-${id}`); announcement && SPZCore.Dom.removeElement(announcement); window.dispatchEvent(new Event('scroll')); }); this.registerAction('handleJumpLink', (invocation) => { const data = invocation.args; if(!data.show_url) return; data.url && window.open(data.url, data.open_new_window ? '_blank' : '_self'); this.reportData({ placement_id: data.id, event: REPORT_EVENT.CLICK }); }); } 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, SpzCustomAnnouncement);