🔥[Super promotion, 49% price reduction]Waterproof Tactical Military Multi-Pocket Crossbody Bag

$39.64
$77.72
Save 49%
Color : Khaki
Quantity
The current produc does not participate any Rebate. Switch the participating product to check the design.
(This prompt will not be displayed on the client-side.)
people are viewing this right now
/** @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);
Description
  • Easy and fast returns by professional customer service team 
  • SSL Certificates For 100% Security

😊If you are not satisfied with the goods received, please contact us with in 15 days after receipt, we will give you the best help! Please don't worry!

🚢Shipping>>Shipping worldwide.
⏰Handling time>> Priority is given to delivery after payment.
✈Fast Delivery>>We'll arrange the fastest shipping for you
💯Payments Via PayPal® and CreditCard.

 
 
Function Display
Product Angle Show
Advantage Introduction
 
1、Abrasion, scratch and tear resistance, long time use is not easy to change color, than ordinary polyester fabric tension and wear resistance.

2、This dual-action puller is stronger and more durable than the general single metal or umbrella rope puller, resistant to cold and impact, beautiful shape

3、The use of high-quality Hualian zipper, meticulous workmanship, open and close freely and smoothly, after repeated use of experiments, durable toughness

4、The use of high-quality Hualian buckle, environmentally friendly non-toxic materials, and camouflage bag body of the same color, combined with smooth and not easy to crack and deformation

5、The webbing at the back of the sub-bag is threaded into the PLAS webbing on the large bag and can be fastened, which is easy to load and flexible

6、Mercerized cotton lining with logo and fabric label, smooth and glossy, we pay more attention to detail

7、Bag body MOLLE system plus multiple PALS webbing design, can be loaded according to the need for accessory bags, small hanging bags, water bottle covers, can also be mounted glasses, walkie-talkies, climbing buckles, small flashlights and other outdoor equipment

8、Thickened and widened shoulder pad design, play a good protective role, effective weight reduction, more comfortable back
Product color display
Gender: Male
Bag Type: Crossbody Bag, Messenger Bag
Material: Nylon
Occasion: Daily, Travel, Shopping, Others
Bag Size: 13.78"*5.51"*9.44" inches/35*14*24 cm
Internal Structure: 1 Main Pocket, 1 Interior Zipper Pocket, 3 Front Pocket, 1 Side Zipper Pocket, 1 Back Zipper Pocket
Strap Type: Adjustable Straps
Closure Type: Zipper

PACKAGE

  • 1* Women’s Shoulder Bag

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 30-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 risks 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  Please contact us if you need assistance.

HOW TO PAY

✅Payments Via PayPal®, Debit and CreditCard.

   Add to cart first, and Check out, then select Shipping method and Payment method.

✅If you checkout with a Debit / Credit Card, just enter your * Card Number* Expiration Date, and * Secure Code.

🌎 Worldwide Shipping ✈  

Delivery typically takes different times based on the different destination. You may receive your items earlier. Tracking Numbers will always be sent so you can track it every step of the way! 
🔒 100% Risk-Free Purchase
If you bought it and felt that it is not for you, don't worry. Send a message for us, and we will make it right by offering you a replacement or refund. 100% Simple & Risk-Free process.
🏭 Our Warehouse 
Once your order is dispatched, depending on your country or region, products will be delivered to you as soon as possible.

Shipping & Delivery

🌏We offer Worldwide Tracked Shipping on all orders.🌎

Our goal is to offer you the best shipping options no matter where you live. Every day we deliver to hundreds of customers across the world, ensuring that we provide the very highest levels of responsiveness at all times.

Shipping and Delivery:

  • Standard Delivery--Free Shipping : Over 69.99 dollars 
  • Deliveries are typically made Monday to Friday between 8:00am - 6:00pm
  • Working days are: Monday to Friday (and do not include public holidays or weekends)
  • We do not ship orders on weekends or holidays. 
  • Shipping: U.S. orders fulfill and ship within 1-3 business days followed by 7-10 business days transit time for most products in the store. With delays in shipping worldwide, some products may take 1-2 weeks transit time.  We strive to get our customers their items in a timely manner with the current worldwide supply chain delays. Feel free to inquire about shipping times for specific products at hezizi0215@gmail.com
  • Shipping methods:4PX、YunExpress、Wanb Express、UBI

    Our Guarantee:

    • All your orders have a 14-day money-back guarantee!
    • Sometimes your orders can get lost/damaged on their journey to you. If this occurs, we will send you a replacement free of charge! Just contact our support team at hezizi0215@gmail.com and we will get in touch with you as soon as possible!

    Please Note: We may ask you to send us a picture of the damaged product before shipping the replacement.

    Important Remarks

    • Refunds are not given on free items. However, replacements are given for items lost while shipping.
    • Replacements are sent up to 7 days after receiving your item.
    • For more information about refunds, please read our Refund Policy.

    Tracking your order:

    To track your order, we will send you all the tracking information to your e-mail.

    Please note that your tracking number is the one we send automatically when we ship your order (it can take up to 2 days). 

    If you cannot find your tracking number, please get in touch with us at hezizi0215@gmail.com



    CONTACT US

    hezizi0215@gmail.com

    Refund Policy

    We are committed to providing customers with the best online shopping experience and satisfaction. We welcome your feedback and strive to improve the customer’s shopping experience. At the same time, we work hard to deal with your feedback. We are ready to provide customers with services that surpass everything.

    If you are not completely satisfied with your purchase, you may return or exchange your item within 14 days. Please note that the return period starts from the day you receive your order.

    HOW DO I RETURN AN ITEM?

    If you check that there is a fault with an item or wrong item you have received, please contact us within 14 days from receiving your order.

    Please provide your order number as well as the reason for your return. Our customer service team will review the return request and will send further instructions if the return is approved.

    Returned items must be in original packaging, including any accessories, manuals, and documentation. If the condition of the product shipped back to us is not in an acceptable condition we reserve the right to not refund or exchange.

    ·Non-returnable items include damaged products through customer mishandling.

    ·Returns made without a receipt may be refused.

    ·The return address will be obtained after contacting customer service to obtain the returned consent.

    WHAT IF THE ITEM(S) I RECEIVED ARE DEFECTIVE/INCORRECT/DAMAGED?

    Did you receive a faulty unit or the wrong product? Simply not satisfied with your order?

    Please contact our Customer Support team to start the return process. Please include the following information:

    ·Order number

    ·Proof of purchase(Order Summary)

    ·Video or photo of the faulty product

    In some cases, you may be required to include a video or photo of the defective product for proof in order to refund or replace the product. If a return or refund is required, for this reason, the original freight and return freight shall be borne by us.

    WHEN I CAN RECEIVE MY REFUND?

    Once your return is received and inspected, we will send you an email to notify you that we have received your returned item. We will also notify you of the approval or rejection of your refund within 3-5 business days. If you are approved, then your refund will be processed, and a credit will automatically be applied to your credit card or original method of payment, within a certain amount of days.

    Your refund will deduct the original shipping cost. At the same time, you need to bear the return shipping cost, except for damaged packages.

    WHO IS RESPONSIBLE FOR THE SHIPPING COSTS?

    If the product is not usable, due to our fault (such as size, improper damage, or quality problems), we will bear the freight for replacement and rescheduling of the returned product and the return, but if you purchase the product by mistake or error, you will have to bear the freight for the original shipping and return.

    FAQ

    FAQ

    How Do I Cancel An Order?

    We are only able to cancel orders within the first 12 hours after the order is placed. After that the order has most likely been processed and is preparing for shipment or has been shipped. Once this takes effect, it's out of our hands. We apologize for any inconvenience this may cause, but we pride ourselves on prompt service and this includes getting your orders out as fast as possible.

    When Will My Order Ship?

    Orders are usually processed and shipped within 3 working days of purchase.

    How Long Does Shipping Take?

    Shipping times vary as we do ship worldwide from different fulfillment centers based on your location. Average shipping time is about 7 to 15 working days. Your tracking number will be updated 3-7 days after your order has been shipped. 

    IS MY INFORMATION SECURE USING THIS SITE?

    Yes, we use the latest technology to ensure your information is secure. To get more information, please read our privacy policy

    Orders & Payments

    Q: What payment methods do you accept?
     
    PayPal Express
    PayPal Credit
    All major Credit/Debit Cards
    A: PayPal Express is a secure and fast way to purchase our products online. PayPal already has your details, so just provide your email address and password to safely complete your online purchase.
     
    Q: How can I know if my order has been placed successfully?
     
    A: When your order is placed successfully, you will receive an order confirmation email. The status of your order can be check by visiting the Track My Order. If you have not received the order confirmation email, it may be that your email is full and cannot be successfully accepted, or it may be a system problem. Anyway, when it happens, please contact us in time.
     

    Shipping & Delivery

    Q: Where can I find the tracking information for my orders?
     
    A: All tracking numbers can be found in the shipping notification emails we send out. Tracking information can be found in the shipping notification emails we send out.
     
    Note that international shipment tracking may take up to a few days to display any updates but that doesn't necessarily mean the shipment is lost.
     
    Q: Is tracking available for my order? 
     
    A:We depend on the international network of logistics services such as DHL, FedEx, and UPS. Along with these, we also rely on local postal service providers like USPS so that your order could be delivered to you in the shortest time possible. That’s the reason why tracking may not be available sometime.
     
    Note: All orders delivered within the United States by USPS have full tracking available! For international orders, full tracking will only be available when sent via International Priority - which costs a bit more. 
     
    Q: Where do my orders ship from? 
     
    A:We have our third-party factories located in different parts of the world. Each one of them manufactures particular products and caters to different geographical locations. We make sure your orders are producted in the most suitable location catering to the delivery address you provided for fast and affordable shipping!
     
    Q: What if the recipient’s address was wrong?
     
    A:If the recipient’s address was wrong, please contact us in time. Once the order is shipped, then you are held responsible. You would have to bear the reshipment charges. 
     
    Q: What happens if a package wasn’t delivered to me, but the tracking states that it was?
     
    A:If the package was marked as delivered, but you have yet to receive it, please contact us in time.
     
    There may be cases where the delivery was made, but the package was left in an unexpected location at the your address. You should reach out to the carrier and inquire if any additional details were left by the delivery person. For example: “Left under the table on the back porch.”
     

    Returns & Exchanges

    Q: What is your return policy?
     
    A: We offer a 14-day return & exchange policy, because we would like to make you feel comfortable when shopping at Leemtybd.. Please refer to Returns & Exchanges for details.
     
    If you have any questions, please contact us, we will deal with it as soon as possible.

    Thank you for visiting

    Leemtybd focuses on discovering unique and personalized products for European and American consumers, we stick to our service and strive for 100% customer satisfaction. You can click on our classified collection album to find your favorite products
    SAFE PAYMENT
    Pay securely with your favorite Credit Card provider or PayPal!
    FREE SHIPPING
    Free Premium Shipping with Track and Trace, every order, every day!
    100% MONEY BACK
    14 day money back guaranteed. No questions asked!
    SUPPORT 24/7
    We're happy to help! We reply within 24 hours/7 days a week.
    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);