Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig
Black Human Hair HD Lace Kinky Wig  | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig

Black Human Hair HD Lace Kinky Wig | Glueless Wigs | 100% Real Natural Human Hair Wigs | Medium & Long Wig

$18.98
$150.00
-87%
Lace Part Size-4x4
Please select a lace part size
Length-16 Inch
Please select a length
Density-100%(NORMAL)
Please select a density
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);


✔️No shedding, tangles, lice, bad smell, quality assurance for more thantwo years

Product Details

  • Super-transparent lace
  • More versatility
  • Glueless install
  • Comfortable
  • Flawless melt with scalp
  • Protective style

Description

Why Do You Need A 5x5 Undetectable Lace Wig?

  ✔️ Glueless, Zero Skills Install, Beginner Friendly
  ✔️ Real HD Lace, Super Realistic Look
  ✔️ Pre Bleached Knots, Pre Plucked Hairline
  ✔️ 5x5 Lace Area, Either Side or Middle Part
  ✔️ One of Most Affordable HD Lace Wig
  ✔️ 180% Density, Full & Airy & Shiny
  ✔️ Soft & Smooth, Manageable & Low Maintenance

Product Details

  • Last For:one more year
  • Can Be Dyed:yes
  • Straps:adjustable
  • Lace: Top Swiss Lace
  • Lace Area: 5x5 inches
  • Hair Material:100% human hair from one donor

Purchase Notes

  • Shipping>>OVER 49$ Free Shipping worldwide via Express
  • Delivery time>> worldwide 14-21 days
  • Handling time>> Ship within 48 hours after payment
  • Returns>> Fast refund,100% Money Back Guarantee
  • 99.3% Reviewers Recommends This Product.
  • Click the "Add to Cart" button now!Limited Quantity - Will sell out fast!

How To Wash Your Wig

Washing your curly wig regularly helps keep it looking as fresh and natural as possible.
To achieve this:
•Fill a sink with water( warm water would be better).
•Add a small amount of shampoo with hair care ingredients, and submerge your wig.
•Squeeze out any excess water, being careful not to wring it out.
•Rinse thoroughly in water, then gently squeeze out any excess liquid again and dry with a towel.
Alternatively when you don’t have time for a full wash, spray your human hair wig with water mixed with conditioner. Just like in real hair, a little bit
of moisture will help curls bounce back and appear fresh. This will make your curls mimic what naturally healthy curls look like after they’ve been
dampened with some water.


How to Do A Deep Conditioning Treatment

Static, wearing wig in a wrong method, store wig in a wrong place. It’s not strange that wigs will get tangled.
To keep tangles from being a huge problem:
•Try doing a deep conditioning treatment on your wig before and after wearing it. You can do so by using products like coconut oil or olive oil and conditioner.
•Don't put too much product(hair spray)in your hair because that can lead to more tangling than usual.
•At least once per week, soak your wig in warm water. Take it out and apply conditioner product liberally through all of your hair, starting at your ends and
working up toward roots.
•Sit back and let your wig absorb the nutritionfor about 20 minutes.
•After the time is up, rinse with warm water and follow up with a cool water rinse to close cuticles.
•Use a soft towel to gently blot excess water away from the skin, leaving only what washes off naturally during the toweling off process.

About Payment

Q: What payment methods you accept?

A: We accept three payment methods online. The first is credit card directly, both visa card and master credit card are allowed.  The second one is PayPal, you will be directed to the PayPal login page straightforward. The third We can also accpet buy now pay later with (Sezzle, Afterpay ,Klarna), If you have any payment problems, please contact with us: service@lummiwig.com

Q: Can I pay through Paypal with my credit card?

A: Yes, you can choose the paypal option and you will be asked to fill in your credit card information to fulfill the transaction.

Q: Can you send me an invoice?

Yes, we can send you the invoice via Paypal Or Klarna if you need, just feel free to contact us via email: service@lummiwig.com

About Order and Shipping:

Q: How do I pay for my order?

To pay for your order on www.kriyawig.com, follow the steps below:
1) Select the hair items you would like to order and click the "Buy It Now" button.
2) Fill in the address information and choose the shipping method and payment method on the checkout page, then click the "complete Order" button.
3) Go to the payment platform to complete the payment.

Q: How long do you take to ship an order?

A: Generally, we will ship your order the other day since the date you placed the order. However, we may  need to wait for 2 or 3 days for the stock at times, this the delivery will be delayed for 2 or 3 days(not include weekends or holidays)

Q: Do you guarantee delivery time?

A: Because the post office handles your shipment,we cannot guarantee the exact time of delivery.However,we will give you an idea of when the package will arrive.We suggest you to make orders 4 days in advance thus you will have sufficient time for shipping.

Q: Is there any hidden charges to my order?

A: Basically, the final amount you will pay is just the price of the product plus shipping(if you choose a paid shipping). Sometimes, because of the exchange rate of currency, when the payment finally cleared through the bank, the total amount will be a little different to the price of the product, but its only less than 0.5% of the total price.

Q: Can I cancel my order?

Yes ,while please note orders can only be cancelled before the package have shipped. Please contact us service@lummiwig.com as soon as possible if you wish to cancel your order.

Q: What if my order delivery was delayed?

A: We definitely will deliver your order in time under normal circumstances. While, shipping delays may occur due to holidays, natural disasters, or carrier delays. Please keep in mind holidays do not count as a business day and should be considered when calculating shipping times.

Q:I have bought something but seen it at a different price on your website.

A: As an online business we act much faster in adjusting our prices in response to trends, stock and demand from customers. It's our general view not to refund the difference.

Q: Do I have to pay the customs duties & taxes?

A: Orders shipped outside of the United States may be subject to import taxes, customs duties and fees levied by the destination country. The recipient of an international shipment may be subject to such import taxes, customs duties and fees. Additional charges for customs clearance must be fulfilled by the recipient. Customs policies vary widely, the customs duty is determined by the custom of your country, and it is uncertain to know how much about it, you should contact your local customs office for more information.

About Products

Q. How long does it last?
A: This hair can last for a very long time depending on how you maintain it. Treat it like your own hair and take very good care of it for it to last longer.
Many hair extension users prefer 8A hair because it is very cheap .
and some customer prefer 10A, because it is beautiful and better quality which makes it last longer than 8A one.
Q: Why are my hair extensions getting tangled?
A: Your Hair Extensions can tangle due to dryness, oil & dirt build-up, salt water, chlorine and not combing (wide tooth comb) out your hair daily.
Make sure to wash & condition your hair at least once a week, twice a week is better. Use hydrating drops or consult your stylist for more help.

Q: Why the colors of hair extensions don’t look exactly as the pictures show?
A: Different monitor have different display. And every time, maybe the same color No. will have a little color differential. Please ask a help from the hair dresser for the colors code as the international color swatch says.

Q: How to tell human hair with synthetic hair?
A: Human hair has natural protein, it is easy to tell by burning and smelling, human hair will be ash, which will go away after pinching, human hair will smell foul when burning, the human hair will show white smoke.
While synthetic hair will be a sticky ball after burning and will show black smoke, moreover, human hair may be have a few gray hair and split end, it is normal and not a quality problem.

Care and Usage
Q: Can your hair be straightened, curled?

A: Treat the hair as if it is your own. Use a flat iron/straighter or tongs even when fitted, but as with your own hair, never use hot tools too often as you could dry the hair and it will not last as long.


Q: Can I dye color the hair?
A: yes. The hair can be colored. As a general rule it is easier to darken the hair than to lighter the hair. We highly recommend having your hairdresser dye the extensions as you will get the results you want, coloring them yourself always poses a high risk of not coming out the shade you want. If you can not get to a salon, always use a good quality hair dye and test a small sample first.


Q: Can I wash & blow-dry the hair ?
A: you can wash them as you would your own shampoo and conditioner. We also recommend using a hair treatment on them every few weeks, because the hair is not attached to your scalp, it is not getting the oils it should be. Using a treatment/hair mask will need to wash your extensions too much, about every 3 weeks. The extensions can be blow-dried on low setting, but it is not recommended to do it too often. It is best to let your hair extensions dry naturally after washing them.

Q: How many pieces Hair for one head?
A: Normally 3 pieces are enough for a full head, at most 5 pieces
You can always use the leftover hair later. If you are using hair over 18" long you might need another pack.

Q, What type of hair care products should I use?

A : Treat this hair just as if it was your own hair. Use good quality shampoo and conditioning products. Conditioning your hair is very important to keep it soft and manageable, so use leave in conditioners. You can also use products like gel and hair spray to keep the curls in place,but make sure to wash your hair and not leave in these products in for a long time.
Recommended shampoos and conditioners: Pantene PROV For treatment and every day use: Olive Oil Hair Polisher.

Payment Method Supports: You can use debit card / credit card /visa card /Master Card.

step1: On the product page, you can select length and quantity here. You also can change the quantity of product later during the checkout process.

 step2:Click the "  Add To Cart  " button to add the item(s) to your shopping cart

            If you have a Paypal account, you can click the " Buy it now " to check out immediately.

Step3:  after click add to cart and shows that page , you can remove you donot want the product in your shopping cart ,and if you have some special requirements,you can leave order message in the order note Then click check out button and shows below page :

After following the steps above,however your card still is turn down or you can not get through your order, please contact our customer service to help:service@lummiwig.com

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);