✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
1/20
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑
1/20

✨2024 New Comfortable Back Smoothing Bra⏰50%Off 3 Days To Go👑

$29.99
$59.98
Save $29.99
⏰50%Off 3 Days To Go⏰
Please select a ⏰50%off 3 days to go⏰
Band
Please select a band
Cup
Please select a cup
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);


💝99.2% of Reviewers Recommends This Product.
🌎 Over $59.99 for free delivery worldwide
🛒 Tracking number for every order
💯 Payments Via PayPal® and Credit Card
⭐ Returns>>100% Money Back Guarantee

Our goods are authentic, with genuine patents, counterfeit must be investigated! Customers please identify our products

It will sell out fast, Enjoy a discount now!!⚡Please make sure to buy enough quantity before we increase the price!!!🔥


ANNOUNCEMENT:

The buy one get one free promotion has ended, but due to many customers' feedback and their desire to make repeat purchases, we are pleased to announce a continued special offer.

As a token of appreciation for your support, our exclusive underwear will now be available at a 50% discount for the next 3 days!

IMPORTANT STATEMENT:

  • At present, there are many low-priced imitation products on the market, please look for the official store to buy: (We will not be responsible for refunds after purchases from other stores)

100% CUSTOMER SATISFACTION GUARANTEED: If you think the size is not suitable for you, or the quality is not good enough, please contact us within 15 days after receipt, we will give you the best help!Please don't worry!

If you don’t know the size of your Bra, you can order it by weight. You can also order it according to the size chart.👇👇


Always looking for chest support?Still bothered by the curl on your back?  

Say goodbye to worries! Our bras will bring you confidence and health

TELL ME - WHY CHOOSE YOUR BRAS?

It's simple, our bras come with 6 exclusive benefits.

✅Hook and Eye closure.
✅Made of top-graded shaping fabric that offer the best shaping experience, excellent support to provide natural push-up effect.
✅Full back covarage to hide your back and side fat, help you correct your posture and shape your upper body.
Will not roll up with the side rods, 100% safe to your skin, comfortable for all-day wearing.
✅Adjustable widened straps, reduce pressure and hurts to your shoulders, also fit plus size women.
✅Suitable for daily use, posture improving, upper body shaping and wearing under dress to show your sexy figure.

Made of top-notch fabrics that offer the best shaping experience. This compression bra helps to improve posture.You can use my Fashion Bra every day, it's so comfortable, you'll hardly notice you're wearing it. It will instantly improve your posture by helping you relieve tension in your back and neck. 

(Improve posture by pulling your shoulders upright & pushing your chest forward.)

Bra with shapewear incorporated

✅Smooth back.

✅Full back coverage.

✅Natural push up.

BREATHABLE & MOISTURE-WICKING
With 360 stretchy light and moisture-wicking fabric, this bra will keep you cool and comfortable all day long.

Made of top-notch fabrics that offer the best shaping experience

It is made with Powernet in the back area which allows for more compression and support. This bra helps to hide back fat, side bra bulge, and gives a lift while on! A3/4 cup design that provides better coverage and lifts breasts. Full-back coverage for added support and relief. No curling on the back!!!

Minimize back fat really good!

The design of 5D seamed cups, wide side wings, strong cushioned shoulder straps, and U-shape back panel ensures maximum support against sagging while smoothing back bulges and correcting armpit fats for a flattering silhouette.

最后一天买1送1女式深杯胸隐藏背部脂肪全背部覆盖推起胸罩与塑身衣合并1

Every moment is free

No matter what your body type is, our bras will fit snugly, no more side boob troubles!

ABOUT THIS ITEM

Convertible: Adjustable multiway straps can be worn classic, criss-cross, halter, or go strapless. 3-level adjustable back hook closure

Excellent Support: Anti-slip grip lining along the top of the cups for strapless support. Supportive side boning holds everything in place

Special Design: Contour cups with built-in foam padding for a slight push-up effect. Secret straps in cups center your bust

Main Fabric: 82.5% nylon and the lining 17.5% (%) nylon  High compression.

⭐⭐Real reviews from customers ⭐⭐

"These are wonderful!! It hides my back fat perfectly and the hooks put on and take off handily,I'll never need my husband's help again!!"

⭐⭐⭐⭐⭐ — Penney A.

This bra is really good, my back flattened after wearing it and it made my body proportions more perfect! ! !

⭐⭐⭐⭐⭐ -- DeLawrence

undefined

After wearing it, my breasts became firmer and my back was smoother. The store's size is very standard, I like it very much.

⭐⭐⭐⭐⭐ --Kady

undefined

According to a study by the World Health Organization: the average life expectancy of underwear should not exceed six months, and regular underwear replacement is also necessary to protect women's health.

CUSTOMER QUESTIONS & ANSWERS

Question: How can I know my size?How to measure it?

Answer: Step 1,Measure your band size Place the measuring tape around your ribcage, right underneath the band of your bra.Make sure it is pulled tight but is not uncomfortable and that the tape is level.Make a note of how many inches you are.If you land on an even number this is your band size.If you land on an odd number, you’ll want to round up or round down to the nearest even number based on your build. Step 2,Measure your bust size Place the measuring tape around the fullest part of your bust(at nipple level),making sure to hold the measuring tape snugly against you and parallel to the ground. You won’t need to pull the tape particularly tight for this measurement it just needs to sit flat.Make a note of how many inches you are.If it falls on the half-inch, just round up. That’s your bust size! Step 3,Determine Your Cup Size Minus your band size from your cup size and make a note of this value.This difference indicates your cup.Example: 37 inches (bust) – 34 inches (band) = 3 inches. That's a 34C. 0=AA , 1=A, 2=B, 3=C, 4=D, 5=DD(E),6=DDD(F), 7=G

Question: Where are you located?/Where are those bras shipped from?

Answer: We have warehouses located all over the world and the products are delivered from the warehouse nearest to the address provided.We currently offer shipping to the United States, Canada, United Kingdom and Australia.

Question: Are the cups unlined or padded?

Answer: Underwire contour cups with built-in foam padding.

Question: Are the straps removable?

Answer: Of course, the underwear straps are freely adjustable and removable.

Question: Does it have underwires?

Answer: Yes,it has an underwire.

Question: How many hook and eye closures are on the back? It seems like it would be hard to hook them all.

Answer: There are more than normal, but not difficult. It’s assists with back fat and side spillage.

WHY US?👇

  • We work directly with manufacturers all over the world to ensure the best quality of our products. We have a Quality Control department which helps us to keep our promise!
  • Price is always competitive.
  • Awesome Customer Service
  • Amazing products along with High Quality

⚡Click On "ADD TO CART" To Get Yours Now!

✨OUR GUARANTEE✨


✅We truly believe we make some of the most innovative products in the world, and we want to make sure we back that up with a risk-free ironclad 45-day guarantee.

✅If you don't have a positive experience for ANY reason, we will do WHATEVER it takes to make sure you are 100% satisfied with your purchase.

✅Buying items online can be a daunting task, so we want you to realize that there is an absolute ZERO risk in buying something and trying it out. If you don't like it, no hard feelings we'll make it right.

✅We have 24/7/365 Ticket and Email Support.

WHY US?👇

  • We work directly with manufacturers all over the world to ensure the best quality of our products. We have a Quality Control department which helps us to keep our promise!
  • Price is always competitive.
  • Awesome Customer Service
  • Amazing products along with High Quality
  • Read reviews from our lovely customers

🔥 The price is limited! 🔥 Grab yours as the limited promotion available!

✈ Worldwide Shipping ✈  

Please note that shipping is insured. However, you may receive your items earlier. Tracking Numbers will ALWAYS be sent so you can track it every step of the way! Cool things are worth waiting for! 😉

🔒 100% Risk-Free Purchase 🔥 

  • We truly offer stunning, trendy high-quality products in the world.
  • We will do WHATEVER it takes with outstanding customer service support to assist everyone.
  • If you are not satisfied with receiving the goods, you can apply for a refund.
  • You can pay with PayPal, which will protect your money.

✅Payments Via PayPal®, Credit and Debit cards.

If you want to checkout with a Credit and Debit Card, just enter your * Card No, * Expiration Date, and * CVV.
f34603c6042c7802af86fc595826003b48c8f721fa4f1ffa117ffea06bd06849.png
153a0932404b13aa72f600fa0f9237172d5147ac6302b2183812028339748e9c.png
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);