šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF
šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF

šŸ”„2023 Hot SalešŸ”„Backless Body Shaper Bra - Promotion 50% OFF

Price

$59.98 $29.99
Save $29.99
Free shipping on orders over 69.9

color

Please select a color

size

Please select a size

Quantity

Free returns
Sustainably made
Secure payments

Our New Backless Body Bra Has The Internet Turning Heads!

It amplifies your natural silhouette and provides a seamless look under all of your outfits. Truly a "must-have"!

Get ready to show your back.

Thousands Of Women Are Obsessed

šŸ‘—  Shapewear With Deep V-Neck And Backless Design, Underwire Cups. Commonly Worn Under Wedding Dresses, Party Dresses, And A Variety Of Low-Cut Outfits And Necklines.

undefined

Stretchy Fabric For Easy Put On

šŸ’žSeamless Design For Invisible Underneath Any Type Of Clothing. Open Crotch Design For Convenient Bathroom Use. Silicone Band Holds Garment In Place. There Is A Pair Of Extra-Longer Straps For Better Adjust And Fit.

undefined

Wear Anything With Confidence

Show your back with confidence. Don't worry about loose silicone pads or boob tape that will come off when you sweat. Our backless body shaper will give you the support you need, all day and all night long. The shaper comes with extra clear straps and underwire support.

undefined

Before Our Peachy Bodysuit & After!

See how perfect you can look with our New & Improved Backless bodysuit.  Specially designed to move with your body, Silky Velvet feel! Sit, dance, and stretch with ease.

Backless Body Shapers is to help women quickly create a beautiful body shape in daily life, showing their beauty and confidence. You can wear our shapewear in your favorite costumes for daily life, study, and cocktail receptions. Put on our daily wear series, hide the belly of the abdomen, and instantly shape the body.

undefined

Q&A

Q: If ur 34 ddd, 136 lbs 5' 7 what size would one need?

Answer: Dear customer, please choose the proper size according to our size chart, if you have a long torso or a plump body, a large size could be better for you.

Q: Are the straps removable?

Answer: Of course, Hi, the straps could be removed if you don't like them.

Q: The size chart recommends a medium for 34D. Do the cups run small??

Answer: Hi, we'd recommend a larger size if you have a plumpy or short torso, if the size does not fit, please apply a replacement. Wish you have a good day.

Q: Does this help with your tummy support??

Answer: Hi, it will do some help with tummy support, unlike traditional shapewear, we suggest you wear it under any type of clothes such as casual outfits to parties, cocktails, wedding dresses or gowns, and more.

Q: Can you see the outlines through a dress?

Answer: Hi, please don't worry, this bodysuit fits well with the dress.

What Makes Us So Special

  • Multiple styling options: The straps can be adjusted to be worn with halter style dresses, low-plunge front, and criss-cross styles
  • Removable invisible straps: Completely seamless and unnoticeable.
  • Designed to move with your body: Sit, dance, and stretch with ease.
  • Push-Up underwire: For a supported and lifted bust and a serious cleavage boost
  • Sticky adhesives: To keep the garment attached to your body without it slipping off
  • Seamless thong back with hook & eye closure: Smoothes out camel toe and gives you easy bathroom access

äøę˜Žē”®ēš„

Specification

  • 1 / 2 x Backless Body Shapers 
  • Main fabric compositionļ¼š Nylon 85%
  • Functionļ¼š Gathering, butt lift, body sculpting, chest support
  • Thicknessļ¼š Ordinary

PAYMENT

  • Payments Via PayPal® and CreditCard
  • To protect consumer rights, the store uses Paypal to pay. If there is any problem with the product, you can appeal to Paypal. Please rest assured to buy!

SHIPPING

  • We would greatly appreciate your patience and understanding as we work to meet demand while ensuring that every piece meets our high-quality standards.

/** @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-1718252090972').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);
class SpzSmartBlockComponent extends SPZ.BaseElement { constructor(element) { super(element); this.templates_ = null; this.container_ = null; this.i18n_ = {}; this.config_ = {}; this.show_type_ = 3; this.product_resource_id_ = ''; this.collection_resource_id_ = ''; this.cart_items_ = []; this.customer_id_ = ''; this.order_id_ = ''; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { const template_type = window.SHOPLAZZA.meta.page.template_type; if (template_type === 1) { this.show_type_ = 3; this.product_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 2) { this.show_type_ = 4; this.collection_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 15){ this.show_type_ = 5; } else if (template_type === 13){ this.show_type_ = 6; } else if (template_type === 20){ this.show_type_ = 7; this.customer_id_ = window.SHOPLAZZA.customer.customer_id; } else if (template_type === 35){ this.show_type_ = 8; this.order_id_ = window.location.pathname.split('/').pop(); } this.templates_ = SPZServices.templatesForDoc(this.element); this.setAction_(); } mountCallback() { console.log('smart mounted'); const that = this; const themeName = window.SHOPLAZZA.theme.merchant_theme_name; const isGeek = /Geek/.test(themeName); this.fetchRules().then((res) => { if (res && res.rules && res.rules.length) { const blockEl = document.getElementById('smart_recommend_block'); SPZ.whenApiDefined(blockEl).then((api) => { api.render({data: res}, true).then(() => { if (isGeek && that.show_type_ === 6) { blockEl.querySelector('.plugin_container_wrpper').style.padding = '30px 0'; } const recommendStyle = document.createElement('style'); recommendStyle.innerHTML = ` .plugin__recommend_container,.app-recommend-card { display: none !important; } `; document.head.appendChild(recommendStyle); const fetchList = []; res.rules.forEach((rule) => { fetchList.push(this.fetchRuleProductList(rule.id)); }); const fetchAll = Promise.all(fetchList); fetchAll.then((p_res) => { res.rules.forEach((rule, index) => { rule.products = p_res[index] && p_res[index].products; const ruleEl = document.getElementById('smart_recommend_rule_' + rule.id); SPZ.whenApiDefined(ruleEl).then((api) => { api.render({data: rule}, true).then(() => { that.impressListen(`#smart_recommend_rule_ul_${rule.id}`, function(){ that.trackRuleImpress(rule); }); const btnElList = document.querySelectorAll(`#smart_recommend_rule_ul_${rule.id} button`); btnElList.forEach((btnEl) => { if (btnEl && rule.config && rule.config.quick_shop_button_bg_color && rule.config.quick_shop_button_text_color) { btnEl.style.backgroundColor = rule.config.quick_shop_button_bg_color; btnEl.style.color = rule.config.quick_shop_button_text_color; } }) }); }); }); }); }) }) } else { if (window.top !== window.self) { const template_type = window.SHOPLAZZA.meta.page.template_type; const holderEl = document.getElementById('smart_recommend_preview_no_data_placeholder'); SPZ.whenApiDefined(holderEl).then((api) => { api.render({data: { isCart: template_type === 13, isCollection: template_type === 2, isProduct: template_type === 1, isIndex: template_type === 15 }}, true); }); } } }); } setAction_() { this.registerAction('quickShop', (data) => { const that = this; const product_id = data.args.product_id; const productIndex = data.args.productIndex; const rule_id = data.args.rule_id; const ssp = data.args.ssp; const scm = data.args.scm; const cfb = data.args.cfb; const ifb = data.args.ifb; const modalRender = document.getElementById('smart_recommend_product_modal_render'); if (product_id) { this.fetchProductData(product_id).then((res) => { const product = res.products && res.products.length && res.products[0] || {}; product.cfb = cfb; product.ifb = ifb; SPZ.whenApiDefined(modalRender).then((api) => { api.render({product: product, productIndex: productIndex, rule_id: rule_id, ssp: ssp, scm: scm, show_type: that.show_type_}, true).then(() => { const modalEl = document.getElementById('smart_recommend_product_modal'); SPZ.whenApiDefined(modalEl).then((modal) => { that.impressListen('#smart_recommend_product_modal', function(){ that.trackQuickShop({ rule_id: rule_id, product_id: product_id }); }); modal.open(); }); const formEl = document.getElementById('smart_recommend_product_form'); SPZ.whenApiDefined(formEl).then((form) => { form.setProduct(product); }); const variantEl = document.getElementById('smart_recommend_product_variants'); SPZ.whenApiDefined(variantEl).then((variant) => { variant.handleRender(product); }); }); }) }); } }); this.registerAction('handleScroll', (data) => { this.directTo(data.args.rule_id, data.args.direction); }); this.registerAction('handleProductChange', (data) => { const variant = data.args.data.variant; const product = data.args.data.product; const imageRenderEl = document.getElementById('smart_recommend_product_image'); SPZ.whenApiDefined(imageRenderEl).then((api) => { api.render({ variant: variant, product: product }, true); }); }); this.registerAction('handleAtcSuccess', (detail) => { const data = detail.args; data.data.product = data.data.product || {}; data.data.variant = data.data.variant || {}; const product_id = data.data.product.id; const product_title = data.data.product.title; const variant_id = data.data.variant.id; const price = data.data.variant.price; const rule_id = data.rule_id; const aid = `smart_recommend.${this.show_type_}.${rule_id}`; const ifb = data.data.product.ifb; const cfb = data.data.product.cfb; const ssp = data.ssp; const scm = data.scm; const spm = `smart_recommend_${this.show_type_}.${data.spmIndex}`; const params = { id: product_id, product_id: product_id, number: 1, name: product_title, variant_id: variant_id, childrenId: variant_id, item_price: price, source: 'add_to_cart', _extra: { aid: aid, ifb: ifb, cfb: cfb, scm: scm, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, ssp: ssp, } }; this.tranckAddToCart(params); }); this.registerAction('addATCHook', (data) => { const params = data.args; const spm = `smart_recommend_${this.show_type_}.${params.spmIndex}`; this.myInterceptor_ = window.djInterceptors && window.djInterceptors.track.use({ event: 'dj.addToCart', params: { aid: `smart_recommend.${this.show_type_}.` + params.rule_id, ssp: params.ssp, scm: params.scm, cfb: params.cfb, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, }, once: true }); }); } tranckAddToCart(detail) { if (window.$) { window.$(document.body).trigger('dj.addToCart', detail); } } fetchRules() { const payload = { show_type: this.show_type_, }; let that = this; if (this.show_type_ === 6) { let line_items = []; return this.fetchCart().then((res) => { if (res && res.cart && res.cart.line_items) { line_items = res.cart.line_items.map((item) => { return { product_id: item.product_id, variant_id: item.variant_id, quantity: item.quantity, price: item.price } }); } payload.line_items = line_items; that.cart_items_ = line_items; return that.fetchRulesRequest(payload); }); } else { if (this.show_type_ === 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; } else if (this.show_type_ === 4) { payload.collection_id = this.collection_resource_id_; } else if (this.show_type_ === 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) { payload.order_id = this.order_id_; } return this.fetchRulesRequest(payload); } } fetchRulesRequest(payload) { return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_query", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).then(function(res){ if(res.ok){ return res.json(); } }); } fetchCart() { return fetch(`/api/cart/cart-select?r=${Math.random().toString(36).slice(-4)}`) .then((res) => { if (res.ok) { return res.json(); } }); } fetchRuleProductList(rule_id) { const payload = { page: 1, limit: 100, fields: ["title", "url", "image", "min_price_variant.price", "min_price_variant.compare_at_price"], rule_id: rule_id, }; if (this.show_type_ === 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; } else if (this.show_type_ === 4) { payload.collection_id = this.collection_resource_id_; } else if (this.show_type_ === 6) { payload.line_items = this.cart_items_; } else if (this.show_type_ === 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) { payload.order_id = this.order_id_; } return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_products", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).then(function(res){ if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); }); } fetchProductData(product_id) { return fetch(window.SHOPLAZZA.routes.root + "/api/possum/products", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ product_ids: [product_id], fields: [ "images", "options", "min_price_variant", "variants"] }) }).then(function(res){ if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); const loadingEl = document.getElementById('smart_recommend_loading'); if (loadingEl) { loadingEl.style.display = 'none'; } }); } getStyle(ele, style) { if (!ele) return; if (window.getComputedStyle) { return window.getComputedStyle(ele)[style]; } return ele.currentStyle[style]; } directTo(id, direction) { const scrollElement = document.getElementById(`smart_recommend_rule_ul_${id}`); const blockWidth = parseInt(this.getStyle(scrollElement, 'width')); const scrollLength = (blockWidth * 0.19 - 12) * 5; const scrollPoint = scrollElement.scrollWidth - scrollElement.clientWidth; if (!scrollElement) return; if (direction === 'left') { if (document.dir === 'rtl') { scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) >= scrollPoint - 100 ? 0 : scrollElement.scrollLeft - scrollLength, behavior: 'smooth' }); return; } scrollElement.scrollTo({ left: Math.max(scrollElement.scrollLeft - scrollLength, 0), behavior: 'smooth' }); } else { if (document.dir === 'rtl') { scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) >= scrollPoint + 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); return; } scrollElement.scrollTo({ left: scrollElement.scrollLeft >= scrollPoint - 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); } } trackRuleImpress(rule) { if (window.sa && window.sa.track) { window.sa.track("plugin_common", { plugin_name: "upsell", event_type: "impressions", rule_id: rule.id, ssp: rule.ssp, scm: rule.scm, show_type: this.show_type_, support_app_block: window.SHOPLAZZA.theme.support_app_block }); window.sa.track("module_impressions", { aid: `smart_recommend.${this.show_type_}.${rule.id}`, support_app_block: window.SHOPLAZZA.theme.support_app_block }); } } trackQuickShop(data) { window.sa && sa.track && sa.track("plugin_common", { plugin_name: "upsell", event_type: "quick_shop", rule_id: data.rule_id, product_id: data.product_id, show_type: this.show_type_, }); } impressListen(selector, cb) { const el = document.querySelector(selector); const onImpress = (e) => { if (e) { e.stopPropagation(); } cb(); }; if (el && !el.getAttribute('imprsd')) { el.addEventListener('impress', onImpress) } else if (el) { onImpress(); } } } SPZ.defineElement('spz-custom-smart-block', SpzSmartBlockComponent);