Galaxy S25 | S25+

Design moderno di grande impatto

Un Galaxy S25 plus di colore Navy entra in scena volando e viene mostrato dal retro. Poi, un Galaxy S25 di dimensioni più piccole, di colore Icyblue, appare al suo fianco mostrato frontalmente.

Ti presentiamo Galaxy S25 e S25+. Un design elegante e di qualità racchiuso in un robusto telaio in alluminio con uno schermo immersivo, una fotocamera avanzata, ora ancora più sottile per una presa più comoda.,

Semplicemente grandiosi

Un Galaxy S25 di colore Icyblue e un Galaxy S25 plus, più grande e di colore Navy, impugnati e mostrati dallo schermo principale.

Il design è più sottile, ma la scelta è molto più ampia con Galaxy S25 e S25+. Sono infatti dotati di un processore progettato su misura (il più potente da noi creato), di una durata della batteria ottimizzata e della nostra AI più innovativa. Scegli di fare le cose ancora più in grande e opta per il Galaxy S25+ con display da 6,7 pollici.,

Nuovi colori per il tuo nuovo smartphone

Angolo preimpostato

Angolo preimpostato

Confronta le dimensioni

5.8

163

200

Elegante. Resistente

Primo piano di un angolo del Galaxy S25 plus e della sua scocca in alluminio.

Protetti da una leggera ma resistente scocca in alluminio, Galaxy S25 e S25+ sono stati progettati per usarli praticamente ovunque.

Assistenza certificata da esperti Samsung

Galaxy AI

La Now Bar fa il suo ingresso in scena da destra a sinistra con una notifica di avviso di Now Brief. La Now Bar si sposta quindi sul fondo dello schermo principale del Galaxy S25 plus, che viene messo al centro dell’inquadratura. Appaiono, impilate l’una sull’altra, tre nuove notifiche della Now Bar: timer, musica e allenamento.

Entra nella nuova era degli smartphone con il tuo compagno AI capace di rispondere ad ogni tua esigenza. Lasciati guidare dal linguaggio naturale e gestisci le attività di ogni giorno con il minimo sforzo.

Premi, parla, fatto

Si vede una mano che tiene un Galaxy S25 plus con YouTube attivo sullo schermo. Il tasto laterale viene tenuto premuto e viene usato il linguaggio naturale per chiedere a Google Gemini di elencare i luoghi citati in un video e salvarli sotto forma di Nota. Cercherà online attraverso varie applicazioni, poi creerà e salverà una Nota.

Completa facilmente tutte le tue attività senza dover passare da un’app all’altra. Ti basta tenere premuto il tasto laterale per chiamare Google Gemini in tuo aiuto.1

Trova risposte immediate alle tue domande

È attivo Google Gemini Live e viene selezionato Parla dal vivo. Poi, viene inviata un’immagine in allegato a Gemini Live. Gemini Live analizza l’immagine e puoi così avviare una conversazione sui contenuti utilizzando il linguaggio naturale.

Con Gemini Live puoi conversare liberamente, fare brainstorming di idee o preparare presentazioni allegando immagini, ottenendo risposte in tempo reale che si adattano al tuo stile di conversazione.

Riepiloghi personalizzati della tua giornata

Now Brief ti invia riepiloghi personalizzati durante tutta la giornata. Il briefing mattutino include aggiornamenti sul meteo e su Punteggio Energetico, il riepilogo dedicato al tragitto casa-lavoro include suggerimenti sul traffico e un aggiornamento sull’abbonamento in scadenza del parcheggio, mentre il briefing serale include una sintesi della giornata con foto prese dalla tua galleria.

Ricevi riepiloghi personalizzati durante tutta la giornata dal nuovissimo Now Brief.Inizia la giornata con un resoconto di cosa ti aspetta, controllando ad esempio il tuo Punteggio Energetico aggiornato e visualizzando promemoria di un’agenda fitta di impegni. Quindi, riepiloga gli eventi della giornata alla sera con dati e analisi delle attività della giornata conclusa.

Inizia la mattina con una panoramica della giornata che ti aspetta, come il controllo dell'ultimo Punteggio Energetico e i promemoria degli impegni. Poi, la sera, riepiloga gli eventi della giornata con gli approfondimenti sull'attività giornaliera.

Uno studio di registrazione a portata di mano

Vengono mostrate delle riprese di soggetti con delle onde sonore che si propagano dal centro. In Regola audio, determinati tipi di rumore indesiderato possono essere ridotti da 0 a meno 100. A meno 100, si evidenzia “Muto”.

Cancella facilmente il rumore di fondo indesiderato dai tuoi video e migliorali con Regola audio prima di condividerli. Ottimizza il tuo audio regolando diversi tipi di suono, tra cui voci, musica, vento e altro.

Combina e monta in modo facile i tuoi video

Degli estratti presi da diversi video vengono combinati in un singolo video con il Ritaglio automatico.

È possibile creare facilmente delle bobine raggruppando i video e premendo semplicemente il tasto Auto Trim. L'intelligenza artificiale rileverà le attività principali e le ritaglierà in clip pronte per essere evidenziate, che potrai facilmente modificare in base alla lunghezza desiderata.

Opzioni personalizzate per il tuo benessere

Viene mostrato lo schermo principale di un Galaxy S25 plus. È attivo Now Brief. Il riepilogo del mattino mostra il Punteggio Energetico del giorno, che è stato sincronizzato anche con il Galaxy Watch.

Tieni il passo e rispetta i tuoi obiettivi di salute monitorando il tuo Punteggio Energetico. Effettua la sincronizzazione con il Galaxy Watch o Ring e ricevi dati e coaching personalizzati, ad esempio un’analisi del sonno, dell’attività e della frequenza cardiaca.,

I tuoi dati personali al sicuro

Il sistema di gestione dei dati personali combina ed elabora i tuoi dati principali, oltre a offrirti suggerimenti personalizzati. Crittografa tali dati e li salva sul tuo dispositivo con Knox Vault, rendendoli inaccessibili a chiunque altro.

Il ProVisual Engine con AI più avanzato

Gli obiettivi della fotocamera del Galaxy S25 plus vengono messi in evidenza e l’intero dispositivo ruota fino a mostrare il retro. Più in fondo, si vede un altro dispositivo che mostra lo schermo principale e la fotocamera anteriore.

Il nostro ProVisual engine è ora potenziato dal nostro potente processore. Prova il nostro sistema creativo avanzato per scattare, visualizzare ed editare: non crederai a quello che vedi.,

Fotocamera anteriore
  • 12 MP Fotocamera per selfie
Fotocamera posteriore
  • 12 MP Ultra Grandangolare
  • 50 MP Grandangolare Zoom di qualità ottica 2x
  • 10 MP Teleobiettivo Zoom ottico 3x

Confronta la fotocamera

Zoom ottico 3x, zoom di qualità ottica 2x, zoom digitale fino a 30x ,,

Zoom ottico ibrido 3x, zoom digitale fino a 30x ,,
Zoom ottico 3x, zoom digitale fino a 30x ,,

Video notturni incredibilmente nitidi senza rumore digitale

Due persone giocano a basket di sera. Le immagini appaiono nitide grazie alla fotocamera del Galaxy S25 plus.

Riprendi video con un HDR a 10 bit migliorato che ti offre un’esperienza visiva sensazionale. Il nostro processore avanzato effettua una rimozione più precisa del rumore digitale, così non dovrai più preoccuparti di girare video notturni sgranati.,

Ritratti spettacolari ogni volta

Ritratto di donna scattato all’aperto. L’illuminazione è precisa e i dettagli del soggetto sono accurati.
Ti abbiamo inquadrato perfettamente. E lo stesso farà anche la nostra telecamera, grazie a Object-aware Engine ancora più efficiente che è in grado di adattarsi a diverse condizioni di illuminazione. Così, potrai riprodurre l’incarnato e la texture della pelle così come li vedono i tuoi occhi.

Filtri su misura per te

A un gruppo di amici su un molo viene scattata una fotografia con un filtro applicato. Durante lo scatto è possibile applicare vari filtri personalizzati.
Dai vita alle tue foto con i tuoi filtri personalizzati. Galaxy AI analizzerà la tua foto preferita creando un filtro che immortala l’essenza della scena. Usalo subito o personalizzalo ulteriormente in base al tuo umore, regolando la saturazione, la luminosità e altro ancora.

Scatti alla velocità della luce

Il nostro avanzato ProVisual engine e il nostro sensore interagiscono alla perfezione offrendoti scatti di alta qualità, anche con velocità dell’otturatore elevate, consentendoti di ritrarre soggetti in movimento con una maggiore nitidezza.

Il processore più potente, progettato per Galaxy

Viene mostrato un processore da 3 nm fluttuare sulla scheda elettronica prima di appoggiarvisi sopra. Dei raggi di luce si irradiano dall’AP prima di trasformarsi in un dispositivo Galaxy S25 Plus. Il dispositivo viene mostrato di profilo disposto orizzontalmente, poi ruota mostrando una scena del gioco Wuthering Waves sullo schermo principale. Con Snapdragon 8 Elite per Galaxy.

Il nostro processore più potente, progettato per i dispositivi Galaxy. Grazie a un ray tracing in tempo reale ancora più efficiente e all'ottimizzazione di Vulkan, potrai immergerti ancora di più nell'azione e vivere un'esperienza di gioco ultra-fluida con la piattaforma mobile Snapdragon® 8 Elite per Galaxy.,,,

  • CPU

    45 % elaborazione più rapida

  • GPU

    48 % performance della grafica migliorata

  • NPU

    68 % performance dell’AI migliorata

Snapdragon® 8 Elite per Galaxy

Dettagli ancora più ricchi. Nota le differenze

Un confronto prima e dopo sul display di un dispositivo Galaxy illustra gli effetti di ProScaler. ProScaler offre una grafica più ricca di dettagli.

La qualità delle immagini sul display è ancora più sorprendente con il nostro ProScaler integrato. Si avvale di un’elaborazione grafica basata su un algoritmo di AI che offre un’esperienza di visione ad alta definizione senza bisogno di regolare le impostazioni del display.,

Batteria a lunga durata

Time lapse di un paesaggio urbano, che evolve dal giorno alla notte per 29 ore e 30 minuti grazie alla batteria a lunga durata di Galaxy S25 plus.

Grazie alla nostra tecnologia pionieristica mDNIe integrata nel processore creato appositamente per i nostri dispositivi e all’ottimizzazione del software, Galaxy S25 e S25+ offrono una batteria con un maggior tempo di utilizzo per permetterti di goderti ore e ore di video.,

  • Guarda fino a

    30 ore di video su Galaxy S25+

  • Guarda fino a

    29 ore di video su Galaxy S25

Confronta la batteria

,

,

Fino a 512 GB di memoria di archiviazione

Archivia di tutto e di più con 12 GB di memoria e fino a 128 GB, 256 GB o 512 GB di spazio di archiviazione sul Galaxy S25 oppure scegli tra 256 GB o 512 GB di spazio disponibili sul Galaxy S25+.

One UI 7, l’interfaccia di nuova concezione progettata per l’AI

Si vede un Galaxy S25 plus con vari widget sullo schermo principale. Il dispositivo viene affiancato da altri widget e notifiche. A sinistra, il widget della galleria, il widget del meteo e le notifiche di avviso della Now Bar di musica, allenamento e timer. A destra, si possono vedere delle notifiche.

Sempre insieme con Galaxy

Sincronizza Galaxy S25 e S25+ con altri dispositivi Samsung Galaxy e scopri un nuovo modo di vivere smart e sempre in connessione.

Il nostro approccio sensibile al futuro

Vogliamo agire pensando al futuro. Per questo ci concentriamo sull’efficienza energetica e la circolarità delle risorse nel ciclo di vita di tutti i prodotti. Ogni contributo, anche il più piccolo, è d’aiuto, e ci impegniamo a fare sempre di più.

Protezione con stile: scegli la tua custodia

Accessori pratici e funzionali, le custodie sono progettate anche per essere eleganti e adattarsi al tuo stile. Scegli quella che fa per te.

Vengono ripresi dall’alto quattro dispositivi della serie Galaxy S25 mostrati dal retro e disposti diagonalmente. In senso orario, dall’alto a destra, si vede prima un Galaxy S25 plus inserito in una Silicone Case di colore Red. Poi si vede un Galaxy S25 Ultra inserito in una Rugged Case di colore Black, affiancato da una S Pen. Quindi si vede un Galaxy S25 plus inserito in una Standing Grip Case di colore Gray e, infine, un altro Galaxy S25 plus inserito in una Flipsuit Case dotata di flip card con il motivo grafico di Keith Haring.

Domande frequenti

Galaxy S25 Ultra

Scopri come ottenere in modo intelligente il tuo Galaxy S25 | S25+

L’orizzonte si apre con Galaxy

  1. Gemini è un marchio di Google LLC. I risultati sono a scopo illustrativo. Sono necessari una connessione internet e l’accesso a un account Google. La disponibilità del servizio può variare a seconda del Paese, della lingua, del modello di dispositivo. Funziona su app compatibili. Le funzionalità possono variare in base al tipo di abbonamento e anche i risultati possono variare. Per determinate funzionalità o app potrebbe essere necessaria la configurazione. L’accuratezza dei risultati non è garantita.
  2. I risultati possono variare a seconda delle condizioni di scatto, ad esempio in presenza di soggetti multipli, non a fuoco o in movimento.
  3. Rispetto ai modelli precedenti.
  4. In base a test interni di Samsung in condizioni di laboratorio, effettuati sulla versione pre-lancio del modello connessa agli auricolari via Bluetooth usando impostazioni predefinite tramite LTE. Stima relativa alla capacità della batteria e alla corrente rispetto al consumo elettrico della batteria durante la riproduzione di video (file video con risoluzione di 720 p, salvato sul dispositivo). Il tempo effettivo di riproduzione dei video può variare in base alla connessione di rete, alle impostazioni, al formato del file video, alla luminosità schermo, allo stato della batteria e a molti altri fattori.
  5. Il telaio in Armor Aluminum non include i tasti laterali e del volume, né il cassettino della SIM.
  6. Misurato diagonalmente come rettangolo pieno. L’area di visione effettiva è inferiore per la presenza degli angoli stondati e/o del foro della fotocamera. Misurato diagonalmente, lo schermo di Galaxy S25 è di 6,2” considerando l’intero rettangolo e di 6,0” esclusi gli angoli stondati; lo schermo di Galaxy S25+ è di 6,7” considerando l’intero rettangolo e di 6,5” esclusi gli angoli stondati; lo schermo di Galaxy S25 Ultra è di 6,9” considerando l’intero rettangolo e di 6,8” esclusi gli angoli stondati; l’area di visione effettiva è inferiore per la presenza degli angoli stondati e/o del foro della fotocamera.
  7. Valore tipico testato secondo condizioni di laboratori esterni. Il valore tipico è il valore medio stimato tenendo in considerazione la deviazione nella capacità della batteria tra i campioni di batterie testati ai sensi della norma IEC 61960. La capacità nominale è 3.885 mAh per Galaxy S25, 4.755 mAh per Galaxy S25+ e 4.855 mAh per Galaxy S25 Ultra.
  8. Colori in esclusiva su Samsung Shop Online e presso il Samsung Experience Store del “Centro Commerciale Il Centro” di Arese.
  9. Il Corning® Gorilla® Glass Victus® 2 è applicato sulla parte anteriore e posteriore del dispositivo.
  10. La resistenza all’acqua è basata su condizioni di prova di laboratorio di immersione in acqua dolce fino a 1,5 metri, per un massimo di 30 minuti. Nessuna entrata di polvere; protezione completa dal contatto (a tenuta di polvere). La resistenza all’acqua e alla polvere del dispositivo non è permanente e potrebbe diminuire nel tempo a causa della normale usura.
  11. Gemini è un marchio di Google LLC. I risultati sono a scopo illustrativo. Per la funzionalità Gemini Live sono necessari una connessione internet e l’accesso a un account Google. La disponibilità del servizio può variare a seconda del Paese, della lingua, del modello di dispositivo. Le funzionalità possono variare in base al tipo di abbonamento e anche i risultati possono variare. Compatibile con determinate funzionalità e determinati account. Disponibile solo per utenti di età pari o superiore a 18 anni. L’accuratezza dei risultati non è garantita.
  12. La funzionalità Now Brief richiede l’accesso al Samsung Account. La disponibilità del servizio può variare a seconda della lingua, del modello di dispositivo, delle app. Per alcune funzionalità può essere necessaria una connessione di rete. Per l’uso del sistema di gestione dei dati personali per ricevere suggerimenti di Routine contestuali è necessario attivare Modalità e Routine. L’utente deve autorizzare l’accesso ad elementi quali foto, video, file audio ed eventi del calendario. In base alla politica di esposizione applicata, potrebbe essere sospesa la visualizzazione di determinati momenti. La descrizione delle foto fornita per determinati momenti potrebbe non rispecchiare l’intenzione originale dell’utente. Le notifiche del calendario sono disponibili solo se è installato Samsung Calendario ed è compatibile con le app di calendario che fanno uso di database di calendario Android. Le notifiche dei coupon sono disponibili solo per i coupon aggiunti a Samsung Wallet associati a una data di scadenza. Per verificare il Punteggio Energetico, i dati sulla salute rilevati con Samsung Galaxy Watch o Samsung Galaxy Ring devono essere sincronizzati con l’app Samsung Health. Non è dispositivo medico e non ha funzione alcuna di diagnosi, trattamento o cura. Le informazioni sanitarie ottenute mediante il dispositivo e l'applicazione non sono da ritenersi parere medico. Per qualsiasi diagnosi consultare un medico.
  13. Cerchia e cerca è un marchio di Google LLC. Sequenze accorciate e simulate. I risultati sono riportati solo a scopo illustrativo. La disponibilità del servizio può variare a seconda del Paese, della lingua o del modello di dispositivo. È necessaria una connessione Internet. Potrebbe essere necessario aggiornare il sistema operativo e l'app Google alla versione più recente. I risultati possono variare a seconda delle corrispondenze con l'immagine o l'audio specifici. L'accuratezza dei risultati non è garantita. Funziona sulle app e sulle superfici compatibili e solo con musica d'ambiente. Non identifica la musica se proviene dalle cuffie o se il volume del telefono è disattivato.
  14. I risultati possono variare da un video all'altro in base ai suoni presenti nel video. È necessario l'accesso al Samsung account. È possibile rilevare alcuni tipi di suoni, ad esempio voci, musica, vento, natura, folla e rumore. Il rilevamento effettivo del suono può variare in base alla sorgente audio e alle condizioni del video. L'accuratezza dei risultati non è garantita.
  15. La lunghezza massima di ogni clip da editare con il Ritaglio automatico di Assistente Foto è 90 minuti. La lunghezza massima totale delle clip combinate da editare con il Ritaglio automatico di Assistente Foto è 180 minuti. Il numero massimo di clip che è possibile editare per ogni progetto video è 60. L’accuratezza dei risultati non è garantita.
  16. Punteggio energetico è disponibile sui telefoni Android (Android 11 o versioni successive) e richiede l’app Samsung Health (v6.27 o versioni successive). È richiesto l’accesso al Samsung Account. Per verificare Punteggio Energetico, i dati sulla salute rilevati con Samsung Galaxy Watch (serie Galaxy Watch4 e modelli successivi dotati di OS 5.0 o versioni successive) o Samsung Galaxy Ring devono essere sincronizzati con l’app Samsung Health. Per poter funzionare devono essere presenti almeno i dati della frequenza cardiaca durante il sonno e i dati di allenamento e del sonno del giorno precedente. Non è dispositivo medico e non ha funzione alcuna di diagnosi, trattamento o cura. Le informazioni sanitarie ottenute mediante il dispositivo e l'applicazione non sono da ritenersi parere medico. Per qualsiasi diagnosi consultare un medico
  17. Galaxy Watch e Galaxy Ring sono venduti separatamente.
  18. Knox Matrix è supportato su smartphone e tablet Galaxy con One UI 7.0 o versioni successive.
  19. Lo zoom di qualità ottica è supportato dal sensore Adaptive Pixel.
  20. Rispetto a Galaxy S24 e S24+.
  21. I miglioramenti delle prestazioni del processore riguardano il Galaxy S25+ rispetto al Galaxy S24+. Le prestazioni effettive dipendono dall’ambiente di utilizzo, dall’utente, dal software e dalle applicazioni preinstallate.
  22. Wuthering Waves è un marchio e/o un marchio registrato di Kuro Games. Disponibile ora per il download nel Galaxy Store. Le opere sono protette da copyright e Kuro Games ne detiene i diritti esclusivi. La disponibilità del servizio può variare a seconda del Paese, della lingua, del modello di dispositivo.
  23. I prodotti a marchio Snapdragon sono prodotti di Qualcomm Technologies, Inc. e/o delle sue controllate.
  24. La funzione ProScaler è supportata dai modelli Galaxy S25+ e Ultra. La qualità dell'immagine può essere migliorata fino a QHD+, in base alla risoluzione dello schermo impostata nel dispositivo.
  25. Parte dello spazio di archiviazione indicato è occupato da contenuti preinstallati. Per il dispositivo Samsung Galaxy S25 128 GB lo spazio di archiviazione disponibile all’utente è approssimativamente pari al 72% della capacità di archiviazione totale indicata. Per il dispositivo Samsung Galaxy S25 256 GB lo spazio di archiviazione disponibile all’utente è approssimativamente pari al 85% della capacità di archiviazione totale indicata. Per il dispositivo Samsung Galaxy S25 512 GB lo spazio di archiviazione disponibile all’utente è approssimativamente pari al 92% della capacità di archiviazione totale indicata. Per il dispositivo Samsung Galaxy S25+ 256 GB lo spazio di archiviazione disponibile all’utente è approssimativamente pari al 85% della capacità di archiviazione totale indicata. Per il dispositivo Samsung Galaxy S25+ 512 GB lo spazio di archiviazione disponibile all’utente è approssimativamente pari al 92% della capacità di archiviazione totale indicata. Lo spazio di archiviazione a disposizione dell'utente è inferiore allo spazio totale a causa dello spazio occupato dal sistema operativo e dai software utilizzati per le funzioni del telefono. Lo spazio effettivo a disposizione dell'utente varia in base all'operatore del telefono cellulare e può cambiare in seguito all'esecuzione degli aggiornamenti software.
  26. Alcuni widget funzionali potrebbero richiedere una connessione di rete e/o l’accesso al Samsung Account.
  27. I trasferimenti via cavo da dispositivi Android™ richiedono che sul dispositivo ricevente sia installato Android™ 4.3 o versioni successive e che sul dispositivo di invio sia installato Android 4.3™ o versioni successive. I trasferimenti possono essere completati senza cavi utilizzando una connessione wireless. Per le connessioni wireless, sul dispositivo ricevente deve essere installato Android™ 4.0 o versioni successive mentre sul dispositivo di invio deve essere installato Android™ 4.0 o versioni successive. Apri Smart Switch Mobile in “Impostazioni” sul dispositivo Galaxy ricevente o scarica l’app Smart Switch Mobile dal Galaxy Store. I dati, i contenuti e le app disponibili per il trasferimento possono variare in base al metodo di trasferimento.
  28. I trasferimenti via cavo da iOS richiedono che sul dispositivo ricevente sia installato Android™ 4.3 o versioni successive e che sul dispositivo di invio sia installato iOS 5 o versioni successive. I trasferimenti possono essere completati senza cavi utilizzando una connessione wireless o iCloud. Per quanto riguarda le connessioni wireless, sul dispositivo ricevente deve essere installato Android™ 4.0 o versioni successive mentre sul dispositivo di invio deve essere installato iOS 12 o versioni successive. I trasferimenti via iCloud richiedono che sul dispositivo ricevente sia installato Android™ 4.0 o versioni successive e che sul dispositivo di invio sia installato iOS 5 o versioni successive. Apri Smart Switch Mobile in “Impostazioni” sul dispositivo Galaxy ricevente o scarica l’app Smart Switch Mobile dal Galaxy Store. Per i trasferimenti wireless, scarica Smart Switch per iOS entrando nell’App Store sul tuo iPhone o iPad. I dati, i contenuti e le app disponibili per il trasferimento possono variare in base al metodo di trasferimento. I contatti, la gallery, i video, i calendari e i promemoria possono essere trasferiti in modalità wireless da un dispositivo iOS.
  29. Si consiglia di utilizzare una connessione via cavo quando si trasferiscono più set di dati contemporaneamente.
  30. I dispositivi Galaxy Buds3 Pro, Galaxy Watch7 e Galaxy Tab S10 sono venduti separatamente.
  31. Il peso può variare a seconda del Paese o dell’area geografica.
  32. Si applicano termini e condizioni. La copertura Samsung Care+, il tipo di servizio e i dettagli della promozione possono variare a seconda del Paese/area geografica e può essere applicata una franchigia (tariffa per il servizio). Per accedere ai vantaggi collegati alla promozione Samsung Care+ potrebbe essere necessaria la registrazione. Per informazioni dettagliate su Samsung Care+, visita https://www.samsung.com/samsung-care-plus/.
  33. La distanza 3x è lo zoom ottico. La distanza 2x è uno zoom di qualità ottica.
  34. Space Zoom 30x include uno zoom ottico 3x e uno zoom digitale 30x con tecnologia Super Resolution. Effettuare uno zoom oltre 3x può provocare un deterioramento dell’immagine.
  35. AI Zoom viene applicato alle distanze fra le lunghezze focali dello zoom digitale. L’accuratezza dei risultati non è garantita.
  36. La durata della batteria effettiva può variare a seconda dell’ambiente di rete, delle funzioni e delle app utilizzate, della frequenza di chiamate e messaggi, del numero di ricariche e di molti altri fattori.
')); } } } } return { init: init, } })(); })(); ; (function () { window.flagship.features.colorsViewer = (function () { const utils = window.flagship.common.utils, resize = window.flagship.common.resize, isLow = utils.isLowNetwork(); let els = {}, currDevice = resize.checkResolution(), pdViewer, isPresetOpenDown, isViewerLoaded = utils.isLowNetwork ? true : false; const init = function () { els.viewerBtn = document.querySelector('.viewer-btn'); els.section = document.querySelector('.js-colors'); els.popup = document.querySelector('.js-viewer'); // viewer els.viewerParent = document.querySelector('.features-colors__viewer360-content'); if (!!isLow) { if (!els.viewerBtn) return; els.currentWrap = els.popup; setElements(); setProperty(); popupEvents.set(); bindEvents(); } else { if (!els.section) return; els.currentWrap = els.section; setElements(); setProperty(); bindEvents(); insertViewer(); } }; const setElements = function () { els.wrapEl = document.querySelector('#wrap'); els.contents = document.querySelector('#contents'); // viewer controls els.resetBtn = els.currentWrap.querySelector('.js-reset-btn'); // viewer els.viewerSection = els.section.querySelector('.js-colors-viewer'); // angle preset els.presetOpen = els.currentWrap.querySelector('.js-preset-open'); els.presetClose = els.currentWrap.querySelector('.js-preset-close'); els.presetLayer = els.currentWrap.querySelector('.js-preset-layer'); els.angleCta = els.currentWrap.querySelectorAll('.js-angle-cta'); }; const insertViewer = function () { const viewerAssetsPath = `/samsung/resources/global/galaxy-s25/common/viewer/`; const viewerBackupPath = `/samsung/resources/global/galaxy-s25/common/vendor/viewer/assets/`; const viewerInitModel = els.viewerSection.getAttribute('data-product-name') || 'galaxy-s25-plus'; const viewerInitColor = els.viewerSection.getAttribute('data-product-color') || 'navy'; const viewerOptions = { assetsPath: viewerAssetsPath, backupPath: viewerBackupPath, bgcolor: 'transparent', gestureGuide: null, useZoom: false, usePan: false, x: -180, y: 0, minAngleX: -180, minAngleY: -90, maxAngleX: 180, maxAngleY: 90, zoom: currDevice = 'tablet' ? 95 : unll }; const modelOptionList = [{ modelName: viewerInitModel, autoRotation: null, color: viewerInitColor, screen: true, screenMode: 'on', statusToggle: false, rotation: { x: 0, y: 0, z: 0 }, position: { x: 0, y: 0, z: 0 }, introPose: '', introPoseOnce: '', introPoseHold: '', introPoseHoldLimit: '' }, ]; insertViewerHTML(els.viewerParent) .then(() => { PDVIEWER.makeViewer(null, viewerOptions, modelOptionList); pdViewer = PDVIEWER.getViewer(); // Viewer Loader image lazy load imageLoader.getLazyMedia(); imageLoader.setLazyMedia(); }); } const setProperty = function () { // timeout els.viewerParent.isHash = false; els.viewerParent.isIntroposeReady = false; els.viewerParent.resetTimeout = null; }; const insertViewerHTML = function (targetEl) { return new Promise((res) => { const target = targetEl ? targetEl : document.body; const viewrHTML = `
`; target.insertAdjacentHTML('beforeend', viewrHTML); res(); }); }; const bindEvents = function () { eventHandler.viewerEvents(); eventHandler.click(); eventHandler.mousedown(); eventHandler.mouseup(); if (!isLow) { eventList.setScene(); } }; const eventHandler = { viewerEvents: function () { window.addEventListener('introPoseReady', eventList.introPoseReady); window.addEventListener('viewerLoadEnd', eventList.viewerLoadEnd); }, click: function () { els.resetBtn && els.resetBtn.addEventListener('click', eventList.clickReset); els.presetOpen && els.presetOpen.addEventListener('click', eventList.openPresetPopup); for (let i = 0; i < els.angleCta.length; i++) { els.angleCta[i].addEventListener('click', eventList.setAngle); } els.contents.addEventListener('click', function (e) { if (e.target.classList.contains('js-reset-btn') || e.target.classList.contains('js-fold-btn') || e.target.classList.contains('js-preset-open') || e.target.closest('.js-preset-layer')) return; eventList.closePresetPopup(); }); }, scroll: function () { window.addEventListener('scroll', eventList.runIntroPose); }, mousedown: function () { els.presetOpen.addEventListener('mousedown', eventList.presetOpenDown); els.presetOpen.addEventListener('touchstart', eventList.presetOpenDown); }, mouseup: function () { els.presetOpen.addEventListener('mouseup', eventList.presetOpenUp); els.presetOpen.addEventListener('touchend', eventList.presetOpenUp); }, presetOpen: function () { window.addEventListener('focusin', eventList.focusInPreset); }, presetClose: function () { window.removeEventListener('focusin', eventList.focusInPreset); } }; const eventList = { viewerLoadEnd: function () { pdViewer.hideLoader(); eventList.setViewerAltText(); isViewerLoaded = true; }, introPoseReady: function () { if (!isLow) { els.viewerParent.isIntroposeReady = true; eventHandler.scroll(); eventList.runIntroPose(); } else { els.viewerParent && pdViewer.runIntroPoseAll(); } }, setScene: function () { els.sceneObj = SCROLLER({ trackElement: els.section, useFixed: false }); }, runIntroPose: function () { els.sceneObj.trackAnimation(function () { let progress = currDevice.indexOf('mobile') > -1 ? 50 : 30; if (this.progress >= progress && !!els.viewerParent.isIntroposeReady) { els.viewerParent && pdViewer.runIntroPoseAll(); window.removeEventListener('scroll', eventList.runIntroPose); } }); }, clickReset: function () { if (!isViewerLoaded) return; pdViewer.reset(); }, presetOpenDown: function () { isPresetOpenDown = true; }, presetOpenUp: function () { isPresetOpenDown = false; }, focusInPreset: function () { if (isPresetOpenDown) return; const isAngleCtaFocus = Array.from(els.angleCta).find((el) => el === document.activeElement); if (els.presetClose !== document.activeElement && !isAngleCtaFocus) { eventList.closePresetPopup(); } }, openPresetPopup: function () { if (!els.presetLayer.classList.contains('is-active')) { els.presetOpen.classList.add('is-open'); els.presetLayer.classList.add('is-active'); els.presetOpen.setAttribute('aria-expanded', true); els.presetClose.focus(); eventHandler.presetOpen(); } else { eventList.closePresetPopup(); } els.presetClose && els.presetClose.addEventListener('click', eventList.closePresetPopup); }, closePresetPopup: function (e) { if (els.presetLayer.classList.contains('is-active')) { els.presetOpen.classList.remove('is-open'); els.presetLayer.classList.remove('is-active'); els.presetOpen.setAttribute('aria-expanded', false); if (e && e.target.classList.contains('js-preset-close')) { els.presetOpen.focus(); } eventHandler.presetClose(); } }, setAngle: function () { if (!isViewerLoaded) return; let target = this, targetAngle = target.getAttribute('data-js-angle'); pdViewer.setModelDirection(targetAngle); accessibility.selected(target); }, setViewerAltText: function () { let altText = ''; if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) { const activeModel = els.viewerSection.getAttribute('data-product-name'); altText = activeModel === 'galaxy-s25-plus' ? LOCAL_VARI.viewer.altTextPlus : LOCAL_VARI.viewer.altTextBasic; } pdViewer.setCanvasAltText(altText); } }; const accessibility = { selected: function (target) { for (let i = 0; i < els.angleCta.length; i++) { els.angleCta[i].removeAttribute('title'); if (els.angleCta[i].classList.contains('is-selected')) { els.angleCta[i].classList.remove('is-selected'); } } if (!target.classList.contains('is-selected')) { target.classList.add('is-selected'); } if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) { target.setAttribute('title', LOCAL_VARI.selected); } else { target.setAttribute('title', 'Selected'); } } }; return { init: init } })(); })(); (function () { window.flagship.features.colors = (function () { const utils = window.flagship.common.utils; let els = {}, colorchips = document.querySelectorAll('.js-colorchip'), isViewerLoaded = utils.isLowNetwork ? true : false; const init = function () { els.section = document.querySelector('.js-colors'); for (let i = 0; i < colorchips.length; i++) { colorchips[i].type = colorchips[i].parentElement.classList.contains('js-popup-colorchip') ? 'popup' : 'colors'; colorchips[i].isStatic = colorchips[i].parentElement.getAttribute('data-static'); flagship.features.colorchip(colorchips[i]); } setElements(); bindEvents(); initialize(); eventList.setActiveModel(els.viewerSection.getAttribute('data-product-name')); } const setElements = function () { // model group els.modelGroupBtns = els.section.querySelectorAll('.js-model-button'); // panel els.panelWrap = els.section.querySelector('.js-panel-wrap'); els.panelInner = els.section.querySelectorAll('.js-panel-inner'); // viewer els.viewerSection = els.section.querySelector('.js-colors-viewer'); els.viewerWrap = els.viewerSection.querySelector('.features-colors__viewer360-content'); // colorchip els.allColorchip = els.section.querySelectorAll('.features-colors__colorchip'); els.allColorchipButtons = els.section.querySelectorAll('.js-colorchip-button'); els.highColorchipWrap = els.section.querySelector('.features-colors__colorchip--high'); els.highColorchipButtons = els.highColorchipWrap.querySelectorAll('.js-colorchip-button'); els.lowColorchipWrap = els.section.querySelector('.features-colors__colorchip--low'); els.colorchipNameBtns = els.section.querySelectorAll('.features-colors__chip-product-text'); els.colorchipButtons = els.lowColorchipWrap.querySelectorAll('.js-colorchip-button'); }; const bindEvents = function () { eventHandler.click(); eventHandler.viewerEvents(); } const initialize = function () { if (els.modelGroupBtns.length === 0) { els.allColorchip.forEach((colorchipWrap) => colorchipWrap.classList.add('is-single')); } } const eventHandler = { click: function () { for (let i = 0; i < els.modelGroupBtns.length; i++) { els.modelGroupBtns[i].addEventListener('click', eventList.clickModelButton); } }, viewerEvents: function () { if (!PDVIEWER.getViewer()) return; window.addEventListener('viewerLoadEnd', eventList.viewerLoadEnd); } } const eventList = { clickModelButton: async function () { if (!isViewerLoaded) return; const modelName = this.getAttribute('data-model-name'); if (modelName === els.viewerSection.getAttribute('data-product-name')) return; if (!utils.isLowNetwork()) { const viewerObj = PDVIEWER.getViewer(); if (!viewerObj || viewerObj.viewer.isChanging) return; const activeColorchipEl = Array.from(els.highColorchipButtons).find((el) => el.classList.contains('is-active')); const colorName = activeColorchipEl.getAttribute('data-colors'); viewerObj.showLoader(); await viewerObj.fadeChangeModel(modelName, colorName); viewerObj.hideLoader(); } els.viewerSection.setAttribute('data-product-name', modelName); eventList.setActiveModel(modelName); }, setActiveModel: function (activeName) { eventList.fadeOut(activeName); eventList.setModelName(activeName); eventList.setColorchip(activeName); eventList.setColorchipName(activeName); if (!utils.isLowNetwork()) { eventList.setCanvasAltText(activeName); } }, setModelName: function (activeName) { for (let i = 0; i < els.modelGroupBtns.length; i++) { const targetBtn = els.modelGroupBtns[i]; targetBtn.classList.remove('is-active'); targetBtn.removeAttribute('title'); if (targetBtn.getAttribute('data-model-name') === activeName) { targetBtn.classList.add('is-active'); accessibility.selected(targetBtn); } } }, setPanel: function (activeName) { for (let i = 0; i < els.panelInner.length; i++) { const panel = els.panelInner[i]; const panelModelName = panel.getAttribute('data-panel-model'); if (panelModelName === activeName) { panel.classList.add('is-active'); eventList.setPanelItem(panel); } else { panel.classList.remove('is-active'); accessibility.inactivePanel(panel) } } }, setPanelItem: function (panelInnerEl) { const activeColorchip = Array.from(els.colorchipButtons).find((el) => el.classList.contains('is-active')); const activeColorName = activeColorchip.getAttribute('data-colors'); const panelItems = panelInnerEl.querySelectorAll('.js-panel-item'); for (let i = 0; i < panelItems.length; i++) { const item = panelItems[i]; if (item.classList.contains('is-active')) item.classList.remove('is-active'); if (item.getAttribute('id') === activeColorName) item.classList.add('is-active'); } accessibility.activePanel(panelInnerEl, activeColorName); }, setColorchip: function (activeName) { for (let i = 0; i < els.allColorchipButtons.length; i++) { const colorchipWrap = els.allColorchipButtons[i].parentElement; const enableModels = colorchipWrap.getAttribute('data-active-model').split(','); const isEnableModel = enableModels.find((name) => name === activeName); if (!isEnableModel) { colorchipWrap.style.display = 'none'; } else { colorchipWrap.style.display = 'block'; } } }, setColorchipName: function (activeName) { for (let i = 0; i < els.colorchipNameBtns.length; i++) { const chipNameBtn = els.colorchipNameBtns[i]; const chipModel = chipNameBtn.getAttribute('data-color-model'); if (chipModel === activeName) { chipNameBtn.classList.add('is-active'); } else { chipNameBtn.classList.remove('is-active'); } } }, fadeOut: function (activeName) { if (utils.isLowNetwork()) { els.panelWrap.removeEventListener('transitionend', eventList.fadeIn.bind(null, activeName)); els.panelWrap.removeEventListener('transitionend', eventList.onFadeIn); els.panelWrap.style.transition = 'opacity .3s ease-in-out'; els.panelWrap.style.opacity = 0; els.panelWrap.addEventListener('transitionend', eventList.fadeIn.bind(null, activeName)); } }, fadeIn: function (activeName) { if (utils.isLowNetwork()) { eventList.setPanel(activeName); els.panelWrap.style.opacity = 1; els.panelWrap.removeEventListener('transitionend', eventList.fadeIn.bind(null, activeName)); els.panelWrap.addEventListener('transitionend', eventList.onFadeIn); } }, onFadeIn: function () { if (utils.isLowNetwork()) { els.panelWrap.style.transition = ''; els.panelWrap.removeEventListener('transitionend', eventList.onFadeIn); } }, setCanvasAltText: function (activeName) { let altText = ''; if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) { altText = activeName === 'galaxy-s25-plus' ? LOCAL_VARI.viewer.altTextPlus : LOCAL_VARI.viewer.altTextBasic; } if (PDVIEWER.getViewer()) PDVIEWER.getViewer().setCanvasAltText(altText); }, viewerLoadEnd: function () { isViewerLoaded = true; } }; const accessibility = { selected: function (target) { if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) { target.setAttribute('title', LOCAL_VARI.selected); } else { target.setAttribute('title', 'Selected'); } }, activePanel: function (activePanel, activeColor) { const panelItems = activePanel.querySelectorAll('.js-panel-item'); for (let i = 0; i < panelItems.length; i++) { const item = panelItems[i]; if (item.getAttribute('id') === activeColor) { item.setAttribute('aria-hidden', false); } else { item.setAttribute('aria-hidden', true); } } }, inactivePanel: function (panel) { const panelItems = panel.querySelectorAll('.js-panel-item'); for (let i = 0; i < panelItems.length; i++) { panelItems[i].setAttribute('aria-hidden', true); } } } return { init: init } })(); window.flagship.features.colorchip = function (colorchipWrap) { const utils = window.flagship.common.utils, resize = window.flagship.common.resize; let els = {}, activeClass = 'is-active', middleClass = 'is-middle', endClass = 'is-end', currentDevice = resize.checkResolution(), prevDevice = null, currentSlidesPerView = currentDevice.indexOf('mobile') > -1 ? 5 : 7, isViewerLoaded = utils.isLowNetwork ? true : false; const init = function () { els.section = document.querySelector('.js-colors'); els.popup = document.querySelector('.js-viewer'); if (colorchipWrap.type == 'popup') { colorchipWrap.contentWrap = els.popup; } else { colorchipWrap.contentWrap = els.section; } setElements(); setProperty(); bindEvents(); }; const setElements = function () { // panel els.panelWrap = els.section.querySelector('.js-panel-wrap'); els.panelInner = els.panelWrap.querySelectorAll('.js-panel-inner'); // colorchip els.swiperContainer = colorchipWrap.querySelector('.js-colorchip-container'); els.colorchipButtons = colorchipWrap.querySelectorAll('.js-colorchip-button'); els.swiperArrowWrap = colorchipWrap.querySelector('.js-arrow-wrap'); els.swiperNextArrow = colorchipWrap.querySelector('.js-colorchip-next'); els.swiperPrevArrow = colorchipWrap.querySelector('.js-colorchip-prev'); els.colorchipNames = colorchipWrap.querySelectorAll('.js-colorchip-name'); // viewer els.viewerSection = els.section.querySelector('.js-colors-viewer'); els.viewerWrap = els.viewerSection.querySelector('.features-colors__viewer360-content'); }; const setProperty = function () { for (let i = 0; i < els.colorchipButtons.length; i++) { els.colorchipButtons[i].index = i; } }; const bindEvents = function () { eventList.checkColorchipSwiper(); if (colorchipWrap.type != 'popup') eventList.setColors(0); eventHandler.click(); eventHandler.keydown(); resize.add(eventList.resize); eventHandler.scroll(); eventHandler.viewerEvents(); if (!utils.isLowNetwork()) { eventHandler.clickHighColorchip(); } }; const eventHandler = { click: function () { for (let i = 0; i < els.colorchipButtons.length; i++) { els.colorchipButtons[i].addEventListener('click', eventList.clickColorchip); } els.swiperNextArrow.addEventListener('click', accessibility.clickArrow); els.swiperPrevArrow.addEventListener('click', accessibility.clickArrow); }, keydown: function () { els.swiperNextArrow.addEventListener('keydown', accessibility.clickArrow); els.swiperPrevArrow.addEventListener('keydown', accessibility.clickArrow); }, scroll: function () { window.addEventListener('scroll', eventList.scroll); }, viewerEvents: function () { if (!PDVIEWER.getViewer()) return; window.addEventListener('viewerLoadEnd', eventList.viewerLoadEnd); }, clickHighColorchip: function () { els.swiperContainer.addEventListener('click', eventList.colorchipsEnable); } }; const eventList = { scroll: function () { let winOffsetBottom = window.pageYOffset + window.innerHeight, kv = document.querySelector('.features-kv'), kvHeight = kv.getBoundingClientRect().height + utils.getNavHeight(); if (winOffsetBottom >= kvHeight) { // bg load colorchipWrap.bgImgs = colorchipWrap.querySelectorAll('.js-bg-img'); if (!!colorchipWrap.bgImgs) bgLoader.setResponsiveMedia(colorchipWrap.bgImgs); window.removeEventListener('scroll', eventList.scroll); } }, checkColorchipSwiper: function () { let colorchipSwiperLength = currentDevice.indexOf('mobile') > -1 ? 6 : 8; if (els.colorchipButtons.length >= colorchipSwiperLength) { if (els.swiperArrowWrap.style.display == 'none') { els.swiperArrowWrap.style.display = ''; } swiperEvents.set(); } else { if (els.swiperArrowWrap.style.display != 'none') { els.swiperArrowWrap.style.display = 'none'; } if (els.colorchipSwiper != null) { swiperEvents.destroy(); } } }, setColors: function (activeIndex) { eventList.setColorchip(activeIndex); eventList.setPanel(activeIndex); eventList.setColorName(activeIndex); // viewer if (PDVIEWER.getViewer()) { eventList.setViewerColor(activeIndex) } }, resize: function (currRes) { currentDevice = currRes; if (currentDevice !== prevDevice) { currentSlidesPerView = currentDevice.indexOf('mobile') > -1 ? 5 : 7; prevDevice = currentDevice; eventList.checkColorchipSwiper(); } }, clickColorchip: async function () { if (!isViewerLoaded) return; if (!utils.isLowNetwork() && PDVIEWER.getViewer()) { if (PDVIEWER.getViewer().viewer.isChanging) return; } const targetColor = this; eventList.setColors(targetColor.index); }, setViewerColor: async function (activeIndex) { const modelName = els.viewerSection.getAttribute('data-product-name'); const colorName = els.colorchipButtons[activeIndex].getAttribute('data-colors'); await PDVIEWER.getViewer().changeColor(modelName, colorName); }, setColorchip: function (activeIndex) { let targetcolorchipButton = els.colorchipButtons[activeIndex]; for (let i = 0; i < els.colorchipButtons.length; i++) { els.colorchipButtons[i].classList.remove(activeClass); els.colorchipButtons[i].removeAttribute('title'); } if (!targetcolorchipButton.classList.contains(activeClass)) { targetcolorchipButton.classList.add(activeClass); accessibility.selected(targetcolorchipButton); } }, setPanel: function (activeIndex) { if (!colorchipWrap.isStatic) return; const activePanelInner = Array.from(els.panelInner).find((el) => el.classList.contains('is-active')); if (!activePanelInner) return; const panelItems = activePanelInner.querySelectorAll('.js-panel-item'); for (let i = 0; i < panelItems.length; i++) { if (panelItems[i].classList.contains(activeClass)) { panelItems[i].classList.remove(activeClass); panelItems[i].setAttribute('aria-hidden', true); } } if (!panelItems[activeIndex].classList.contains(activeClass)) { panelItems[activeIndex].classList.add(activeClass); panelItems[activeIndex].setAttribute('aria-hidden', false); } }, setColorName: function (activeIndex) { for (let i = 0; i < els.colorchipNames.length; i++) { if (i !== activeIndex) { utils.onAccessibility(els.colorchipNames[i]); } if (els.colorchipNames[i].classList.contains(activeClass)) { els.colorchipNames[i].classList.remove(activeClass); } } if (!els.colorchipNames[activeIndex].classList.contains(activeClass)) { els.colorchipNames[activeIndex].classList.add(activeClass); utils.offAccessibility(els.colorchipNames[activeIndex]); } }, viewerLoadEnd: function () { isViewerLoaded = true; }, colorchipsEnable: function () { if (!PDVIEWER.getViewer().viewer.isChanging) { els.section.classList.remove('is-viewer-loading'); } } }; const swiperEvents = { set: function () { if (els.colorchipSwiper == null) { els.colorchipSwiper = new Swiper(els.swiperContainer, { init: false, navigation: { nextEl: els.swiperNextArrow, prevEl: els.swiperPrevArrow, }, slidesPerView: currentSlidesPerView, speed: 300, }); els.colorchipSwiper.on('init', swiperEvents.init); els.colorchipSwiper.on('slideChange', swiperEvents.slideChange); els.colorchipSwiper.init(); } }, init: function () { let notification = this.el.querySelector('.swiper-notification'); if (!!notification) this.el.removeChild(notification); els.swiperPrevArrow.removeAttribute('aria-label'); els.swiperPrevArrow.removeAttribute('role'); els.swiperNextArrow.removeAttribute('aria-label'); els.swiperNextArrow.removeAttribute('role'); accessibility.colorchip(els.colorchipSwiper); accessibility.colorchipArrow(els.colorchipSwiper); }, slideChange: function () { accessibility.colorchip(els.colorchipSwiper); accessibility.colorchipArrow(els.colorchipSwiper); }, destroy: function () { els.colorchipSwiper.destroy(true); els.colorchipSwiper = null; }, }; const accessibility = { clickArrow: function (e) { let arrowTimeout = null, arrowStyleTimeout = null; if ((e.type == 'keydown' && e.keyCode == 13) || e.type == 'click') { e.preventDefault(); if (els.colorchipSwiper.isBeginning && !els.colorchipSwiper.isEnd) { els.swiperContainer.parentElement.classList.remove(middleClass); els.swiperContainer.parentElement.classList.remove(endClass); clearTimeout(arrowTimeout); arrowTimeout = setTimeout(function () { els.swiperNextArrow.focus(); }, 300); clearTimeout(arrowStyleTimeout); arrowStyleTimeout = setTimeout(function () { els.swiperPrevArrow.style.display = ''; }, 400); } else if (!els.colorchipSwiper.isBeginning && els.colorchipSwiper.isEnd) { els.swiperContainer.parentElement.classList.remove(middleClass); els.swiperContainer.parentElement.classList.add(endClass); clearTimeout(arrowTimeout); arrowTimeout = setTimeout(function () { els.swiperPrevArrow.focus(); }, 300); clearTimeout(arrowStyleTimeout); arrowStyleTimeout = setTimeout(function () { els.swiperNextArrow.style.display = ''; }, 400); } if (!els.colorchipSwiper.isBeginning && !els.colorchipSwiper.isEnd) { els.swiperContainer.parentElement.classList.remove(endClass); els.swiperContainer.parentElement.classList.add(middleClass); } } }, colorchip: function (swiperObj) { let isNotActivedColorchips = null; for (let i = 0; i < swiperObj.slides.length; i++) { if (currentDevice.indexOf('mobile') > -1) { isNotActivedColorchips = (i != swiperObj.activeIndex) && (i > swiperObj.activeIndex + 4) || (swiperObj.activeIndex > i); } else { isNotActivedColorchips = (i != swiperObj.activeIndex) && (i > swiperObj.activeIndex + 6) || (swiperObj.activeIndex > i); } if (isNotActivedColorchips) { utils.onAccessibility(swiperObj.slides[i]); setTimeout(function () { utils.onAccessibility(swiperObj.slides[i]); }, 300); } else { utils.offAccessibility(swiperObj.slides[i]); setTimeout(function () { utils.offAccessibility(swiperObj.slides[i]); }, 300); } } }, colorchipArrow: function (swiperObj) { if (swiperObj.isBeginning && !swiperObj.isEnd) { utils.onAccessibility(els.swiperPrevArrow); utils.offAccessibility(els.swiperNextArrow); } else if (!swiperObj.isBeginning && !swiperObj.isEnd) { utils.offAccessibility(els.swiperPrevArrow); utils.offAccessibility(els.swiperNextArrow); } else { utils.onAccessibility(els.swiperNextArrow); utils.offAccessibility(els.swiperPrevArrow); } }, selected: function (target) { if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) { target.setAttribute('title', LOCAL_VARI.selected); } else { target.setAttribute('title', 'Selected'); } } }; return init(colorchipWrap); }; })(); (function () { window.flagship.features.compares = (function () { const init = function () { const compares = document.querySelectorAll('.js-compare'); for (let i = 0; i < compares.length; i++) { compares[i].type = compares[i].getAttribute('data-compare-type') || null; flagship.features.compare(compares[i]); } } return { init: init } })(); window.flagship.features.compare = function (compareWrap) { const resize = window.flagship.common.resize, compareOption = window.flagship.features.compareOption; let els = {}, prevDevice = null, currDevice = resize.checkResolution(), isMousedown = false; els.currentOldValue = null, els.compareOldValue = null; const compareData = { 'SM-S931': { modelName: 'galaxy-s25', modelText: 'Galaxy S25', weight: { A: 162, B: 162, }, thickness: 7.2, hrs: { A: 29, B: 29, } }, 'SM-S936': { modelName: 'galaxy-s25-plus', modelText: 'Galaxy S25+', weight: { A: 190, B: 190, }, thickness: 7.3, hrs: { A: 30, B: 30, } }, 'SM-S916': { modelName: 'galaxy-s23-plus', modelText: 'Galaxy S23+', weight: { A: 196, B: 195, }, thickness: 7.6, hrs: { A: 27, B: 27, } }, 'SM-S911': { modelName: 'galaxy-s23', modelText: 'Galaxy S23', weight: { A: 168, B: 168, }, thickness: 7.6, hrs: { A: 22, B: 22, } }, 'SM-S906': { modelName: 'galaxy-s22-plus', modelText: 'Galaxy S22+', weight: { A: 196, B: 195, }, thickness: 7.6, hrs: { A: 21, B: 22, } }, 'SM-S901': { modelName: 'galaxy-s22', modelText: 'Galaxy S22', weight: { A: 168, B: 167, }, thickness: 7.6, hrs: { A: 18, B: 19, } }, 'SM-G996': { modelName: 'galaxy-s21-plus', modelText: 'Galaxy S21+ 5G', weight: { A: 202, B: 200, }, thickness: 7.8, hrs: { A: 22, B: 22, } }, 'SM-G991': { modelName: 'galaxy-s21', modelText: 'Galaxy S21 5G', weight: { A: 171, B: 169, }, thickness: 7.9, hrs: { A: 19, B: 20, } } } const init = function () { els.section = compareWrap; if (!!els.section) { setElements(); setProperty(); bindEvents(); eventList.setCompareVari(); eventList.getDeviceInfo().then((modelCode) => { if (!modelCode || !Object.keys(compareData).find((sku) => sku === modelCode) || (modelCode === 'SM-S931' || 'SM-S936')) { modelCode = 'SM-G996'; } const currentModel = 'SM-S936'; eventList.setDefault(els.currentVisual, currentModel); eventList.selectItem(els.currentVisual, currentModel); eventList.setDefault(els.compareVisual, modelCode); eventList.selectItem(els.compareVisual, modelCode); }); } }; const setElements = function () { els.visualEls = []; els.currentVisual = els.section.querySelector('.js-current-visual'); els.compareVisual = els.section.querySelector('.js-compare-visual'); els.visualEls.push(els.currentVisual, els.compareVisual); els.visualEls.forEach((visualEl) => visualEl.dropdown = visualEl.querySelector('.js-dropdown')); if (els.section.type === 'camera') { els.zoomTexts = els.section.querySelectorAll('.js-copy-zoom'); } else if (els.section.type === 'design') { els.thicknessTexts = els.section.querySelectorAll('.js-copy-thickness'); els.weightTexts = els.section.querySelectorAll('.js-copy-weight'); els.visualEls.forEach((visualEl) => { visualEl.compareThickness = visualEl.querySelector('.js-thickness-value'); visualEl.compareWeight = visualEl.querySelector('.js-weight-value'); visualEl.thicknessUnits = visualEl.querySelectorAll('.js-thickness-unit'); visualEl.weightUnits = visualEl.querySelectorAll('.js-weight-unit'); }); } else if (els.section.type === 'battery') { els.playbackTexts = els.section.querySelectorAll('.js-copy-playback'); els.visualEls.forEach((visualEl) => { visualEl.compareHrs = visualEl.querySelector('.js-hrs-value'); visualEl.batteryUnits = visualEl.querySelectorAll('.js-battery-unit'); }) } }; const setProperty = function () { els.visualEls.forEach((visualEl) => { visualEl.dropdown.selectBox = visualEl.dropdown.querySelector('.js-select-box'); visualEl.dropdown.button = visualEl.dropdown.querySelector('.js-select-button'); visualEl.dropdown.list = visualEl.dropdown.querySelector('.js-select-list'); visualEl.dropdown.listItem = visualEl.dropdown.list.querySelectorAll('.js-select-item'); }); if (els.section.type === 'camera') { els.zoomTexts.forEach((textEl) => { textEl.key = 'zoom'; textEl.defaultText = 'Zoom'; }) } else if (els.section.type === 'design') { els.thicknessTexts.forEach((textEl) => { textEl.key = 'thickness'; textEl.defaultText = 'Thickness'; }); els.weightTexts.forEach((textEl) => { textEl.key = 'weight'; textEl.defaultText = 'Weight'; }); els.visualEls.forEach((visualEl) => { for (let i = 0; i < visualEl.thicknessUnits.length; i++) { visualEl.thicknessUnits[i].key = 'mm'; visualEl.thicknessUnits[i].defaultText = 'mm'; } for (let i = 0; i < visualEl.weightUnits.length; i++) { visualEl.weightUnits[i].key = 'g'; visualEl.weightUnits[i].defaultText = 'g'; } }); } else if (els.section.type === 'battery') { els.playbackTexts.forEach((textEl) => { textEl.key = 'playback' textEl.defaultText = 'Video Playback'; }); els.visualEls.forEach((visualEl) => { for (let i = 0; i < visualEl.batteryUnits.length; i++) { visualEl.batteryUnits[i].key = 'hrs'; visualEl.batteryUnits[i].defaultText = 'hrs'; } }); } }; const bindEvents = function () { resize.add(eventList.resize); eventHandler.click(); eventHandler.mousedown(); eventHandler.mouseup(); eventHandler.change(); eventHandler.resize(); eventHandler.offFocusSelect() }; const eventHandler = { click: function () { els.section.addEventListener('click', function (event) { const isButton = event.target.classList.contains('js-select-button'); const isOption = event.target.classList.contains('js-select-item'); if (isButton) { eventHandler.dropdownClickCheck(event); eventList.dropdowntoggle(event); accessibility.changeAriaHidden(); } else if (isOption) { eventList.clickCompareModel(event.target); eventList.clickOption(event.target); eventList.dropdownClose(); accessibility.dropdownFocus(event.target); } }); els.visualEls.forEach((visualEl) => visualEl.dropdown.selectBox.addEventListener("click", eventList.clickSelect)); }, change: function () { els.visualEls.forEach((visualEl) => { visualEl.dropdown.selectBox.addEventListener('change', function (event) { eventList.clickOption(event.target); eventList.changeSelectBox(event.target); }); }); }, resize: function () { window.addEventListener('resize', function () { accessibility.changeAriaHidden(); }); }, mousedown: function () { els.visualEls.forEach((visualEl) => { visualEl.dropdown.button.addEventListener('mousedown', function () { isMousedown = true; }); }); }, mouseup: function () { els.visualEls.forEach((visualEl) => { visualEl.dropdown.button.addEventListener('mouseup', function () { isMousedown = false; }); }); }, dropdownClickCheck: function () { document.addEventListener('click', eventList.checkDropdownClick); }, offDropdownClickCheck: function () { document.removeEventListener('click', eventList.checkDropdownClick); }, onFocusInDropdown: function () { eventHandler.offFocusInDropdown(); document.addEventListener('focusin', eventList.focusInDropdown); }, offFocusInDropdown: function () { document.removeEventListener('focusin', eventList.focusInDropdown); }, offFocusSelect: function () { els.visualEls.forEach((visualEl) => { visualEl.dropdown.selectBox.addEventListener('blur', eventList.offFocusSelect) }); } } const eventList = { isDropdownSelect: function () { return els.visualEls.every((visualEl) => visualEl.dropdown.selectBox.clientHeight > 0); }, dropdowntoggle: function (event) { const isExpanded = event.target.getAttribute('aria-expanded') === 'true'; event.target.setAttribute('aria-expanded', !isExpanded); if (!isExpanded) { event.target.classList.add('is-active'); eventHandler.onFocusInDropdown(); setTagging.close(event.target); } else { event.target.classList.remove('is-active'); setTagging.open(event.target); } }, checkDropdownClick: function (event) { const isButton = event.target.classList.contains('js-select-button'); const isOption = event.target.classList.contains('js-select-item'); if (!isButton && !isOption) { eventList.dropdownClose(); } }, dropdownClose: function () { els.visualEls.forEach((visualEl) => { visualEl.dropdown.button.setAttribute('aria-expanded', 'false'); visualEl.dropdown.button.classList.remove('is-active'); const button = visualEl.dropdown.button; if (!(button.getAttribute('aria-expanded') === 'true')) { setTagging.open(button); } }); eventHandler.mouseup(); eventHandler.offDropdownClickCheck(); eventHandler.offFocusInDropdown(); accessibility.changeAriaHidden(); }, focusInDropdown: function (event) { const isInList = event.target.closest('.js-select-list'); const isButton = event.target.classList.contains('js-select-button'); if (!isInList && !(isButton && isMousedown)) { eventList.dropdownClose(); } }, clickOption: function (target) { const targetParent = target.closest('.js-dropdown'); targetParent.selectBoxButton = targetParent.querySelector('.js-select-button'); if (eventList.isDropdownSelect()) { const selectIndex = targetParent.selectBox.selectedIndex, optionList = targetParent.selectBox.options; Array.from(optionList).forEach(option => option.removeAttribute('selected')); optionList[selectIndex].setAttribute('selected', true) targetParent.button.textContent = optionList[selectIndex].textContent; } else { const selectItemDataValue = target.getAttribute('data-value'); Array.from(targetParent.selectBox.children).forEach((optionEl) => { const value = optionEl.getAttribute('value'); if (value !== selectItemDataValue) { optionEl.removeAttribute('selected'); } else { optionEl.setAttribute('selected', 'true'); } }); targetParent.selectBox.value = selectItemDataValue; targetParent.button.textContent = target.textContent; } }, setDefault: function (visualEl, modelValue) { const { modelText } = compareData[modelValue]; visualEl.dropdown.button.innerText = modelText; accessibility.changeAriaHidden(); }, changeDescription: function (modelValue, visualEl) { const textLists = visualEl.querySelectorAll('.js-camera-text-change'); if (textLists.length > 0) { textLists.forEach(function (list) { const matchDataItems = list.dataset.value.split(' '); const isMatched = matchDataItems.some(item => item === modelValue); !isMatched ? accessibility.ariaHiddenTrue(list) : accessibility.ariaHiddenFalse(list); if (isMatched && !els.targetOldValue) { list.classList.add('is-init'); } else if (els.targetOldValue && els.targetOldValue !== modelValue) { list.classList.remove('is-active'); list.classList.remove('is-show'); list.classList.remove('is-init'); if (isMatched) { accessibility.ariaHiddenFalse(list); list.classList.add('is-show'); setTimeout(function () { list.classList.add('is-active'); }) } } }) } }, clickCompareModel: function (optionEl) { const modelValue = optionEl.getAttribute('data-value') || ''; const targetVisualEl = els.visualEls.find((visualEl) => Array.from(visualEl.dropdown.listItem).includes(optionEl)); eventList.selectItem(targetVisualEl, modelValue); }, changeSelectBox: function (selectEl) { const targetVisualEl = els.visualEls.find((visualEl) => visualEl.dropdown.selectBox === selectEl); const selectedEl = Array.from(selectEl.childNodes).find((el) => el.selected); const modelValue = selectedEl.value; eventList.selectItem(targetVisualEl, modelValue); }, resize: function (currRes) { currDevice = currRes; if (currDevice != prevDevice) { eventList.responsive(); prevDevice = currDevice; } eventList.dropdownClose(); els.visualEls.forEach((visualEl) => visualEl.dropdown.selectBox.classList.remove("is-active")); }, responsive: function () {}, getDeviceInfo: function () { return new Promise((resolve, reject) => { if (navigator.userAgentData) { navigator.userAgentData.getHighEntropyValues(['model']).then((uaData) => { const modelCode = uaData.model ? uaData.model.slice(0, 7) : null; resolve(modelCode); }).catch((err) => reject(err)); } else { const compareModelList = Object.keys(compareData); const sku = compareModelList.find((sku) => navigator.userAgent.includes(sku)); resolve(sku); } }); }, setCompareVari: function () { let targetTexts = []; if (els.section.type === 'design') { targetTexts = Array.from(els.thicknessTexts).concat(Array.from(els.weightTexts)); els.visualEls.forEach((visualEl) => { targetTexts = targetTexts.concat(Array.from(visualEl.thicknessUnits)) .concat(Array.from(visualEl.weightUnits)) }); } else if (els.section.type === 'camera') { targetTexts = Array.from(els.zoomTexts); } else if (els.section.type === 'battery') { targetTexts = Array.from(els.playbackTexts); els.visualEls.forEach((visualEl) => { targetTexts = targetTexts.concat(Array.from(visualEl.batteryUnits)) }) } targetTexts.forEach((el) => { const { key, defaultText } = el; if (typeof COMPARE_VARI != 'undefined' && !!COMPARE_VARI) { el.innerText = COMPARE_VARI[key] || defaultText; } else { el.innerText = defaultText; } }); }, setCompareValueText: function (visualEl, modelValue) { const { thickness, weight, hrs } = compareData[modelValue]; if (els.section.type === 'design') { const weightType = weight[compareOption.type] ? weight[compareOption.type] : weight['B']; visualEl.compareThickness.innerText = thickness; visualEl.compareWeight.innerText = weightType; } else if (els.section.type === 'camera') { eventList.changeDescription(modelValue, visualEl); } else if (els.section.type === 'battery') { const hrsType = hrs[compareOption.type] ? hrs[compareOption.type] : hrs['B']; visualEl.compareHrs.innerText = hrsType; } }, selectItem: function (visualEl, modelValue) { els.targetOldValue = visualEl.classList.contains('js-current-visual') ? els.currentOldValue : els.compareOldValue; eventList.setCompareValueText(visualEl, modelValue); if (els.targetOldValue && els.targetOldValue !== modelValue) { const textAreaList = visualEl.querySelectorAll('.js-text-change'); textAreaList.forEach((textEl) => textEl.classList.remove('is-active')); setTimeout(() => textAreaList.forEach((textEl) => textEl.classList.add('is-active')), 0); } accessibility.changeSelected(visualEl, modelValue); if (els.targetOldValue === els.currentOldValue) { els.currentOldValue = modelValue; } else { els.compareOldValue = modelValue; } }, clickSelect: function (event) { event.target.classList.toggle("is-active"); }, offFocusSelect: function () { els.visualEls.forEach((visualEl) => { if (visualEl.dropdown.selectBox.classList.contains("is-active")) { visualEl.dropdown.selectBox.classList.remove("is-active"); } }); } }; const accessibility = { changeSelected: function (visualEl, modelCode) { const targetDropdownItem = visualEl.querySelectorAll('.js-select-item'); const target = Array.from(targetDropdownItem).find((el) => el.getAttribute('data-value') === modelCode); const selectBoxOptions = visualEl.querySelector('.js-select-box').options; for (let i = 0; i < selectBoxOptions.length; i++) { const optionValue = selectBoxOptions[i].getAttribute('value'); if (optionValue !== modelCode) { selectBoxOptions[i].removeAttribute('selected'); } else { selectBoxOptions[i].setAttribute('selected', true) } } for (let i = 0; i < targetDropdownItem.length; i++) { if (targetDropdownItem[i] !== target) { targetDropdownItem[i].removeAttribute('title'); } else { accessibility.selected(target); } } }, changeAriaHidden: function () { els.visualEls.forEach((visualEl) => { eventList.isDropdownSelect(); if (eventList.isDropdownSelect()) { accessibility.ariaHiddenTrue(visualEl.dropdown.list); accessibility.ariaHiddenTrue(visualEl.dropdown.button); if (visualEl.dropdown.selectBox.hasAttribute('aria-hidden')) { accessibility.ariaHiddenFalse(visualEl.dropdown.selectBox); } } else { const isOpened = visualEl.dropdown.button.getAttribute('aria-expanded') === 'true'; setTimeout(() => { // Console warning on aria-hidden on focus element accessibility.ariaHiddenTrue(visualEl.dropdown.selectBox); accessibility.ariaHiddenFalse(visualEl.dropdown.button); if (isOpened) { accessibility.ariaHiddenFalse(visualEl.dropdown.list); } else { accessibility.ariaHiddenTrue(visualEl.dropdown.list); } }); } }); }, ariaHiddenTrue: function (element) { element.setAttribute('aria-hidden', true); element.setAttribute('tabindex', '-1'); }, ariaHiddenFalse: function (element) { element.removeAttribute('aria-hidden'); element.removeAttribute('tabindex'); }, dropdownFocus: function (target) { const targetVisual = target.closest('.js-current-visual') ? target.closest('.js-current-visual') : target.closest('.js-compare-visual') targetVisual.dropdown.button.focus(); }, selected: function (target) { if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) { target.setAttribute('title', LOCAL_VARI.selected); } else { target.setAttribute('title', 'Selected'); } } } const setTagging = { open: function (target) { if (target.hasAttribute('data-omni')) { let dataOmni = target.getAttribute('data-omni').toLowerCase(); target.setAttribute('data-omni', dataOmni.replace('close', 'open')); } if (target.hasAttribute('ga-la')) { let gaLa = target.getAttribute('ga-la').toLowerCase(); target.setAttribute('ga-la', gaLa.replace('close', 'open')); } }, close: function (target) { if (target.hasAttribute('data-omni')) { let dataOmni = target.getAttribute('data-omni').toLowerCase(); target.setAttribute('data-omni', dataOmni.replace('open', 'close')); } if (target.hasAttribute('ga-la')) { let gaLa = target.getAttribute('ga-la').toLowerCase(); target.setAttribute('ga-la', gaLa.replace('open', 'close')); } } }; return init(compareWrap); }; })(); (function () { window.flagship.features.designSpec = (function () { const utils = window.flagship.common.utils; let els = {}; let status = {}; const init = function () { els.section = document.querySelector('.features-design-spec'); els.layerPopup = document.querySelector('.js-compare-popup'); if (!!els.section && !!els.layerPopup) { setElements(); setStatus(); bindEvents(); } }; const setElements = function () { els.contents = document.querySelector('#contents'); els.popupDimmed = document.querySelector('.js-compare-popup__dimmed'); els.openCta = document.querySelector('.js-compare-popup-opener'); els.closeCta = document.querySelectorAll('.js-compare-popop__close-cta'); els.popupWrapper = document.querySelector('.features-design-spec-popup__wrapper'); els.supClicker = els.layerPopup.querySelectorAll('a.click_sup'); els.hashPopupOpener = null; }; const setStatus = function () { status.isHash = false; } const bindEvents = function () { eventList.setPopup(); for (let i = 0; i < els.supClicker.length; i++) { if (!!els.supClicker) { els.supClicker[i].addEventListener('click', eventList.onClickSup); } } }; const eventList = { setPopup: function () { utils.layerPopup({ layerPopup: els.layerPopup, layerPopupClass: '.js-compare-popup', openerEvent: { element: els.openCta, }, closeCtas: els.closeCta, dimmed: els.popupDimmed, moveTarget: document.documentElement, contents: els.contents, show: { start: function () { els.layerPopup.removeAttribute('aria-hidden'); els.layerPopup.removeAttribute('tabindex'); els.layerPopup.classList.add('is-init'); if (`#${els.openCta.getAttribute('data-hash')}` == window.location.hash) { status.isHash = true; els.hashPopupOpener = els.openCta; } }, end: function () { els.layerPopup.classList.add('is-open'); }, }, hide: { start: function () { els.layerPopup.classList.remove('is-open'); }, end: function (target) { if (utils.detector.isIosDevice) target.openerCta.style.display = ''; setTimeout(function () { els.layerPopup.classList.remove('is-init'); }, 300); if (els.popupWrapper) { els.popupWrapper.scrollTop = 0; } if (status.isHash && els.hashPopupOpener) { els.hashPopupOpener.focus(); setTimeout(function () { els.hashPopupOpener.focus(); status.isHash = false; els.hashPopupOpener = null; }, 300); } } } }); }, onClickSup: function () { els.layerPopup.hide(); }, }; return { init: init, } })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.features = window.flagship.features || {}; window.flagship.features.display = (function () { const utils = window.flagship.common.utils; const resize = window.flagship.common.resize; let els = {}; let objs = {}; let status = {}; let currDevice = resize.checkResolution(); let prevDevice = null; const init = function () { els.section = document.querySelector('.features-display'); if (!!els.section) { setElements(); setStatus(); bindEvents(); } }; const setElements = function () { els.resizeTimeout = null; els.displayBarWrap = els.section.querySelector('.features-display__bar'); els.displayBar = els.displayBarWrap.querySelector('.features-display__bar-line'); els.displayImage = els.section.querySelector('.features-display__image'); els.displayCoverImage = els.section.querySelector('.features-display__cover'); els.isGrab = false; els.isAction = false; els.displayCoverLeftWrap = els.section.querySelector('.features-display__tap--left'); els.displayCoverLeftBtn = els.section.querySelector('.features-display__tap--left button'); els.displayCoverRightBtn = els.section.querySelector('.features-display__tap--right button'); els.controller = els.section.querySelector('.features-display__button'); els.imgWrap = els.section.querySelector('.features-display__image-inner'); els.tabWrap = els.section.querySelector('.features-display__tap-wrap'); maxPercent = currDevice === 'mobileS' ? 0.805 : currDevice === 'mobile' ? 0.845 : 0.985; minPercent = currDevice === 'mobileS' ? 0.193 : currDevice === 'mobile' ? 0.155 : 0.015; }; const setStatus = function () { status.isTabMove = false; }; const bindEvents = function () { window.addEventListener('DOMContentLoaded', onLoadHandler, { once: true }); window.addEventListener('scroll', onScrollHandler); els.section.addEventListener('click', grabEventHandler.onMoveEvent); els.section.addEventListener('mousedown', grabEventHandler.onStart); els.section.addEventListener('mousemove', grabEventHandler.onMove); els.section.addEventListener('mouseup', grabEventHandler.onEnd); els.section.addEventListener('mouseleave', grabEventHandler.onEnd); els.section.addEventListener('touchstart', grabEventHandler.onStart); els.section.addEventListener('touchmove', grabEventHandler.onMove); els.section.addEventListener('touchend', grabEventHandler.onEnd); els.section.addEventListener('touchcancel', grabEventHandler.onEnd); els.section.addEventListener('touchmove', grabEventHandler.moveDisabled); els.section.addEventListener('mousemove', grabEventHandler.moveDisabled); els.section.addEventListener('click', grabEventHandler.moveDisabled); resize.add(onResizeHandler); } const setAnimations = function () { let minValue = currDevice.indexOf('mobile') > -1 ? 27.5 : 25; let maxValue = currDevice.indexOf('mobile') > -1 ? 72.5 : 75; TweenMax.set(els.displayBar, { left: `${minValue}%`, ease: Power2.easeOut }); TweenMax.set(els.controller, { left: `${minValue}%`, ease: Power2.easeOut }); TweenMax.set(els.displayCoverImage, { width: `${minValue}%`, ease: Power2.easeOut }); objs.barAnim = new TimelineLite(); objs.barAnim .to(els.displayBar, 1, { left: `${maxValue}%`, ease: Power2.easeOut }) .to(els.displayBar, 1, { left: 50 + '%', ease: Power2.easeOut }); objs.buttonAnim = new TimelineLite(); objs.buttonAnim .to(els.controller, 1, { left: `${maxValue}%`, ease: Power2.easeOut }) .to(els.controller, 1, { left: 50 + '%', ease: Power2.easeOut }); objs.imgAnim = new TimelineLite(); objs.imgAnim .to(els.displayCoverImage, 1, { width: `${maxValue}%`, ease: Power2.easeOut }) .to(els.displayCoverImage, 1, { width: 50 + '%', ease: Power2.easeOut }); TweenMax.set(els.displayCoverLeftWrap, { width: `${minValue}%`, ease: Power2.easeOut }); objs.imgAnim = new TimelineLite(); objs.imgAnim .to(els.displayCoverLeftWrap, 1, { width: `${maxValue}%`, ease: Power2.easeOut }) .to(els.displayCoverLeftWrap, 1, { width: 50 + '%', ease: Power2.easeOut }); }; const onLoadHandler = function () { onScrollHandler(); }; const onResizeHandler = function (currRes) { currDevice = currRes; clearTimeout(els.resizeTimeout); els.resizeTimeout = setTimeout(function () { onScrollHandler(); }, 150); if (currDevice != prevDevice) { onResponsiveHandler(); prevDevice = currDevice; } }; const onResponsiveHandler = function () { maxPercent = currDevice === 'mobileS' ? 0.805 : currDevice === 'mobile' ? 0.845 : 0.985; minPercent = currDevice === 'mobileS' ? 0.193 : currDevice === 'mobile' ? 0.155 : 0.015; TweenMax.set(els.displayBar, { left: 50 + '%' }); TweenMax.set(els.controller, { left: 50 + '%' }); TweenMax.set(els.displayCoverImage, { width: 50 + '%' }); TweenMax.set(els.displayCoverLeftWrap, { width: 50 + '%' }); }; const onScrollHandler = function () { let winOffsetTop = window.pageYOffset + utils.getNavHeight(); let winOffsetBottom = window.pageYOffset + window.innerHeight; let targetRect = els.displayImage.getBoundingClientRect(); let targetOffsetTop = window.pageYOffset + targetRect.top; let targetOffsetBottom = window.pageYOffset + targetRect.bottom; if ((winOffsetBottom - (window.innerHeight * 0.25) > targetOffsetTop && winOffsetTop + (window.innerHeight * 0.25) < targetOffsetBottom) && !els.isAction) { setAnimations(); els.isAction = true; } }; const grabEventHandler = { onStart: function (e) { e.target.matches('.features-display__button') && (els.isGrab = true); }, onEnd: function () { els.isGrab = false; }, onMove: function (e) { if (els.isGrab) { e && e.preventDefault(); let wrapRect = els.displayBarWrap.getBoundingClientRect(); let wrapMaxWidth = wrapRect.width * maxPercent; let wrapMinWidth = wrapRect.width * minPercent; let xPosition = !e.touches ? e.pageX : e.touches[0].pageX; let barPosition = xPosition - wrapRect.left; if (barPosition > wrapMaxWidth) barPosition = wrapMaxWidth; else if (barPosition < wrapMinWidth) barPosition = wrapMinWidth; let barPercent = ((barPosition / wrapRect.width) * 100); els.displayBar.style.left = barPercent + '%'; els.controller.style.left = barPercent + '%'; els.displayCoverImage.style.width = barPercent + '%'; grabEventHandler.setArrowSize(barPercent); } }, onMoveEvent: function (e) { let wrapRect = els.displayBarWrap.getBoundingClientRect(); let wrapMaxWidth = wrapRect.width * maxPercent; let wrapMinWidth = wrapRect.width * minPercent; let barRect = els.displayBar.getBoundingClientRect(); let barPosition = barRect.left - wrapRect.left; let moveValue = Math.ceil(wrapMaxWidth / ((currDevice.indexOf('desktop') > -1) ? 8 : 5.5)); let isMove = e.target.classList.contains('features-display__tap-button') || e.target.classList.contains('features-display__button'); if (isMove) { status.isTabMove = true; if (e.type == 'click' && e.target.classList.contains('features-display__tap-button')) { let leftBtn = 'features-display__tap--left'; let rightBtn = 'features-display__tap--right'; if (e.target.parentElement.classList.contains(leftBtn)) { barPosition -= moveValue; } else if (e.target.parentElement.classList.contains(rightBtn)) { barPosition += moveValue; } } if (e.target.classList.contains('features-display__button') && (e.keyCode == 39 || e.keyCode == 37)) { e && e.preventDefault(); if (e.keyCode == 39) barPosition += moveValue; else if (e.keyCode == 37) barPosition -= moveValue; } if (barPosition < wrapMinWidth) barPosition = wrapMinWidth; else if (barPosition > wrapMaxWidth) barPosition = wrapMaxWidth; let barPercent = ((barPosition / wrapRect.width) * 100); TweenMax.to(els.displayBar, 0.3, { left: barPercent + '%', ease: Power2.easeOut }); TweenMax.to(els.controller, 0.3, { left: barPercent + '%', ease: Power2.easeOut }); TweenMax.to(els.displayCoverImage, 0.3, { width: barPercent + '%', ease: Power2.easeOut }); grabEventHandler.setArrowSize(barPercent); } }, moveDisabled: function () { const controllerObserver = new MutationObserver(() => { setTimeout(() => { const leftValue = els.controller.style.left; if (leftValue >= Math.trunc(maxPercent * 100) + "%") { els.displayCoverRightBtn.disabled = true; if(els.displayCoverRightBtn.disabled == true) { utils.onAccessibility(els.displayCoverRightBtn); els.displayCoverLeftBtn.focus(); } } else if (leftValue == minPercent * 100 + "%") { els.displayCoverLeftBtn.disabled = true; if(els.displayCoverLeftBtn.disabled == true) { utils.onAccessibility(els.displayCoverLeftBtn); els.displayCoverRightBtn.focus(); } } else { els.displayCoverRightBtn.removeAttribute("disabled"); els.displayCoverLeftBtn.removeAttribute("disabled"); utils.offAccessibility(els.displayCoverRightBtn); utils.offAccessibility(els.displayCoverLeftBtn); } }, 0); }); controllerObserver.observe(els.controller, { attributes: true, attributeFilter: ['style'] }); }, setArrowSize: function (barPercent) { let imgWidth = els.imgWrap.getBoundingClientRect().width; let tabWidth = els.tabWrap.getBoundingClientRect().width; let imgValue = imgWidth * (barPercent * (1 / 100)); let tabValue = (imgWidth - tabWidth) / 2; let moveTabBtnValue = Math.floor(imgValue - tabValue); if (status.isTabMove) { TweenMax.to(els.displayCoverLeftWrap, 0.3, { width: moveTabBtnValue + 'px', ease: Power2.easeOut }); status.isTabMove = false; } else { els.displayCoverLeftWrap.style.width = moveTabBtnValue + 'px'; } } }; return { init: init } })(); })(); ; (function () { window.flagship.features.faq = (function () { const resize = window.flagship.common.resize, utils = window.flagship.common.utils; let els = {}, prevDevice = null, currDevice = resize.checkResolution(); const init = function () { els.section = document.querySelector('.js-faq'); if (!!els.section) { setElements(); bindEvents(); } }; const setElements = function () { els.faqList = els.section.querySelector('.js-faq-list'); }; const bindEvents = function () { resize.add(eventList.resize); eventList.setAccordion(); }; const eventList = { resize: function (currRes) { currDevice = currRes; if (currDevice != prevDevice) { eventList.responsive(); prevDevice = currDevice; } }, responsive: function () { let isOpenedItems = els.faqList.querySelectorAll('.js-faq-item.is-open'); if (isOpenedItems.length > 0) { for (let i = 0; i < isOpenedItems.length; i++) { let isOpenedItemContent = isOpenedItems[i].querySelector('.js-faq-answer'), clientHeight = isOpenedItemContent.children[0].clientHeight; isOpenedItemContent.style.height = `${clientHeight}px`; } } }, setAccordion: function () { els.accordion = new window.flagship.common.accordion({ wrap: els.faqList, classList: { item: 'js-faq-item', button: 'js-faq-open', contents: 'js-faq-answer', activeClass: 'is-open' }, open: { start: function (target) { let targetInnerCta = target.querySelector('.js-featue-cta'); if (targetInnerCta) targetInnerCta.addEventListener('click', accessibility.moveFocus); } } }); els.accordion.init(); }, }; const accessibility = { moveFocus: function (e) { if (this.getAttribute('href').indexOf('#') > -1) { e.preventDefault(); let sectionId = this.getAttribute('href'), section = document.querySelector(`${sectionId}`), sectionTop = section.getBoundingClientRect().top, movePosition = (sectionTop + window.pageYOffset) - utils.getNavHeight(), clickable = section.querySelectorAll('a, button'), title = section.querySelector('h2') || section.querySelector('h3'); if (!!title) { let _focusOut = function () { title.removeAttribute('tabindex'); title.removeEventListener('focusout', _focusOut); }; title.addEventListener('focusout', _focusOut); title.setAttribute('tabindex', 0); title.focus(); } else { clickable[0].focus(); } window.scrollTo(0, movePosition); } } }; return { init: init } })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.features = window.flagship.features || {}; window.flagship.features.highlightsZone = (function () { const utils = window.flagship.common.utils; const resize = window.flagship.common.resize; const Swiper = window.flagship.Swiper; let els = {}; let prevDevice; let swiperObj = {}; let pointerOffset = {}; let currDevice = resize.checkResolution(); let ctaPlayStatus = true; let scrollProgress = null; let lowNetwork = document.documentElement.classList.contains('low_network'); const init = function () { els.section = document.querySelector('.features-highlights'); if (!!els.section) { setElements(); setProperty(); bindEvents(); } }; const setElements = function () { els.mainContainer = els.section.querySelector('.js-highlights-main-container'); els.mainSwiperSlides = els.mainContainer.querySelectorAll('.swiper-slide'); els.mediaWrap = els.mainContainer.querySelectorAll('.features-highlights__content'); els.indication = els.section.querySelector('.common-carousel__pagination'); els.prevArrow = els.mainContainer.parentElement.querySelector('.swiper-button-prev'); els.nextArrow = els.mainContainer.parentElement.querySelector('.swiper-button-next'); els.featureTagging = els.mainContainer.getAttribute('data-tagging-feature'); els.scrollbar = els.section.querySelector('.js-highlights-scrollbar'); }; const setProperty = function () { els.mainContainer.autoPlay = true; for (let i = 0; i < els.mediaWrap.length; i++) { els.mediaWrap[i].isVideo = els.mediaWrap[i].classList.contains('is-video'); els.mediaWrap[i].isImage = els.mediaWrap[i].classList.contains('is-image'); if (els.mediaWrap[i].isVideo) { els.mediaWrap[i].videoWrap = els.mediaWrap[i].querySelector('.js-video-wrap'); els.mediaWrap[i].video = els.mediaWrap[i].querySelector('.common-video__video'); els.mediaWrap[i].coverImageHighband = els.mediaWrap[i].querySelector('.common-video__cover-image--highband'); els.mediaWrap[i].coverImageLowband = els.mediaWrap[i].querySelector('.common-video__cover-image--lowband'); els.mediaWrap[i].controller = els.mediaWrap[i].querySelector('.js-video-control'); els.mediaWrap[i].controller.video = els.mediaWrap[i].video; els.mediaWrap[i].progressBar = els.mediaWrap[i].querySelector('.common-video__control-progress-bar'); els.mediaWrap[i].startPoint = els.mediaWrap[i].getAttribute('data-start-point'); els.mediaWrap[i].reversePoint = els.mediaWrap[i].getAttribute('data-reverse-point'); els.mediaWrap[i].moStartPoint = els.mediaWrap[i].getAttribute('data-mo-start-point'); els.mediaWrap[i].moReversePoint = els.mediaWrap[i].getAttribute('data-mo-reverse-point'); } else if (els.mediaWrap[i].isImage) { els.mediaWrap[i].img = els.mediaWrap[i].querySelector('.js-image-wrap > img'); } } }; const bindEvents = function () { eventList.load(); eventHandler.click(); eventHandler.scroll(); eventHandler.flickSwiper(); resize.add(eventList.resize); }; const eventHandler = { flickSwiper: function () { els.mainContainer.addEventListener('touchstart', function (e) { pointerOffset.start = null; pointerOffset.current = null; pointerOffset.start = e.touches[0].clientX; els.mainContainer.addEventListener('touchmove', eventList.getPointerMoveSize); }); els.mainContainer.addEventListener('touchend', function () { if (pointerOffset.start == null) return; els.mainContainer.autoPlay = false; els.mainContainer.removeEventListener('touchmove', eventList.getPointerMoveSize); }); els.mainContainer.addEventListener('mousedown', function (e) { pointerOffset.start = null; pointerOffset.current = null; pointerOffset.start = e.offsetX; els.mainContainer.addEventListener('mousemove', eventList.getPointerMoveSize); }); els.mainContainer.addEventListener('mouseup', function () { els.mainContainer.autoPlay = false; els.mainContainer.removeEventListener('mousemove', eventList.getPointerMoveSize); }); els.mainContainer.addEventListener('mouseleave', function () { if (pointerOffset.start == null) return; pointerOffset.start = null; pointerOffset.current = null; els.mainContainer.removeEventListener('mousemove', eventList.getPointerMoveSize); }); els.scrollbar.addEventListener('mousedown', function () { els.mainContainer.autoPlay = false; }); els.scrollbar.addEventListener('mouseleave', function () { els.mainContainer.autoPlay = false; }); }, click: function () { for (let i = 0; i < els.mediaWrap.length; i++) { if (els.mediaWrap[i].isVideo) { els.mediaWrap[i].controller.addEventListener('click', eventList.clickVideoCta); els.mediaWrap[i].controller.addEventListener('click', eventList.stopAutoPlay); } } if (els.prevArrow && els.nextArrow) { els.nextArrow.addEventListener('click', function (e) { eventList.stopAutoPlay(e); eventList.swiperArrow(e); }); els.prevArrow.addEventListener('click', function (e) { eventList.stopAutoPlay(e); eventList.swiperArrow(e); }); } els.scrollbar.addEventListener('click', function (e) { eventList.stopAutoPlay(e); }); }, scroll: function () { window.addEventListener('scroll', eventList.scroll); } } const eventList = { load: function () { swiperEvents.set(); swiperObj.main.init(); eventList.setVideo(); eventList.setScene(); eventList.scroll(); }, resize: function () { currDevice = resize.checkResolution(); if (prevDevice != currDevice) { eventList.responsive(); prevDevice = currDevice; } }, responsive: function () { swiperObj.main.slideTo(0, false); }, setVideo: function () { for (let i = 0; i < els.mediaWrap.length; i++) { if (els.mediaWrap[i].isVideo) { utils.videoHandler({ playType: 'scrollPlay', startPoint: (currDevice.indexOf('mobile') > -1) ? els.mediaWrap[i].moStartPoint : els.mediaWrap[i].startPoint, reversePoint: (currDevice.indexOf('mobile') > -1) ? els.mediaWrap[i].moReversePoint : els.mediaWrap[i].reversePoint, wrap: els.mediaWrap[i].videoWrap, video: els.mediaWrap[i].video, controller: els.mediaWrap[i].controller, playCallback: function () { setTagging.pause(this.controller); this.video.timeupdateEvent = function () { if (this.currentTime > 0) { if (!this.videoHandler.wrap.classList.contains('is-started', 'is-playing')) { this.videoHandler.wrap.classList.add('is-started', 'is-playing'); } eventList.setProgerssDuration(i); this.removeEventListener('timeupdate', this.timeupdateEvent); } } this.video.addEventListener('timeupdate', this.video.timeupdateEvent); this.video.removeEventListener('canplay', eventList.playVideoOnce); }, pauseCallback: function () { setTagging.play(this.controller); }, endCallback: function () { eventList.autoSlideNext(1000); } }); } } }, autoSlideNext: function (time) { if (els.mainContainer.autoPlay) { if (scrollProgress > 40 && scrollProgress < 55) { clearTimeout(swiperObj.main.videoTiming); swiperObj.main.videoTiming = setTimeout(() => { swiperObj.main.slideNext(); }, time); } else { clearTimeout(swiperObj.main.videoTiming); } } }, playVideoOnce: function () { this.play(); }, playVideo: function (video) { for (let i = 0; i < els.mediaWrap.length; i++) { if (els.mediaWrap[i].isVideo && video.readyState >= 1) { video.play(); } else { video.addEventListener('canplay', eventList.playVideoOnce, { once: true }); } } }, clickVideoCta: function (e) { if (e.target == e.currentTarget) { if (e.currentTarget.video.paused) { eventList.playVideo(e.currentTarget.video); ctaPlayStatus = true; } else { e.currentTarget.video.pause(); ctaPlayStatus = false; } } }, stopAutoPlay: function (e) { if (e.target.classList.contains('js-video-control') || e.target.classList.contains('swiper-button-next') || e.target.classList.contains('swiper-button-prev') || e.target.classList.contains('common-carousel__pagination-button') || e.target.classList.contains('js-highlights-scrollbar') ) { els.mainContainer.autoPlay = false; } }, swiperArrowVisibility: function () { let mainSlidesLength = els.mainSwiperSlides.length - 1; let mainSwiper = swiperObj.main; let prevArrow = mainSwiper.previousIndex > mainSwiper.realIndex; let nextArrow = mainSwiper.previousIndex < mainSwiper.realIndex; if (els.prevArrow && els.nextArrow) { if (prevArrow) { if (mainSwiper.realIndex == (mainSlidesLength - 1)) { if (els.nextArrow.style.display == 'none') els.nextArrow.style.display = ''; } else if (mainSwiper.realIndex == 0) { els.prevArrow.style.display = 'none'; } } if (nextArrow) { if (mainSwiper.realIndex == 1) { if (els.prevArrow.style.display == 'none') els.prevArrow.style.display = ''; } else if (mainSwiper.realIndex == mainSlidesLength) { els.nextArrow.style.display = 'none'; } } } }, swiperArrow: function (e) { let mainSwiper = swiperObj.main; let mainSlidesLength = els.mainSwiperSlides.length - 1; let prevArrow = e.target.classList.contains('swiper-button-prev'); let nextArrow = e.target.classList.contains('swiper-button-next'); if (prevArrow) { clearTimeout(swiperObj.main.videoTiming); mainSwiper.slidePrev(); if (mainSwiper.realIndex == 0) { setTimeout(() => { els.nextArrow.blur(); els.nextArrow.focus(); }, 300); } } if (nextArrow) { clearTimeout(swiperObj.main.videoTiming); mainSwiper.slideNext(); if (mainSwiper.realIndex == mainSlidesLength) { setTimeout(() => { els.prevArrow.blur(); els.prevArrow.focus(); }, 300); } } }, scroll: function () { let isIndex = swiperObj.main.realIndex; els.section.scene.trackAnimation(function () { scrollProgress = this.progress; if (els.mediaWrap[isIndex].isVideo) { let isMainVideoHandler = els.mediaWrap[isIndex].video.videoHandler; if (!lowNetwork && ctaPlayStatus) isMainVideoHandler.scrollActive(scrollProgress); } else if (els.mediaWrap[isIndex].isImage) { eventList.slideVideoPlay(); } }) }, slideVideoPlay: function () { let isIndex = swiperObj.main.realIndex; if (els.mediaWrap[isIndex].isVideo) { let isMainVideoHandler = els.mediaWrap[isIndex].video.videoHandler; isMainVideoHandler.eventList.reset.call(isMainVideoHandler); els.mediaWrap[isIndex].videoWrap.classList.remove('is-started'); setTimeout(function () { if (ctaPlayStatus) { eventList.playVideo(els.mediaWrap[isIndex].video); setTimeout(function () { if (els.mainContainer.autoPlay) isMainVideoHandler.controller.blur(); if (els.mainContainer.autoPlay) isMainVideoHandler.controller.focus(); if (isIndex == (swiperObj.main.slides.length)) { els.mainContainer.autoPlay = false; } }, 900); } }, 50); } else if (els.mediaWrap[isIndex].isImage && ctaPlayStatus) { eventList.autoSlideNext(3000); } }, setProgerssDuration: function (index) { let isDuration = els.mediaWrap[index].video.duration; if (!!!els.mediaWrap[index].durationSet) { els.mediaWrap[index].progressBar.style.animationDuration = `${isDuration}s`; els.mediaWrap[index].durationSet = true; } }, setMedia: function (index) { let videoLength = els.mainSwiperSlides.length - 1; let isIndex = index + 1; let loadIndex = isIndex < videoLength ? isIndex : videoLength; let mainVideoloadComplateLength = els.mainContainer.querySelectorAll('.is-video-load-complete').length - 1; for (let i = 0; i <= loadIndex; i++) { if (els.mediaWrap[i].isVideo) { if (mainVideoloadComplateLength != videoLength && !els.mediaWrap[i].video.classList.contains('is-video-load-complete')) { if (!els.mediaWrap[i].video.classList.contains('is-mp4video-load-complete')) { if (!!els.mediaWrap[i].video) videoLoader.setResponsiveMedia([els.mediaWrap[i].video]); if (!lowNetwork) { if (!!els.mediaWrap[i].coverImageHighband) imageLoader.setResponsiveMedia([els.mediaWrap[i].coverImageHighband]); } else { if (!!els.mediaWrap[i].coverImageLowband) imageLoader.setResponsiveMedia([els.mediaWrap[i].coverImageLowband]); } } } } } }, pauseVideo: function (swiper) { for (let i = 0; i < swiper.slides.length; i++) { if (els.mediaWrap[i].isVideo) { let slideVideo = swiper.slides[i].querySelector('video'); if (!slideVideo.paused) { slideVideo.pause(); } } } }, getCarouselSizeInfo: function (swiper) { let slideLength = swiper.slides.length; let slideWidth = swiper.slides[0].clientWidth; let slideMargin = parseInt(window.getComputedStyle(swiper.slides[0]).margin.split(' ')[1]); let slideSize = slideWidth + slideMargin; let maxMoveSize = ((slideSize * slideLength) - slideMargin) - swiper.wrapperEl.clientWidth; let viewWidth = swiper.wrapperEl.clientWidth; let viewLength = parseInt((viewWidth + slideMargin) / slideSize); let lastBeforeSize = slideLength == 2 ? 0 : Math.abs((maxMoveSize - slideSize)) + Math.abs((viewWidth - slideWidth)); let isMoveSize = Math.abs(parseInt(window.getComputedStyle(swiper.wrapperEl).transform.split(',')[4])); return { slideWidth: slideWidth, slideMargin: slideMargin, slideSize: slideSize, maxMoveSize: maxMoveSize, viewWidth: viewWidth, viewLength: viewLength, lastBeforeSize: lastBeforeSize, isMoveSize: isMoveSize } }, setScene: function () { els.section.scene = SCROLLER({ trackElement: els.section, useFixed: false }); }, getPointerMoveSize: function (e) { if (!!e.touches) { pointerOffset.current = e.touches[0].clientX; } else { pointerOffset.current = e.offsetX; } } } const swiperEvents = { set: function () { if (swiperObj.main == null) { swiperObj.main = new Swiper(els.mainContainer, { init: false, speed: 600, slidesPerView: 'auto', scrollbar: { el: els.scrollbar, }, pagination: { el: els.indication, clickable: true, renderBullet: function (index, className) { const slide = this.slides[index]; const slideTitle = slide.getAttribute('data-slide-title') || ''; const tagging = { omniType: "microsite_gallery", actionType: "gallery", contentType: "feature gallery", taggingValue: els.featureTagging + ":sldr-dots:" + `${index + 1}` } this.slideTitle = slideTitle; return ` `; } }, a11y: false, }); swiperObj.main.on('init', swiperEvents.init); swiperObj.main.on('slideChange', swiperEvents.slideChange); swiperObj.main.on('transitionEnd', swiperEvents.transitionEnd); swiperObj.main.on('paginationUpdate', swiperEvents.paginationUpdate); } if (els.prevArrow) { els.prevArrow.style.display = 'none'; } }, init: function () { if (els.prevArrow && els.nextArrow) { let isNextArrow = this.el.parentElement.querySelector('.swiper-button-next'); let isPrevArrow = this.el.parentElement.querySelector('.swiper-button-prev'); isNextArrow.removeAttribute('aria-label'); isNextArrow.removeAttribute('role'); isPrevArrow.removeAttribute('aria-label'); isPrevArrow.removeAttribute('role'); } accessibility.slide(this); }, paginationUpdate: function () { const bullets = this.pagination.bullets; const slides = this.slides; for (let i = 0; i < bullets.length; i++) { const slideTitle = i < slides.length ? this.slides[i].getAttribute('data-slide-title') : ""; const bullet = bullets[i]; const button = bullet.querySelector('button'); const isActive = bullet.classList.contains('swiper-pagination-bullet-active'); const selected = isActive ? ` ${LOCAL_VARI.selected}` : ''; button.setAttribute('aria-label', `${LOCAL_VARI.slide}${i + 1}${selected}: ${slideTitle}`); } }, slideChange: function () { accessibility.slide(this); eventList.pauseVideo(this); if (this.realIndex > 0) eventList.setMedia(this.realIndex); if (!lowNetwork) eventList.slideVideoPlay(); eventList.swiperArrowVisibility(); }, transitionEnd: function () { setTimeout(() => { let carouselInfo = eventList.getCarouselSizeInfo(this); let lastIndex = this.slides.length - 1; let lastSlide = this.slides[lastIndex]; let lastBeforeSlide = this.slides[lastIndex - 1]; let secondSlide = this.slides[lastIndex - 2]; let lastSlideIsVideo = lastSlide.querySelector('.features-highlights__content.is-video'); let lastBeforeSlideIsVideo = lastBeforeSlide.querySelector('.features-highlights__content.is-video'); let isIndex = swiperObj.main.previousIndex; let isMoveSize = currDevice != 'mobile' ? carouselInfo.isMoveSize : carouselInfo.isMoveSize + Math.abs(carouselInfo.slideMargin); if (els.mediaWrap[isIndex].isVideo) els.mediaWrap[isIndex].video.pause(); if (carouselInfo.lastBeforeSize + (carouselInfo.slideWidth / 2) < isMoveSize && carouselInfo.maxMoveSize - (carouselInfo.slideWidth / 2) <= isMoveSize) { if (currDevice.indexOf('mobile') > -1) { eventList.pauseVideo(this); if (!lowNetwork && ctaPlayStatus && lastSlideIsVideo) { lastSlide.querySelector('video').play(); } lastSlide.classList.add('swiper-slide-active'); lastBeforeSlide.classList.add('swiper-slide-prev'); lastSlide.classList.remove('swiper-slide-next'); lastBeforeSlide.classList.remove('swiper-slide-active'); secondSlide.classList.remove('swiper-slide-prev'); if (els.nextArrow) { if (els.nextArrow.style.display != 'none') { els.nextArrow.style.display = 'none'; setTimeout(() => { els.prevArrow.blur(); els.prevArrow.focus(); }, 300); } } utils.offAccessibility(this.slides[lastIndex]); utils.onAccessibility(this.slides[lastIndex - 1]); } } else if (carouselInfo.lastBeforeSize <= carouselInfo.isMoveSize) { if (currDevice.indexOf('mobile') > -1) { eventList.pauseVideo(this); if (!lowNetwork && ctaPlayStatus && lastBeforeSlideIsVideo) { lastBeforeSlide.querySelector('video').play(); } lastSlide.classList.add('swiper-slide-next'); lastBeforeSlide.classList.add('swiper-slide-active'); secondSlide.classList.add('swiper-slide-prev'); lastSlide.classList.remove('swiper-slide-active'); lastBeforeSlide.classList.remove('swiper-slide-prev'); if (els.nextArrow) { if (els.nextArrow.style.display == 'none') els.nextArrow.style.display = ''; } utils.onAccessibility(this.slides[lastIndex]); utils.offAccessibility(this.slides[lastIndex - 1]); } } }, 0); }, destroy: function (swiper) { if (swiper != null) { swiper.navigation.destroy(true); swiper.destroy(true); swiper = null; } } }; const setTagging = { play: function (targetController) { if (targetController.hasAttribute('data-omni')) { let dataOmni = targetController.getAttribute('data-omni').toLowerCase(); targetController.setAttribute('data-omni', dataOmni.replace('pause', 'play')); } if (targetController.hasAttribute('ga-la')) { let gaLa = targetController.getAttribute('ga-la').toLowerCase(); targetController.setAttribute('ga-la', gaLa.replace('pause', 'play')); } }, pause: function (targetController) { if (targetController.hasAttribute('data-omni')) { let dataOmni = targetController.getAttribute('data-omni').toLowerCase(); targetController.setAttribute('data-omni', dataOmni.replace('play', 'pause')); } if (targetController.hasAttribute('ga-la')) { let gaLa = targetController.getAttribute('ga-la').toLowerCase(); targetController.setAttribute('ga-la', gaLa.replace('play', 'pause')); } } }; const accessibility = { slide: function (swiper) { for (let i = 0; i < swiper.slides.length; i++) { if (i != swiper.activeIndex) { utils.onAccessibility(swiper.slides[i]); } else { utils.offAccessibility(swiper.slides[i]); } } } }; return { init: init, }; })(); })(); ; (function () { window.flagship.features.kv = (function () { let els = {} const init = function () { els.section = document.querySelector('.js-kv'); els.hasOffer = document.querySelector('.feature-kv__anchor'); if (!!els.section && !!els.hasOffer) { setElements(); bindEvents(); } }; const setElements = function () { els.kvDropdown = els.section.querySelector('.js-kv-dropdown'); els.kvDropdownItem = els.section.querySelector('.features-kv__description'); els.kvDropdownSpan = els.section.querySelector('.js-button-text'); els.kvDropdownDataOmni = els.kvDropdown.getAttribute('data-omni'); els.kvDropdownGaLa = els.kvDropdown.getAttribute('ga-la'); }; const bindEvents = function () { eventHandler.click(); eventList.defaultText(); }; const eventHandler = { click: function () { els.kvDropdown.addEventListener('click', eventList.click); } } const eventList = { defaultText: function () { const openText = els.kvDropdownSpan.getAttribute('data-open-text'); els.kvDropdownSpan.textContent = openText; }, click: function () { const openText = els.kvDropdownSpan.getAttribute('data-open-text'); const closeText = els.kvDropdownSpan.getAttribute('data-close-text'); if (els.kvDropdownItem.classList.contains('is-open')) { els.kvDropdownItem.classList.remove('is-open'); els.kvDropdown.classList.remove('is-active'); els.kvDropdown.setAttribute('ga-la', els.kvDropdownDataOmni.replace('close', 'open')); els.kvDropdown.setAttribute('data-omni', els.kvDropdownGaLa.replace('close', 'open')); els.kvDropdownSpan.textContent = openText; } else { els.kvDropdownItem.classList.add('is-open'); els.kvDropdown.classList.add('is-active'); els.kvDropdown.setAttribute('ga-la', els.kvDropdownDataOmni.replace('open', 'close')); els.kvDropdown.setAttribute('data-omni', els.kvDropdownGaLa.replace('open', 'close')); els.kvDropdownSpan.textContent = closeText; } } }; return { init: init } })(); })(); (function () { window.flagship.features.proVisual = (function () { const utils = window.flagship.common.utils; resize = flagship.common.resize; let els = {}; let currDevice = resize.checkResolution(); const init = function () { setElements(); bindEvents(); }; const setElements = function () { els.cameraSpec = document.querySelectorAll('.features-provisual-engine__spec-item'); }; const bindEvents = function () { resize.add(eventList.resize); eventList.setTextScene(); eventList.textMotion(); eventHandler.scroll(); }; const eventHandler = { scroll: function () { window.addEventListener('scroll', eventList.textMotion); } }; const eventList = { resize: function (currRes) { currDevice = currRes; }, textMotion: function () { for (let i = 0; i < els.cameraSpec.length; i++) { els.cameraSpec[i].sceneObj.trackAnimation(function () { if (10 <= this.progress && this.progress <= 100) { els.cameraSpec[i].classList.add('is-active'); } if (this.progress < 0) { els.cameraSpec[i].classList.remove('is-active'); } }); } }, setTextScene: function () { for (let i = 0; i < els.cameraSpec.length; i++) { els.cameraSpec[i].sceneObj = SCROLLER({ trackElement: els.cameraSpec[i], useFixed: false, useStrictMode: false }); } } }; return { init: init } })(); })(); (function () { window.flagship.features.howtoPopup = (function () { const utils = window.flagship.common.utils; const Swiper = window.flagship.Swiper; resize = window.flagship.common.resize; let els = {}; let currDevice = resize.checkResolution(); prevDevice = null, currOpener = null; const init = function () { els.layerPopup = document.querySelector('.js-howto-popup'); if (!!els.layerPopup) { setElements(); setAttribute(); bindEvents(); eventList.setPopup(); } }; const setElements = function () { els.contents = document.querySelector('#contents'); els.openCtas = document.querySelectorAll('.js-howto-popup-opener'); els.openCta = document.querySelectorAll("[data-howto-slide]:not(.js-howto-popup [data-howto-slide])"); // popup content els.closeCta = document.querySelectorAll('.js-howto-popup-close-cta'); els.ytIframe = els.layerPopup.querySelector('iframe'); els.ytDesc = els.layerPopup.querySelector('.js-howto-popup-youtube-desc'); els.dimmed = els.layerPopup.querySelector('.js-howto-popup-dimmed'); // swiper els.swiperContainer = els.layerPopup.querySelector('.swiper-container'); els.featureTagging = els.swiperContainer.getAttribute('data-tagging-feature'); els.buttonWrap = els.swiperContainer.querySelectorAll('.swiper-slide'); els.thumbList = els.swiperContainer.querySelectorAll("[data-howto-slide]"); els.arrowWrap = els.swiperContainer.querySelector('.js-howto-popup-arrow-wrap'); els.indication = els.swiperContainer.querySelector('.common-carousel__pagination'); els.scrollbar = els.swiperContainer.querySelector('.js-howto-popup-scrollbar'); }; const setAttribute = function () { els.openCta.forEach((cta)=> { const howtoAtrr = cta.getAttribute("data-howto-slide"); els.thumbList.forEach((thumb)=>{ if(thumb.getAttribute("data-howto-slide") === howtoAtrr) { thumb.openerCta = cta; thumb.button = thumb.querySelector('button'); thumb.button.openerCta = thumb.openerCta; cta.thumb = thumb; } }); }); }; const bindEvents = function () { eventHandler.buttonsClick(); resize.add(eventList.resize); }; const eventHandler = { buttonsClick: function () { for (let i = 0; i < els.buttonWrap.length; i++) { els.buttonWrap[i].button.addEventListener('click', function () { eventList.setYoutube(els.buttonWrap[i]); }); } } }; const eventList = { setPopup: function () { for (let i = 0; i < els.thumbList.length; i++) { utils.layerPopup({ layerPopup: els.layerPopup, layerPopupClass: '.js-howto-popup', openerEvent: { element: els.openCtas[i], }, closeCtas: els.closeCta, dimmed: els.dimmed, moveTarget: document.documentElement, contents: els.contents, show: { start: function (target) { let allVideos = document.querySelectorAll('video'); for (let i = 0; i < allVideos.length; i++) { if (!allVideos[i].paused) allVideos[i].pause(); } els.layerPopup.removeAttribute('aria-hidden'); els.layerPopup.removeAttribute('tabindex'); els.layerPopup.classList.add('is-init'); currOpener = target.openerCta; eventList.itemImageLoader(); swiperEventList.activeCheck(); }, end: function (target) { els.layerPopup.classList.add('is-open'); eventList.setYoutube(target); } }, hide: { start: function () { els.layerPopup.classList.remove('is-open'); }, end: function (target) { if (utils.detector.isIosDevice) target.openerCta.style.display = ''; setTimeout(function () { els.layerPopup.classList.remove('is-init'); eventList.removeYoutube(); accessibility.removeTitle(); swiperEventList.destroy(); els.layerPopup.children[0].scrollTop = 0; }, 300); } } }); } }, setYoutube: function (target) { let opener = target.openerCta, ytSrc = 'htt' + 'ps://www.youtube.com/embed/' + opener.getAttribute('data-youtube-id') + '?wmode=opaque&rel=0&enablejsapi=1&version=3&autoplay=1', ytTitle = opener.getAttribute('data-youtube-title'), ytBlind = opener.querySelector('.blind').innerHTML; els.ytIframe.setAttribute('src', ytSrc); els.ytIframe.setAttribute('title', ytTitle); els.ytDesc.innerHTML = ytBlind; let oldActive = els.swiperContainer.querySelector('.swiper-slide.is-active'); if (!!oldActive) { oldActive.classList.remove('is-active'); oldActive.button.removeAttribute('title'); } opener.thumb.classList.add('is-active'); accessibility.setTitle(opener.thumb); }, removeYoutube: function () { els.ytIframe.removeAttribute('src'); els.ytDesc.innerHTML = ''; }, resize: function (currRes) { currDevice = currRes; if (prevDevice != currDevice) { if (els.layerPopup.classList.contains('is-open')) { swiperEventList.activeCheck(); } prevDevice = currDevice; } }, itemImageLoader: function () { for (let i = 0; i < els.buttonWrap.length; i++) { if (!els.buttonWrap[i].querySelector('img').classList.contains('is-img-load-complete')) { imageLoader.setResponsiveMedia([els.buttonWrap[i].querySelector('img')]); } } } }; const swiperEventList = { set: function () { if (els.swiperContainer.swiper == null) { els.swiperContainer.swiper = new Swiper(els.swiperContainer, { init: false, slidesPerView: 'auto', scrollbar: { el: els.scrollbar, draggable: true }, pagination: { el: els.indication, clickable: true, renderBullet: function (index, className) { const slide = this.slides[index]; const slideTitle = slide.getAttribute('data-slide-title') || ''; const tagging = { omniType: "microsite_gallery", actionType: "gallery", contentType: "feature gallery", taggingValue: els.featureTagging + ":sldr-dots:" + `${index + 1}` } this.slideTitle = slideTitle; return ` `; } }, a11y: false, }); els.swiperContainer.swiper.on('init', swiperEventList.init); els.swiperContainer.swiper.on('slideChange', swiperEventList.slideChange); els.swiperContainer.swiper.on('paginationUpdate', swiperEventList.paginationUpdate); els.swiperContainer.swiper.init(); } }, destroy: function () { if (els.swiperContainer.swiper != null) { els.swiperContainer.swiper.scrollbar.dragEl.style = ''; els.swiperContainer.swiper.scrollbar.destroy(true); els.swiperContainer.swiper.navigation.destroy(true); els.swiperContainer.swiper.destroy(true); els.swiperContainer.swiper = null; } }, init: function () { let self = this, notification = self.el.querySelector('.swiper-notification'); if (!!notification) self.el.removeChild(notification); setTimeout(function () { accessibility.slide(); }, 500); }, paginationUpdate: function () { const bullets = this.pagination.bullets; const slides = this.slides; let arrSlidesTitle = []; for (let i = 0; i < slides.length; i++) { arrSlidesTitle.push(slides[i].dataset.slideTitle) } for (let i = 0; i < bullets.length; i++) { const bullet = bullets[i]; const button = bullet.querySelector('button'); const isActive = bullet.classList.contains('swiper-pagination-bullet-active'); const selected = isActive ? ` ${LOCAL_VARI.selected}` : ''; if (currDevice.indexOf('mobile') > -1) { button.setAttribute('aria-label', `${LOCAL_VARI.slide}${i + 1}${selected}: ${arrSlidesTitle[i]}, ${arrSlidesTitle[i+1]}`); } else { button.setAttribute('aria-label', `${LOCAL_VARI.slide}${i + 1}${selected}: ${arrSlidesTitle[i]}, ${arrSlidesTitle[i+1]}, ${arrSlidesTitle[i+2]}, ${arrSlidesTitle[i+3]}`); } } }, slideChange: function () { accessibility.slide(); }, activeCheck: function () { let isSlide = ((currDevice.indexOf('mobile') > -1) && (els.buttonWrap.length >= 3)) || ((currDevice.indexOf('desktop') > -1 || currDevice == 'tablet') && (els.buttonWrap.length >= 5)); if (isSlide) { els.scrollbar.style.display = 'block'; swiperEventList.set(); let buttonIndex; for(let i=0; i < els.buttonWrap.length; i++) { if (els.buttonWrap[i] === currOpener.thumb) { buttonIndex = i; } } const changeSlide = buttonIndex - 1; if (currOpener != null) { els.swiperContainer.swiper.slideTo(changeSlide, 0); } } else { els.scrollbar.style.display = 'none'; swiperEventList.destroy(); } } }; const accessibility = { setTitle: function (target) { if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) { target.button.setAttribute('title', LOCAL_VARI.selected); } else { target.button.setAttribute('title', 'Selected'); } }, removeTitle: function () { for(let i = 0; i < els.buttonWrap.length; i++) { if (typeof LOCAL_VARI != 'undefined' && !!LOCAL_VARI) { els.buttonWrap[i].button.removeAttribute('title', LOCAL_VARI.selected); } else { els.buttonWrap[i].button.removeAttribute('title', 'Selected') } }; }, slide: function () { let slidePerviewValue = currDevice.indexOf('mobile') > -1 ? 2 : 4; let getPerviewIndex = function () { return slidePerviewValue - 1; } for (let i = 0; i < els.swiperContainer.swiper.slides.length; i++) { if (i >= els.swiperContainer.swiper.activeIndex && i <= (els.swiperContainer.swiper.activeIndex + getPerviewIndex())) { utils.offAccessibility(els.swiperContainer.swiper.slides[i]); } else { utils.onAccessibility(els.swiperContainer.swiper.slides[i]); } } } }; return { init: init, } })(); })(); flagship.features.initialize = (function () { window.flagship.common.resize.bindEvent(); const init = function () { flagship.features.highlightsZone.init(); flagship.features.carousel.init(); flagship.features.clickToVideo.init(); flagship.features.howtoPopup.init(); flagship.features.headline.init(); flagship.features.scrollVideo.init(); flagship.features.aiOverview.init(); flagship.features.faq.init(); flagship.features.colorsViewer.init(); flagship.features.colors.init(); flagship.features.arBanner.init(); flagship.features.accordion.init(); flagship.features.designSpec.init(); flagship.features.display.init(); flagship.features.proVisual.init(); flagship.features.kv.init(); flagship.features.compares.init(); }; return { init: init } })(); flagship.features.initialize.init(); });