Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
15/15
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
Hot sale  -- 2024 brand new event Teethaid   tooth mousse (For all kinds of oral problems, especially teeth regeneration)
15/15

Hot sale -- 2024 brand new event Teethaid tooth mousse (For all kinds of oral problems, especially teeth regeneration)

🎉More than 98.97% of customers recommend this product.⭐⭐⭐⭐⭐

$22.99
$44.99
Save $22.00
🔥Buy More Save More🔥
Please select a 🔥buy more save more🔥
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);
Description
🎉More than 98.97% of customers recommend this product.It's about out of stock, today is the last day of the sale.We give TWO free bottles to the top 10 customers who place orders today. Don't miss out on this fantastic deal!


Introducing the ⭐⭐⭐2024 brand new event Teethaid ™ tooth mousse, the ultimate solution for all kinds of oral problems, especially teeth regeneration. Our after-sales service is one of the best in the market. If you are not satisfied with the goods received, please contact us within 30 days after receipt, and we will give you the best help! Rest assured that your needs will be taken care of promptly and with the utmost professionalism.

We are proud to announce that more than 98.97% of customers recommend Teethaid ™ tooth mousse. It is a testament to the effectiveness of our product and the satisfaction of our customers. Today is the last day of the sale, and we are almost out of stock. We give TWO free bottles to the top 10 customers who place orders today.Don't miss out on this fantastic deal!

Teethaid ™ tooth mousse is a powerful oral solution that can kill 99.99% of harmful bacteria, providing relief to a wide range of oral issues. Our product is professionally designed to combat oral problems such as teeth regeneration, tooth decay, and bad breath, among others. Our tooth mousse is easy to apply and highly effective.

In conclusion, Teethaid ™ tooth mousse is an excellent choice for anyone seeking to improve their oral health. Our product is professionally designed, highly effective, and recommended by a vast majority of our satisfied customers. Don't miss out on this fantastic opportunity to improve your oral health. Place your order today and enjoy the benefits of Teethaid ™ tooth mousse!

Teethaid ™ tooth mousse can kill 99.99% of bacteria, eliminate bad breath, remove tooth plaque and tartar, heal gingivitis and periodontitis, relieve toothache, prevent and remove cavities, restore tooth enamel, stimulate the formation of restorative dentin, and stimulate the regeneration of lost teeth.

Some submitted photos taken during their journey of using Teethaid ™ tooth mousse. Congrats on their successes

"Due to years of smoking, my teeth have become yellow and black, and I have severe bad breath, some of my teeth have been necrotic. It makes me look ugly and I'm even afraid to laugh out loud and talk to people. And I brushed my teeth and nothing helped. I started looking for some products and ways to improve it. I’m so glad I found Teethaid ™ tooth mousse, I bought 8 bottles, and I saw a noticeable change after the first useThe water colour has turned yellow after I spit it out. There is no doubt about it. It's effective! And I didn't feel any discomfort, it smells very refreshing, I like it so much. I continued to use it for 2 weeks and it completely whitened my teeth and got rid of bad breath. After 4 weeks my decayed and broken teeth fell out and by 5 weeks they had new cusps. After 8 weeks of continuous use, my teeth have completed all treatment, all plaque and calculuscaries and bad breath are gone, and the broken teeth have grown back. I am so happy and my teeth look so beautiful. By the way, when I used 2 bottles, my teeth were completely white, and the calculus and bad breath were gone; when I used 4 bottles, my caries were cleaned up; after 8 bottles, I grew a brand new one teeth. Hope this helps you."- Faith Contreras

"My teeth got worse as I got older because I didn't get any dental care. Some of the teeth have been necrotic and fallen off, and the teeth have turned yellow, and there is severe bad breath. This prevented me from eating and talking well until my friend recommended Teethaid ™ tooth mousse to me. It's the perfect thing. I use it every morning and night and I see visible results every time I use it. After 2 weeks of using it, the bad breath is gone and my teeth are white again. After 4 weeks, the broken teeth had fallen out; after 8 weeks, the lost teeth had grown back. awesome! I don't need to go to expensive dentistry, I don't need fillings, and I don't need dentures, which saves me a lot of money, and I don't have any surgical pain. I like it." - Michael Smith

Every day food residues in our mouth could make various kinds of bacteria and microorganisms in the oral cavity multiply in the gaps between the teeth and the inside of the oral cavity. This can lead to a series of oral health issues including bad breath, mouth ulcers, yellow teeth, caries, calculus, inflamed gums, bleeding gums, sensitive teeth, brittle or partially missing teeth, swollen gums, toothaches, loose teeth, tooth loss, and even oral cancer.

When such condition continue to worsen, you will have bad breath, gum inflammation and other problems. At that time, bacteria are eroding your gums, making your gums prone to bleeding, pain, redness and other problems. When these problems can not get resolved in time, your oral problems will become more serious, and you will suffer from periodontitis, dental plaque, dental calculus, loose teeth, tooth pain and other problems, and even lead to tooth loss.

The formation of dental caries is due to the damage of tooth enamel by germs which could gradually spreads to the dentin and even pulp. This can lead to bad breath, tooth pain, brittle teeth, and tooth loss. When caries occurs, there will be a chain reaction in which normal teeth begin to be eroded as germs spread to surrounding teeth.

Poor dental care can lead to a number of health diseases, which affects your brain, lungs, heart, skin, pancreas and kidney. Thus, it’s important to establish good dental hygiene at a young age as this will help set the stage for life-long good oral care habits.

Key facts

  • Oral diseases, while largely preventable, pose a major health burden for many countries and affect people throughout their lifetime, causing pain, discomfort, disfigurement and even death.
  • It is estimated that oral diseases affect nearly 3.5 billion people.
  • Untreated dental caries (tooth decay) in permanent teeth is the most common health condition according to the Global Burden of Disease 2019.
  • Treatment for oral health conditions is expensive and usually not part of universal health coverage (UHC).
  • Most low- and middle-income countries do not have sufficient services available to prevent and treat oral health conditions.
  • Oral diseases are caused by a range of modifiable risk factors common to many noncommunicable diseases (NCDs), including sugar consumption, tobacco use, alcohol use and poor hygiene, and their underlying social and commercial determinants.

That's why we created Teethaid ™ tooth mousse. Key solutions for oral problems: 

Phloretin:An antioxidant derived from apples that inhibit destructive enzymes.It could effectively stimulate tooth regeneration.

Ferulic Acid:Effective antioxidants found in seeds and leaves like wheat, rice, and oats.

Menthol Peppermint Oil: Menthol Peppermint Oil imparts a cooling, soothing effect and contains antibacterial and antifungal properties.

Thyme:Thmol is a natural phenol compound derivative found in oil of thyme. It has strong antimicrobial attributes and demonstrates antifungal and anti- inflammatory effects.

Sage Oil:Sage has a long history of medicinal uses. It has been used to stop bleeding wounds, treat ulcers, swelling, and internally-to treat sore throats and coughs, as well as dental abscesses, infected gums, and mouth ulcers.

Clove Flower Oil:Sourced from the leaves, flower buds or fruit of a tree native to South America, clove is a natural substance known for its antibacterial capabilities and its anesthetic powers.

Teethaid ™ tooth mousse is the latest product certified by the American Dental Association and recommended by dentists. It can perfectly solve all oral problems, including dental calculus, bad breath, oral ulcers, dental caries, bleeding gums, tooth sensitivity, gingivitis, loose teeth, periodontitis, swollen gums, tooth damage, tooth loss, etc. No side effects. Made from 100% natural herbs. Suitable for everyone, including children, young people, and the elderly.

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