See all offers
Free Shipping on Orders over $79 & Hassle-Free Returns!
Free Shipping on Orders over $79 & Hassle-Free Returns!
Save $10 on $79+ CODE: RYC10
Save $10 on $79+ CODE: RYC10
Free Shipping on Orders over $79 & Hassle-Free Returns!
Save $10 on $79+ CODE: RYC10
Free Shipping on Orders over $79 & Hassle-Free Returns!
Save $10 on $79+ CODE: RYC10
See all offers (2)
See all offers (2)
Best Sellers
New
Shapewear
STYLE
Body Shaper
Bodysuit
Butt Lifter
Waist Trainer
Shaper Leggings
Posture Corrector
CONTROL AREA
Tummy and Belly
Hips and Butt
Legs and Thighs
Arms
Overall
Back
COMPRESSION LEVEL
Hook-eye Control
Zipper Control
Seamless
Pants
Jeans
Pantyhose
Leather Pants
Cargo Pants
Yoga Pants
Suit Pants
Casual Pants
Rompers
Sets
Bra & Underwear
Bras
Underwear
Skirt
Denim Skirt
Yoga Skirt
Yoga
Yoga Pants
Leotards and Jumpsuits
Yoga Skirt
Swimwear
All Swimwears
Shaping Swimwear
Accessories
Service Center
DISCOVER CURVYFAJA
About Us
Payment Methods
Blogs
FAQS
Contact Us
Ordering
Tracking Order
Shipping
Return Policy
Sizing Guide
More links
Log in
Create an account
${(data.data && data.data.count) > 999 ? '999+' : (data.data && data.data.count)}
${(data.data && data.data.count) > 999 ? '999+' : (data.data && data.data.count)}
Search
Best Sellers
New
Shapewear
Shapewear
STYLE
STYLE
Body Shaper
Bodysuit
Butt Lifter
Waist Trainer
Shaper Leggings
Posture Corrector
CONTROL AREA
CONTROL AREA
Tummy and Belly
Hips and Butt
Legs and Thighs
Arms
Overall
Back
COMPRESSION LEVEL
COMPRESSION LEVEL
Hook-eye Control
Zipper Control
Seamless
Pants
Pants
Jeans
Pantyhose
Leather Pants
Cargo Pants
Yoga Pants
Suit Pants
Casual Pants
Rompers
Sets
Bra & Underwear
Bra & Underwear
Bras
Underwear
Skirt
Skirt
Denim Skirt
Yoga Skirt
Yoga
Yoga
Yoga Pants
Leotards and Jumpsuits
Yoga Skirt
Swimwear
Swimwear
All Swimwears
Shaping Swimwear
Accessories
Service Center
Service Center
DISCOVER CURVYFAJA
DISCOVER CURVYFAJA
About Us
Payment Methods
Blogs
FAQS
FAQS
Contact Us
Ordering
Tracking Order
Shipping
Return Policy
Sizing Guide
Log in
function setSearchUrl(searchValue) { return Promise.resolve({ url: '/search?q=' + searchValue }); } exportFunction('setSearchUrl', setSearchUrl);
Top search terms
${function() { if (data === undefined || typeof data !== 'string' || data == '') return ''; const searchEmpty = ("Your search for \"{test}\" did not yield any results.").replace('{test}', data); return `
View more
${searchEmpty}
`; }()}
Login
Please enter email and password.
${data.errors && data.errors[0]}
Email
Email is required.
Enter a valid email address
Password
Password is required.
Password must be between 6-16 characters long.
Forgot password?
Sign in
Don't have an account?
Create one
${ Object.keys((data && data.login_setting) || {}) .map(type => `
`) .join("") }
Login for more discounts
${function() { const force_image_size = "natural"; const product_hover_on = true; const product_show_sale_label = false; const product_save_type = "amount"; const badge1 = ""; const badge2 = ""; const badge3 = ""; const product_title_mobile_hide = false; const product_title_style = "hide"; const enable_collection_thumb_image = true; const variantNames = ["color"]; const thumbMaxNum = 6; const suffix_id = Math.random().toFixed(6).slice(-6); const url = data.withinUrl; const productId = data.id; const price = data.price; const productAvailable = data.available; const productVariants = data.variants || []; const images = data.images || []; const image = data.image || {}; const imageWidth = image.width; let imageHeight = image.height; let image2 = data.secondImage; let imageHoverOn = !!image2.src; if (force_image_size !== 'natural') { imageHeight = imageWidth * force_image_size; } let compareAtPrice = data.compare_at_price; let offRatio = data.off_ratio; let discountMaxUrl = url; const showFrom = data.price_min != data.price_max ? true : false; for (let i = 0; i < productVariants.length; i++) { const variant = productVariants[i]; if (variant.price == price && compareAtPrice < variant.compare_at_price) { compareAtPrice = variant.compare_at_price; offRatio = variant.off_ratio; variant.available && (discountMaxUrl = variant.withinUrl); } } const soldOutText = "Sold out"; let soldOn = false; let saleOn = false; if (productAvailable) { if (product_show_sale_label && +price < +compareAtPrice) { saleOn = true; } } else { soldOn = true; } const diffPrice = compareAtPrice - price; const saveLabelContent = product_save_type == 'percent' ? (offRatio + '%') : `
`; let saveText = "Save {off_ratio}"; saveText = saveText.replace('{off_ratio}', saveLabelContent); const productTitle = data.title; const variantValues = []; const showVariants = []; if (data.need_variant_image && enable_collection_thumb_image && variantNames.length > 0) { for (let i = 0; i < (data.options || []).length; i++) { const option = data.options[i]; const optionName = option.name.toLowerCase(); if (variantNames.includes(optionName)) { for (let j = 0; j < productVariants.length; j++) { const variant = productVariants[j]; const value = variant.options[i].value; if (!variantValues.includes(value)) { variantValues.push(value); showVariants.push(variant); } } break; } } } return `
${saleOn ? saveText : soldOutText}
${badge1}
${badge2}
${badge3}
${ "title" === 'subtitle' ? data.brief : data.title }
From
${showVariants.map((item, idx) => { let showMoreHtml = ''; if (idx == thumbMaxNum) { showMoreHtml += `
+${showVariants.length - thumbMaxNum}
`; } return ` ${showMoreHtml}
`; }).join('') }
`; }()}
${function() { const defaultSelectedVariant = data.variants.find(v => v.available) || data.variants[0]; const defaultIndex = !!defaultSelectedVariant ? data.images.findIndex(img => img.src == (defaultSelectedVariant.image && defaultSelectedVariant.image.src)) : -1; const initialSlide = defaultIndex == -1 ? 0 : defaultIndex; const attrs = data.images.length > 1 ? 'slide controls' : ''; return `
`; }()}
${data.title}
${data.brief}
${function() { const defaultSelectedVariant = data.variants.find(v => v.available) || data.variants[0]; return `
-
`; }()}
${function(){ const defaultSelectedVariant = data.variants.find(v => v.available) || data.variants[0]; let status_lan = "Add to cart"; if ((defaultSelectedVariant && !defaultSelectedVariant.available) || (!defaultSelectedVariant && !data.available)) { status_lan = "Sold out"; } return `
Quantity
${status_lan}
Buy now
` }()}
${function() { return data.product.options.map((option, index) => { const optionName = option.name || ''; const optionId = option.id || ''; let isThumbImage = !!option.showThumbImage; const thumbStyle = "image_with_text"; const thumbType = isThumbImage ? thumbStyle.replace(/_/g, '-') : 'text'; const variantType = null; const selectedVariantVal = data.selectedOptions && data.selectedOptions.length && data.selectedOptions.find(v => v.name === optionName).value[0] || ''; const isSelected = (value) => { const selected = (data.selectedOptions || []).find(v => v.name === optionName); return selected && selected.value.length && selected.value[0] == value; }; const getThumbImage = (value) => { const options = data.product.options || []; const option = options.find(o => o.name === optionName); if (option.thumbImages) { const thumbImage = option.thumbImages.find(t => t.value === value); if (thumbImage && thumbImage.image) { return { src: thumbImage.image.src, alt: thumbImage.image.alt }; } } return {src: '', alt: ''}; }; return `
${optionName.slice(0, 1).toUpperCase() + optionName.slice(1).toLowerCase()} :
${selectedVariantVal}
${option.values.map((value, idx) => { return `
${value}
${value}
` }).join('')}
`; }).join(''); }()}
${data.value || ''}
-
-
${data.line_items.map(item => { const variantNames = item.options.map(option => option.value).join(' / '); return `
${item.product_title}
${variantNames}
${(item.parsedProperties || []).map((propertie)=>{ if (propertie.isImage){ return `
${propertie.name}:
View image
` }else{ return `
${propertie.name}: ${propertie.value}
` } }).join('')}
*${item.quantity}
Free gift
${ (item.discount_applications || []).map(discount_item => { const discount_item_amount = discount_item.discount_amount || discount_item.amount || ''; return `
${discount_item.title}
(-
)
` }).join('') }
Remove
`; }).join('')}
Cart
${ data.originData.message }
${function () { if (!data.originData) return ""; let { apply_scenario, discount_info, landing_page_info, threshold_category } = data.originData; const progressDom = `
`; const { mobile_layout, show_add_to_cart, show_discount_label } = landing_page_info.product_display; const isBXGY = discount_info.discount_type === "DT_CODE_BXGY"; const buyProductsDom = `
`; const obtainProductsDom = `
`; const is_obtain = threshold_category === 'THRESHOLD_CATEGORY_OBTAIN_PRODUCT' ? 'active' : ''; const tabsDom = `
${function(){ let liDom = ''; const items = [ { text: landing_page_info.product.buy_product.text, class: "", value: 1 }, { text: landing_page_info.product.obtain_product.text, class: "cart-coupon-code-modal-tab__obtain", value: 2, is_obtain } ]; for (item of items) { liDom += `
${ item.text }
` } return liDom; }()}
${buyProductsDom}
${obtainProductsDom}
`; return `
${progressDom} ${isBXGY ? tabsDom : `
${buyProductsDom}
`}
` }()}
const TAG = 'spz-custom-cart-coupon-code-utils'; class SpzCustomCartCouponCodeUtils extends SPZ.BaseElement { constructor(element) { super(element); } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.registerAction('setSideBarHeight', this.setSideBarHeight_.bind(this)); window.addEventListener('resize', this.setSideBarHeight_.bind(this)); } setSideBarHeight_() { const $sideBar = document.querySelector('#cart-coupon-code-modal'); if (!$sideBar) return; const windowHeight = window.innerHeight; $sideBar.style.setProperty('max-height', windowHeight * 0.9 + 'px', 'important'); } } SPZ.defineElement(TAG, SpzCustomCartCouponCodeUtils);
discount code
Apply
${function(){ if (data.status === 'APPLY_STATUS_SUCCESS' || !data.message) { return `
` } return `
${data.originData.message}
Add
` }()}
${data.map( item => { return `
${item}
` }).join('')}
Below discount codes are unavailable
${data.map( item => { return `
${item}
` }).join('')}
${function(){ const code_data = data.originData.list; if (!code_data || !code_data.length) return ''; const recommendDom = `
Recommend discount codes
`; const discountCodeListDom = code_data.map( item => { item.end_at = item.end_at == -1 ? item.end_at : item.end_at * 1000; item.start_at *= 1000; return `
${item.discount_text}
-
${item.code}
` }).join(''); return `
${recommendDom}
${discountCodeListDom}
${recommendDom}
${discountCodeListDom}
` }()}
Add note
Write something here to seller.
${data.note || data.value}
Discount
${data.total_discount > 0 ? '-' : ''}
Subtotal
Taxes and shipping calculated at checkout
Check out
Your shopping cart is empty
Continue shopping
You may also like
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);
${function() { return data.originData.list.map((item) => { const background = item.config.background; const interactive = item.config.interactive; const textArr = item.config.text_discount.replace_texts; const textColor = item.config.text_discount.color; const backgroundSize = background.presentation_rule === 'fill' ? 'cover' : 'contain'; const pcImage = (background.url && background.upload) ? background.url : ''; const mobileImage = (background.mobile_url && background.upload) ? background.mobile_url : ''; const color1 = background.color; const color2 = background.color2 || background.color; const backgroundStyle = `background: url(//img.staticdj.com/${pcImage}) center / ${backgroundSize} no-repeat, linear-gradient(to right, ${color1}, ${color2});`; const backgroundMobileStyle = `background: url(//img.staticdj.com/${mobileImage}) center / ${backgroundSize} no-repeat, linear-gradient(to right, ${color1}, ${color2});`; return `
${textArr.map((text) => { return `
${text}
` }).join(',')}
${textArr.map((text) => { return `
${text}
` }).join(',')}
` }) }()}