Das beliebteste Dirt eBike

€899.00
40 verkauft
Color : Silver
Version : Regular version[60 miles]
Menge
Beschreibung

Hilfe & FAQ-Bereich

Q: Ist das ein Automatikrad oder nicht? Muss ich wissen.

A:Ja, es ist vollständig automatisch ... wie ein Spielzeugwagen. Die Geschwindigkeit kommen schnell und Sie können die Kraft auf Ihrem Smartphone herunterdimmen, wenn Sie möchten, um für Kinder zu sorgen.

Q: Ist alles für die Montage inclusive?

A: Sie benötigen eine Paar pliers oder Channel Locks. Sie beinhalten alles andere; einige Allen-Schlüssel und zusätzliche Nützlein und Schrauben. Die Anweisungen sind klar. Das erste ist die Schlüssel zu finden, manchmal sind sie auf der Gabel oder Handlebar klebt. Dann beginnt man mit dem Laden des Batteries.

Q: Fragst du nach einem Moto-Lizenz, um dieses zu benutzen?

A: Sie benötigen kein Moto-Lizenz, um diese Einheit fahren zu können. Sie müssen mindestens 18 Jahre alt sein, um die Einheit fahren zu können.

Q: Akzeptieren Sie PayPal?

A:Nein, E-bike akzeptiert keine PayPal-Zahlungen.

Bei diesen Fahrrädern handelt es sich um Ansammlungen von Händlerbeständen in unserem Lager, deren Vertragslaufzeit inzwischen erreicht ist und die Produkte nicht rechtzeitig entfernt wurden. Unser Lager hat das Recht, diese Bestände zu einem niedrigen Preis zu verkaufen, um unsere Verluste zu reduzieren.

Schnelles Laden, langanhaltende Akkukapazität✅ 🔒Kostenlose Rückgabe und Umtausch innerhalb von 90 Tagen!🔒 🏆5 Jahre Garantie.🏆

3 Stunden Schnellladung, 140 km Akkulaufzeit Elektrofahrrad

Eine leistungsstarke Offroad-Fahrt für jedermann

Bringen Sie die Dinge mit dem X260 auf die nächste Stufe. Kompakt, schnell, umweltfreundlich und wartungsarm – der X260 ermöglicht mehr Menschen als je zuvor die Teilnahme an aufregenden Offroad-Abenteuern, von denen sie vorher nur träumen konnten.

Schnell austauschbarer Akku für unbegrenzte Reichweite

Der Fahrradakku ist austauschbar und kann in Sekundenschnelle gegen einen neuen, voll aufgeladenen Akku ausgetauscht werden. Von nun an ist es an der Zeit, sich von den zeitraubenden, regulären Lademethoden zu verabschieden. Das Fahrrad verfügt über austauschbare Batterien, die Sie auf Ihren Reisen weiterbringen.

superleicht

Das Fahrrad ist mit einem robusten, leichten Rahmen aus Aluminiumlegierung ausgestattet, der durch ein erstklassiges Design verfeinert wird. Im Gegensatz zu den meisten herkömmlichen Dirtbikes wiegt das Fahrrad nur 121,3 Pfund. Da es leicht ist, ist es dafür gemacht, unerschrockene Motorradfahrer durch schwierigeres, unbekanntes Gelände zu begleiten.

Leicht zu meistern

Vom Waldbach auf die schroffen Bergpfade wechseln? Alles gut. Möchten Sie auf schmalen und kurvenreichen Wegen, Feuerwegen, steilen Felsen oder steilen Hügeln fahren? Da sind keine Probleme. Erkunden Sie sicher das gesamte Gelände abseits der Straße, wenn Sie über die feldorientierte Steuerung (FOC) verfügen, die stabilisiert und sich an die Fahrgewohnheiten des Benutzers anpasst. Mit der Wasserdichtigkeitsklasse IP67 für den Controller und IP65 für den Akku, einer Konstruktion aus einer Aluminiumlegierung mit Wärmeableitung, ist dieses Fahrrad für alle Offroad-Gelände geeignet.

Maximale Geschwindigkeit und Reichweite

Da Ihrem Abenteuer keine Grenzen gesetzt sind, finden Sie hier das Fahrrad, das mithalten kann. Mit einer Höchstgeschwindigkeit von 46,6 Meilen pro Stunde wartet das Fahrrad darauf, dass Sie seine Hochgeschwindigkeitsstabilität, Agilität und seine reaktionsschnelle Kommunikation zwischen Straße und Fahrer erleben. Durch die Partnerschaft mit Panasonic, dem Batterielieferanten von Tesla, stellt Bike eine optimale Batterieleistung sicher, um mit einer einzigen Ladung 74,6 Meilen zurückzulegen.

außergewöhnliche Beschleunigung

Fahren Sie, um Ihre volle Leistungsfähigkeit mit einem maximalen Drehmoment von 7 m*lb und maximal 5400 U/min bei bis zu 356 °F zu entfesseln. In nur 4,02 Sekunden beschleunigt das Motorrad von 0 auf 50 km/h.

Überlegene Stoßdämpfung

Da Ihr Adventure über keine Mehrlenker-Hinterradaufhängung mit hydraulischer Federung (TR-Aufhängung) sowie über eine Doppelschulter-Inverted-Vordergabel verfügt, ist das neueste, von Bike selbst entwickelte Federungssystem darauf ausgelegt, das Fahren im Gelände kraftvoll und komfortabel zu gestalten.

Schlüsselfertige Datenverbindung

Das Besondere an Bike Smart ist, dass es mit der App kombiniert werden kann, sodass Fahrer ihre Statistiken und ihre Fahrroute verfolgen können. Es stehen zwei Fahrmodi zur Verfügung, um den Bedürfnissen von Fahrern unterschiedlicher Leistungsniveaus gerecht zu werden. Der Sportmodus ist für diejenigen, die sich nach Geschwindigkeit sehnen, und der EP-Modus für diejenigen, die Reichweite benötigen.

Wartungsarm und vollelektrisch

Natürlich empfinden wir Dirtbikes als energieverbrauchend und wartungsintensiv, aber Bike beseitigt all diese Hindernisse, indem es ein vollelektrisches Dirtbike entwickelt. Vergessen Sie den ganzen Geld- und Fettaufwand, der bei der Wartung eines Gasfahrrads anfällt.

Wheelie mit Leichtigkeit

Mit der perfekten Traktion, einem Drehmoment von 80 m*lbs (X260) und einem 49,8 Zoll breiten Radstand ist das Bike gut gerüstet, um Fahrern dabei zu helfen, anspruchsvolle Tricks mühelos auszuführen. Das kraftvolle Hinterrad mit 48 Zähnen hinten und einer Neigung von 45° ermöglicht dem Fahrer mühelos Wheelies oder das Treppensteigen.

Duales Antriebssystem

Beide Fahrradmodelle sind mit einem Dual-Antriebssystem ausgestattet, das aus einem Primärantriebssystem und einem Sekundärantriebssystem besteht. Das primäre Antriebssystem umfasst einen 22-Zoll-HTD-8M-Riemen und das sekundäre Antriebssystem umfasst eine 420er-Kette mit 106 Abschnitten. Das Doppelantriebssystem kann das Gesamtdrehmoment der Räder verbessern und ein Herunterfallen der Kette verhindern.

Hochgradig anpassbar

Kompatibel mit fast allen Fahrradteilen, lässt sich das Fahrrad mit unzähligen Möglichkeiten problemlos an Ihre individuellen Bedürfnisse anpassen. Fahrer können das Fahrrad modifizieren und umbauen, um das Fahrrad zu schaffen, das ihren Anforderungen am besten entspricht.

————————

Alles über die Details

Schnelles Laden

Bike arbeitet mit dem marktführenden Batteriepartner Panasonic zusammen, um Bike mit einer hochwertigen Batterie mit optimaler Kapazität auszustatten. Panasonic ist für seine Sicherheit und Langlebigkeit bekannt und fungiert auch als Batterielieferant für High-End-Elektroautomarken wie Tesla. Der Akku des Fahrrads ist in 3–4 Stunden vollständig aufgeladen und kann mit einer einzigen Ladung eine Reichweite von 74,6 Meilen bieten.

Suspension

・Vorne: Invertierte Doppelschulter-Vorderradgabel (einstellbar)

・Hinten: Mehrlenker-Hydraulikfeder-Zentralausführung

・Federweg des hinteren Stoßdämpfers: 3,3 Zoll (85 mm einstellbar)

・Vermeiden Sie übermäßige Bewegung

・Unterstützt eine große Menge Gewicht

Fahrsystem

・Hauptteil: 22,0 Zoll (560 mm) HTD 8M-Riemen

・Sekundär: 420 Ketten mit 106 Abschnitten

・Hohe Übertragungseffizienz

・Überträgt mehr Leistung

・Unterstützt mehr Drehmoment

Körperrahmen

·Ultraleichtflugzeug

・Rahmen aus Flugzeugaluminiumlegierung

・Bessere Widerstandsfähigkeit unter extremen Bedingungen

Bremse

Mechanische Trommelbremse am Vorderrad. Regenerative elektrische Hinterradbremse. Die doppelte gleichzeitige Bremse sorgt für mehr Stabilität und Manövrierfähigkeit. IPX5-Wasserbeständigkeit.

Armaturenbrett

Er nutzt die Vorteile eines erweiterten Plattformdesigns, das Platz für bis zu zwei Personen gleichzeitig bietet. Rutschfestes Design mit erhöhter Kontaktreibung für die Sicherheit des Fahrers.

Beleuchtung

Die Scheinwerfer sind mit 2,5-W-LED-Licht mit hoher Helligkeit ausgestattet, um die Straße vor Ihnen auszuleuchten und Ihre Sichtbarkeit für andere um Sie herum zu verbessern.

 

*Haftungsausschluss: Versuchen Sie zu Ihrer Sicherheit, nicht nachts zu reisen

Verladehafen

Mechanische Trommelbremse am Vorderrad. Regenerative elektrische Hinterradbremse. Die doppelte gleichzeitige Bremse sorgt für mehr Stabilität und Manövrierfähigkeit. IPX5-Wasserbeständigkeit.

Reifen

・70/100-19 Geländereifen

・Stoßdämpfer für komfortables Fahren

・Verbesserte Kontrolle und Handhabung

・Geeignet für jedes Gelände

 

Lieferinhalt

Ab x1

Ladegerät x1

Benutzerhandbuch x1

Installationswerkzeuge x1

Schwarzer Helm x1

UNSERE GARANTIE

Wir sind bestrebt, jedem Kunden den bestmöglichen Kundenservice zu bieten, um sicherzustellen, dass Sie ein angenehmes Einkaufserlebnis haben. Wenn Sie Probleme oder Fragen haben oder Hilfe benötigen, zögern Sie bitte nicht, uns direkt zu kontaktieren.

 

UNSERE GARANTIE

 

📦 Versicherter weltweiter Versand: Jede Bestellung enthält Echtzeit-Tracking-Informationen und Versicherungsschutz für den unwahrscheinlichen Fall, dass ein Paket während des Transports verloren geht oder gestohlen wird.

 

💰 Geld-zurück-Garantie: Wenn Ihre Artikel beschädigt ankommen oder innerhalb von 30 Tagen nach der Ankunft defekt sind oder innerhalb von 30 Tagen nach normalem Gebrauch defekt sind, stellen wir Ihnen gerne einen Ersatz oder eine Rückerstattung aus.

 

🔒 Sichere Boxen: Wir verwenden hochmoderne sichere SSL-Verschlüsselung, um Ihre persönlichen und finanziellen Daten zu 100 % zu schützen.

 

Kundenrezensionen

Kundenbewertungen, einschließlich Produkt-Sternebewertungen, helfen Kunden, mehr über das Produkt zu erfahren und zu entscheiden, ob es das richtige Produkt für sie ist.

Kommentare veröffentlichen
Bewertungen der Kunden
Wow, du bist ganz unten angekommen
Neueste
Am meisten gemocht
Höchste Bewertungen
Niedrigste Bewertungen
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.
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);