✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
5/22
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧
5/22

✨Wireless Ear Clip Bone Conduction Headphones⏰Promotion 49% OFF Limited Time🎧

$29.99
$59.98
Save $29.99
Color ✨:
Please select a color ✨:
Style✨:
Please select a style✨:
Discount ✨Last Day ⏰:
Please select a discount ✨last day ⏰:
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!!!🔥


What Is Ear Clip Bone Conduction Headphones?

Be safe, present, and aware. Introducing a new open-ear headphone that let you listen to music and sound, but also hear the world around you.

undefined

Wear it while you run and be aware of cars.
Wear it while you work and listen to your co-workers voice.
Wear it while you cook and listen to the alarm.
Wear it for outdoor AR games to experience the Mixed Reality of sound.

undefined

undefined

Functional Descriptions:

1.【LED Intelligent Display】Real-time monitoring of the power of the headset, no longer worry about the embarrassing situation of a sudden lack of power.

2.【Not in the ear】Support clear call quality,Ear clip design, small invisible, long time without pressure wear.

3.【Fast speed】With Bluetooth 5.2 compatibility, this wireless headset has a stable connection and provides a low latency experience.

4.【Broad compatibility】This TWS headset is compatible with most types of phones, and you can connect to other devices that support Bluetooth compatibility.

5.【HiFi Audio】This wireless headset provides stereo sound and clear sound, making it perfect for listening to music, playing games, and more.

6.【Portable &Powerful power reserve, strong battery life】Built-in charging case, easy to carry or store, and can charge headphones at the same time.

(1.Headset fully charged state, a single continuous use of up to 3-4 hours, plus charging cabin life up to 16 hours, standby time up to 120 hours.

2.The charging compartment is charged about 8 times extra, standby time of 120 hours, 20 hours of continuous listening)

【Where they work】
These wireless headphones are perfect for camping, hiking, traveling, working, running, gaming, and more.

The patented shape form of our earcuffs will let you hear sound as if it is playing from somewhere in the outside world.

undefined

Do you also encounter the following scenarios?

Carry on a conversation...
without stopping the music...

undefined

Open workspace? Background music that doesn't send a Do Not Approach message...

undefined

Rock out, stay safe...

undefined

Be present...

undefined

Open workspace? Background music that doesn't send a Do Not Approach message

At the same time, as an open earphone, it also allows you to listen to songs without missing any ambient sound.

Eavesdropping on songs and watching dramas at work is no longer afraid that the leader will call you behind you and you can’t hear it~  

undefined

🎁💐 Don't forget to get some for your family and friends as it's an unique gift idea.

Specifications:

Color:Black/White

Style: Without Screen Dispiay /With Screen Dispiay

Material: ABS.
Bluetooth - compatible version: 5.2
Transmission distance: approx. 10 m /32.81 ft
Charging time :1 hours
Battery capacity: Headset battery capacity  35mA ,Charging compartment battery capacity 300mA

Frequency response :20-20K Hz
Waterproof: IPX5
Dimensions (l x w x h): approx. 9x5x3 cm
Quantity: 1 (set)

Note:
There may be a little color distortion due to the different computer resolutions.
There may be slight errors due to different hand measurements.

The Package Includes:

1 pair of headphones

1 x Charging case

1 x Charging cable

1 x User manual

Q&A:

1. How to wear it, is it troublesome? Right or left?
Like the ear clips in the accessories, it is not troublesome to wear. Just put it on with two hands. The earphones are divided into left and right, and the machine will be marked with "L" and "R".

2. Is it really comfortable?
It's really comfortable. Generally, the earphones will be a little bulging when plugged into the ears, and it's more like an ornament for the ears. I often forget that it exists.

3. How is the sound quality?
Utilize acoustic technology, unique structure and air conduction method to control the conduction direction of sound, and achieve clear sound quality, lightweight volume and sound leakage control beyond ordinary open bone conduction earphones. Open earphones are different from in-ear earphones. If you have higher requirements for sound quality, please purchase them carefully.

4. How about the battery life?
The battery life is about 12 hours, about 3 hours when listening. When the charging box is low, the indicator light on the charging box as big as a pinhole will be red

5. Will it fall off easily?
It’s really not easy to drop the earphones, but most of the time what we can’t find is the box. Apple can search for it by sound, but if he can’t find it, it’s really not found~

6. It is said that it is inconvenient to operate?
The headphone connection is very convenient and can be connected quickly. The contacts are set at the bottom of the headphone, which can be switched and tuned

7. Is the sound leakage serious?
Although the structure of the unsealed earhole cannot completely prevent sound leakage, the sound leakage has been suppressed to a level that does not interfere with daily use due to our unique technology.

8. It is touch control?
Yes, you can switch song or change volume.

9. The earphones are waterproof?
It is daily waterproof, but you can not shower or swimming with it.

10. What if i get a item with problem?
If you have problem with the product, please contact our customer service first, we will resolve the issue for you within 24 hours.


⚡️Stock sells fast - get yours today!

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.

💐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.

🌎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🔥 

If the product you received is damaged, don't worry. Just hit the Contact Us button and send us a message, and we will make it right by offering you a replacement or refund. It 100% Simple & Risk-Free process.

Our Warehouse

Please consider any holidays that might impact delivery times. Please consider the transportation methods and unexpected situations that may affect the delivery time.

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