Galaxy Watch6 | Features & Display | Samsung Schweiz (2024)

Galaxy Watch6

JETZT KAUFEN

JETZT VORREGISTRIEREN

JETZT KAUFEN

Galaxy Watch6 | Features & Display | Samsung Schweiz (1)

Die Smartwatch, die dich in- und auswendig kennt, ist zurück. Die Galaxy Watch6 behält deine Gesundheit noch besser und personalisierter im Blick und hat auch ihre Schlaffunktionen verbessert. Starte ausgeruht und fit in den Tag dank Schlafanalyse und-coaching.

Galaxy Watch6Starte deine tägliche Wellness-Routine

Schlaftracking
Display
Gesundheit
FITNESS
CUSTOMIZE

Galaxy Watch6 | Features & Display | Samsung Schweiz (2)

Galaxy Watch6 | Features & Display | Samsung Schweiz (3)

Galaxy Watch6 can be seen displaying Sleep score screen. The progress bar is advancing as the sleep score '90' appears with the text 'Excellent' below. The sleep animal, a lion, appears at the bottom of the screen.

Entwickle gesunde Schlafgewohnheiten Zur Schlafanalyse

Galaxy Watch6 | Features & Display | Samsung Schweiz (5)

Galaxy Watch6 | Features & Display | Samsung Schweiz (6)

Galaxy Watch6 can be seen rotating and then facing the front. Black margin of the display is being reduced to emphasize the larger display.

Viel Fläche zum Anschauen, Tippen, Swipen und Scrollen Zum Display

Galaxy Watch6 | Features & Display | Samsung Schweiz (8)

Galaxy Watch6 | Features & Display | Samsung Schweiz (9)

GUI of ECG being measured can be seen, with the measure time changing from 15 to 10 seconds and the bpm changing between 72 and 77. Under the numbers is a moving graph illustrating the heartbeat.

Erhalte detaillierte Einblicke in dein Wohlbefinden Zu Health

Galaxy Watch6 | Features & Display | Samsung Schweiz (11)

Setze dir Fitness-Ziele und bekomme Tipps, um sie zu erreichen Zum Training

Galaxy Watch6 | Features & Display | Samsung Schweiz (13)

Drücke deinen persönlichen Stil aus Zu Personalisieren

Display Schlafanalyse Health Exercise Personalisieren

Close Popup

20 % grösser
30% schlanker

Auf dem bis zu 20 % grösseren Display kannst du noch mehr auf einmal erfassen. Der bis zu 30 % schlankere schwarze Bildschirmrand schafft Platz für den bisher grössten Bildschirm der Galaxy Watch Serie und mehr Raum für die Selbstentfaltung mit anpassbaren Zifferblättern.1, 2

Grösseres Display.

Schmalerer Rahmen.

Galaxy Watch6 | Features & Display | Samsung Schweiz (15)

Galaxy Watch6 | Features & Display | Samsung Schweiz (16)

Schlanker & kompakter
im Design

Two Galaxy Watch6 can be seen. The first one is positioned to show its thinness. The second one is zoomed in to emphasize the slim design of Galaxy Watch6.

Galaxy Watch6 | Features & Display | Samsung Schweiz (17)

Galaxy Watch6 | Features & Display | Samsung Schweiz (18)

Stil und Komfort vereint in einer eleganteren Form: Wir lassen die Galaxy Watch6 im neuen Glanz erstrahlen und haben ihr daher eine schlankere Form verliehen, damit sie leichter zu tragen ist. Die nahtlose Passform sowie das zeitlose, runde Design des Leichtgewichts tragen zum Tragekomfort bei.3

Armbandwechsel mit nur einem Klick

Vom Workout- zum Party-Style im Handumdrehen: Mit nur einem Knopfdruck lässt sich dein Armband vom Gehäuse lösen, damit du es austauschen kannst. Der Schnellwechsel-Federsteg ermöglicht einen einfachen Armbandwechsel, das nach dem Anlegen mit einem zufriedenstellenden Klick einrastet.4

Galaxy Watch6 | Features & Display | Samsung Schweiz (19)

Galaxy Watch6 | Features & Display | Samsung Schweiz (20)

Galaxy Watch6 watch band can be seen being attached to illustrate the easiness of the one-click release button.

Entdecke das
Display aus
Saphirglas

Allzeit bereit, ob bei Regen oder Sonnenschein: Das hochwertige Saphirglas macht das Display widerstandsfähig und robust. Zusätzlich sorgen die Schutzklassen IP68 und 5ATM dafür, dass deine Uhr fast all deine Abenteuer mitmachen kann.5, 6

Galaxy Watch6 | Features & Display | Samsung Schweiz (21)

Staubresistent dank IP68

Galaxy Watch6 | Features & Display | Samsung Schweiz (22)

Wasserscheu? Nicht mit uns!

Galaxy Watch6 | Features & Display | Samsung Schweiz (23)

Galaxy Watch6 | Features & Display | Samsung Schweiz (24)

Galaxy Watch6 can be seen facing upward with the display zoomed in, with waterdrops next to the Watch to indicate that it is waterproof. A gleam of light goes over the display to emphasize the durability of the Sapphire Crystal glass.

18 % schnellere Prozessorleistung

Galaxy Watch6 | Features & Display | Samsung Schweiz (25)

Hält bis zu40 Stunden durch

Galaxy Watch6 | Features & Display | Samsung Schweiz (26)

In Rekordzeit

aufgeladen

Mit einem vollen Akku hält die Smartwatch bis zu 40 Stunden durch. Lade die Uhr in nur 30 Minuten auf 45 % auf, und schon kannst du sorgenfrei die Natur erkunden oder deine wohlverdiente Pause im Bett geniessen.7, 8, 9

Bis zu 45 %

in 30 min

Galaxy Watch6 | Features & Display | Samsung Schweiz (27)

Galaxy Watch6 | Features & Display | Samsung Schweiz (28)

Front view of Galaxy Watch6 can be seen with the charging screen GUI on display. The number on the screen goes up from '50%' to '100%', implying the battery is being fully charged.

Unsere bisher leistungsfähigste Smartwatch

Dank der verbesserten Prozessorleistung ist die Galaxy Watch6 um 18 % schneller als das Vorgängermodell und kann somit Apps schneller laden. Egal, ob du in den Tag „hineinjoggst“ oder dich deiner Schlafroutine hingibst – sie hält mit all deinen Aktivitäten Schritt.3

Galaxy Watch6 | Features & Display | Samsung Schweiz (29)

Galaxy Watch6 | Features & Display | Samsung Schweiz (30)

Galaxy Watch6 processor is being assembled with the bezel and display.

Ruhigere Nächte,
produktivere Tage

Galaxy Watch6 | Features & Display | Samsung Schweiz (31)

Wenn du dich nach deiner Nachtruhe erholt fühlst, kannst du das Meiste aus deinem Tag herausholen. Trage deine Galaxy Watch6, während du schläfst, und behalte deine nächtlichen Schlafphasen, -werte und -konsistenz im Blick, um deine Schlafgewohnheiten zu verbessern. Jetzt kannst du sogar die Schlafanalyse-Funktion direkt auf deiner Uhr abrufen, sodass du nützliche Tipps direkt auf dein Handgelenk erhältst.10, 11, 12, 13, 14, 15

Information on the time spent in each sleep stage can be seen: Awake 35m, REM 1h 30m, Light 4h 30m, Deep 55m. The information is also displayed as a graph.

Galaxy Watch6 | Features & Display | Samsung Schweiz (32)

Galaxy Watch6 | Features & Display | Samsung Schweiz (33)

Galaxy Watch6 | Features & Display | Samsung Schweiz (34)

Better together

Fabric Band

Leicht und bequem.16

Mehr erfahren

Galaxy Watch6 | Features & Display | Samsung Schweiz (37)

Sei deinem Zyklus einen Schritt voraus

Behalte deinen Zyklus im Blick: Der Fruchtbarkeitsalgorithmus von Galaxy Watch6 | Features & Display | Samsung Schweiz (38) Der adaptive Fruchtbarkeitsalgorithmus von Natural Cycles˚ überwacht Veränderungen deiner Hauttemperatur während des nächtlichen Schlafs, um deine nächste Periode und den Eisprung vorauszusagen und dir bei der Planung zu helfen. So leicht hast du deinen Zyklus im Griff – dank der Galaxy Watch6.17

Mit deinem Herzen im Einklang

Sei unbesorgt: Deine Uhr gibt gut Acht auf dein Herz, sodass du in Ruhe deinem Alltag nachgehen kannst. Der integrierte PPG-Sensor misst regelmäßig die Herzfrequenz und den Herzrhythmus, während du deine Galaxy Watch6 trägst, und warnt dich, wenn deine Herzfrequenz zu hoch oder zu niedrig ist.17, 18, 19

Galaxy Watch6 | Features & Display | Samsung Schweiz (39)

Galaxy Watch6 | Features & Display | Samsung Schweiz (40)

GUI of ECG being measured can be seen, with the measure time changing from 26 to 31 seconds and the bpm changing between 72 and 77. Under the numbers is a moving graph illustrating the heartbeat.

Behalte deinen Blutdruck im Auge

Zu einem gesunden Lebensstil gehört u.a. eine tägliche Blutdruckmessung. Mit der Galaxy Watch6 geht dies direkt vom Handgelenk aus – und das ohne zusätzliches Messgerät!20, 21, 22, 23

Galaxy Watch6 | Features & Display | Samsung Schweiz (41)

Galaxy Watch6 | Features & Display | Samsung Schweiz (42)

Analysiere deine
Körperzusammensetzung

Mit dem BIA-Sensor (Bioelektrische Impedanzanalyse) auf deiner Galaxy Watch6 kannst du messen wie dein Körper zusammengesetzt ist. Am Anteil von Körperfett, Muskeln, Knochen und Wasser kannst du im Laufe der Zeit Fortschritte erkennen und deinen Trainingserfolg messen.24, 25, 26

Galaxy Watch6 | Features & Display | Samsung Schweiz (43)

Notfall-Funktionen für deine Sicherheit

Für den Notfall gewappnet: Solltest du stürzen, erkennt die Sturzerkennung den Sturz und kontaktiert bei entsprechender Konfiguration den von dir hinterlegten Notfallkontakt. Sei also unbesorgt: Mit unserer Smartwatch bist du in guten Händen.27, 28, 29, 30

Galaxy Watch6 | Features & Display | Samsung Schweiz (44)

Galaxy Watch6 | Features & Display | Samsung Schweiz (45)

Galaxy Watch6 | Features & Display | Samsung Schweiz (46)

Daily activity screen can be seen, with the progress bars advancing.

Fitness-Tracking –
Halt dich fit!

Zeichne jede deiner körperlichen Aktivitäten auf und halte all deine Fortschritte mit der Galaxy Watch6 fest. Sie unterstützt über 90 verschiedene Trainingsprogramme, einschliesslich Indoor-Schwimmen und Yoga, die du ganz bequem erfassen kannst. Du kannst aber auch dein eigenes, individuelles Workout erstellen.Vergessen, auf „Start“ zu drücken? Die Smartwatch erkennt und speichert automatisch ausgewählte Workouts wie Joggen, Gehen und jetzt auch Radfahren, damit du keine wertvollen Daten verlierst.26, 31, 32

Galaxy Watch6 | Features & Display | Samsung Schweiz (47)

Galaxy Watch6 | Features & Display | Samsung Schweiz (48)

Different workout icons can be seen. In the middle is the cycling icon with the person sitting upright. The person begins cycling and slowly bends forward as other workout icons appear from the right.

Personalisierte
HF-Zonen für
optimales Training

Galaxy Watch6 | Features & Display | Samsung Schweiz (49)

Galaxy Watch6 | Features & Display | Samsung Schweiz (50)

Lege deine eigene Herzfrequenz-Zone fest – oder fange einfach an zu joggen, und die Galaxy Watch6 wird deine Herzfrequenz mit Blick auf deine Fitness messen und deinen optimalen Trainingspuls berechnen. Einmal eingestellt, kannst du dich benachrichtigen lassen, wenn du deinen Ziel-Pulsbereich erreichst, und sicherstellen, dass du dich immer noch in diesem Bereich befindest, während du weiterhin in deinem eigenen Tempo trainierst.33

Bleibe fit zusammen mit Freunden und Familie

Nimm Herausforderungen an und mache deinen Freunden und Familie Konkurrenz. Lade deine Trainingspartner*innen ein, mit dir zusammen Sport zu machen, und treibt euch gegenseitig zu Höchstleistungen. Feiert gemeinsame Fortschritte, Erfolge und persönliche Bestleistungen.

Galaxy Watch6 | Features & Display | Samsung Schweiz (51)

Löse die
Galaxy Z Flip5 Kamera über
deine Uhr aus

Kopple deine Smartwatch mit dem neuen Galaxy Z Flip5, um selbst stets im Bild zu bleiben – egal, ob aus der Nähe oder in der Ferne. Mit dem Flex-Modus und dem Camera Controller des Galaxy Z Flip5 kannst du ganz einfach zwischen Foto und Video wechseln oder hinein- und herauszoomen – alles bequem vom Handgelenk aus. Tippe dann auf den Auslöser deiner Uhr, um ein Foto zu schiessen.34, 35

Galaxy Watch6 | Features & Display | Samsung Schweiz (52)

Galaxy Watch6 | Features & Display | Samsung Schweiz (53)

On the right is Galaxy Z Flip5 on Flex mode. On the left is Galaxy Watch6 displaying the same screen as Galaxy Z Flip5, illustrating the Camera Controller feature.

Mehr als nur eine Smartwatch

Viel mehr als nur eine Uhr: Mit der Galaxy Watch6 kannst du auch ohne Smartphone SMS schreiben, telefonieren, Musik streamen und vieles mehr. Bleibe produktiv und mache das Beste aus deinem Tag.36, 37

Anrufen SMS Musik Streamen

Anrufen Galaxy Watch6 | Features & Display | Samsung Schweiz (54)

SMS Galaxy Watch6 | Features & Display | Samsung Schweiz (55)

Musik Streamen Galaxy Watch6 | Features & Display | Samsung Schweiz (56)

Mit International Roaming bleibt die Welt in Reichweite

So bleibst du immer auf dem richtigen Weg: Mit International Roaming auf der Galaxy Watch6 wird dir mit Hilfe einer Karte immer die richtige Route angezeigt – und das alles von deiner Smartwatch aus. Wenn du in Schwierigkeiten gerätst, brauchst du dir keine Sorgen zu machen: Du kannst direkt von deinem Handgelenk aus anrufen oder eine SMS senden, um Hilfe zu holen.38, 39

Galaxy Watch6 | Features & Display | Samsung Schweiz (57)

Samsung Wallet ist immer zur Hand

Bargeld oder Karten sind Schnee von gestern: Für Zahlungen jeglicher Art gibt es Samsung Wallet. Jetzt kannst du unterwegs bezahlen, ohne dein Smartphone bedienen zu müssen, denn alles, was du brauchst, ist nur eine Watch-Screen-Berührung entfernt.40

Galaxy Watch6 | Features & Display | Samsung Schweiz (58)

Galaxy Watch6 | Features & Display | Samsung Schweiz (59)

Man sieht eine Galaxy Watch6, die leicht nach links gedreht ist. Neben dem Bildschirm erkennt man eine Kreditkarte sowie ein NFC-Symbol, die verdeutlichen, dass die Samsung Wallet-Funktion jetzt auf der Smartwatch genutzt werden kann. Im unteren Abschnitt des Bildschirms liest sich folgender Text: „Zum Bezahlen in die Nähe eines NFC-Lesegeräts halten“.

Freu dich auf mehr Apps

Geniesse eine Vielzahl beliebter Apps von Drittanbietern wie Audible, WhatsApp, Spotify und mehr — alles auf deiner Galaxy Watch6 in Verbindung mit deinem Smartphone. 41

Galaxy Watch6 | Features & Display | Samsung Schweiz (60)

GPS bringt dich in die
richtige Richtung

Das integrierte GPS deiner Smartwatch weiss zu jeder Zeit, wo du bist. Selbst, wenn du vom Weg abkommst, findest du immer ganz einfach nach Hause.42, 43

Galaxy Watch6 | Features & Display | Samsung Schweiz (61)

Galaxy Watch6 | Features & Display | Samsung Schweiz (62)

Ganz nach deinem Geschmack

Mache die Galaxy Watch6 zu deiner ganz persönlichen Uhr. Wähle aus einer grossen Auswahl an Armbändern in verschiedenen Stilen und aus verschiedenen Materialien. Du kannst auch das Zifferblatt mit deinen Lieblingsfarben, -mustern, -designs oder sogar -fotos von deinem Haustier gestalten. Deiner Fantasie sind keine Grenzen gesetzt.4

Galaxy Watch6 | Features & Display | Samsung Schweiz (63)

Einfach Switchen, Upgraden
& Eintauschen

Eintauschen & Profitieren

Sichere dir einen Bonus von CHF 50 beim Eintausch eines alten Geräts gegen die neue Galaxy Watch6.44, 45

Mehr erfahren

Galaxy Watch6 | Features & Display | Samsung Schweiz (64)

Einfach & Smart wechseln

Smart Switch ist der sichere Weg, um deine Daten auf das Galaxy zu übertragen. Nimm all deine Apps, Zifferblätter, Einstellungen und mehr mit, wenn du wechselst.46, 47, 48, 49

Mehr erfahren

Galaxy Watch6 | Features & Display | Samsung Schweiz (65)

Es ist Zeit, deine Smartwatch zu finden

  • Galaxy Watch6

    Galaxy Watch6 | Features & Display | Samsung Schweiz (66)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (67)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (68)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (69)

    JETZT KAUFEN

    Mehr erfahren

    • Galaxy Watch6 | Features & Display | Samsung Schweiz (70) Display Saphirglas
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (71) Displaygrösse 37,3 mm | 33,3 mm
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (72) Schnell-ladefunktion8 Galaxy Watch6 | Features & Display | Samsung Schweiz (73)
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (74) Infrarot-
      Temperatur-
      sensor
      Galaxy Watch6 | Features & Display | Samsung Schweiz (75)
    • Material Armor
      Aluminum
    • Akku7 425 mAh |
      300 mAh
    • Schlaf-
      tracking
      Galaxy Watch6 | Features & Display | Samsung Schweiz (76)
    • Zyklus-
      erfassung
      Galaxy Watch6 | Features & Display | Samsung Schweiz (77)
    • Körper-
      zusammensetzung
      Galaxy Watch6 | Features & Display | Samsung Schweiz (78)
    • Route
      Workout /
      Track Back
      Galaxy Watch6 | Features & Display | Samsung Schweiz (79)
    • Haltbarkeit 5ATM+IP68/
      MIL-STD-810H
    • Grösse 44,4 mm | 40,4 mm
    • Gewicht 33.3 g | 28.7 g
  • Galaxy Watch6 Classic

    Galaxy Watch6 | Features & Display | Samsung Schweiz (80)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (81)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (82)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (83)

    JETZT KAUFEN

    Mehr erfahren

    • Galaxy Watch6 | Features & Display | Samsung Schweiz (84) Display Saphirglas
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (85) Displaygrösse 37,3 mm | 33,3 mm
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (86) Schnell-ladefunktion8 Galaxy Watch6 | Features & Display | Samsung Schweiz (87)
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (88) Infrarot-
      Temperatur-
      sensor
      Galaxy Watch6 | Features & Display | Samsung Schweiz (89)
    • Material Stainless Steel
    • Akku7 425 mAh |
      300 mAh
    • Schlaf-
      tracking
      Galaxy Watch6 | Features & Display | Samsung Schweiz (90)
    • Zyklus-
      erfassung
      Galaxy Watch6 | Features & Display | Samsung Schweiz (91)
    • Körper-
      zusammensetzung
      Galaxy Watch6 | Features & Display | Samsung Schweiz (92)
    • Route
      Workout /
      Track Back
      Galaxy Watch6 | Features & Display | Samsung Schweiz (93)
    • Haltbarkeit 5ATM+IP68/
      MIL-STD-810H
    • Grösse 46,5 mm | 42,5 mm
    • Gewicht 59.0 g | 52.0 g
  • Galaxy Watch4

    Galaxy Watch6 | Features & Display | Samsung Schweiz (94)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (95)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (96)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (97)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (98)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (99)

    JETZT KAUFEN

    Mehr erfahren

    • Galaxy Watch6 | Features & Display | Samsung Schweiz (100) Display Corningc
      Gorilla® Glass
      mit DX+
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (101) Displaygrösse 34,6 mm | 30,4 mm
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (102) Schnell-ladefunktion8 Galaxy Watch6 | Features & Display | Samsung Schweiz (103)
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (104) Infrarot-
      temperatur-
      sensor
      Galaxy Watch6 | Features & Display | Samsung Schweiz (105)
    • Material Aluminum
      Aluminum
    • Akku49 361 mAh |
      247 mAh
    • Schlaf-
      tracking
      Galaxy Watch6 | Features & Display | Samsung Schweiz (106)
    • Zyklus-
      erfassung
      Galaxy Watch6 | Features & Display | Samsung Schweiz (107)
    • Körper-
      zusammensetzung
      Galaxy Watch6 | Features & Display | Samsung Schweiz (108)
    • Route
      Workout /
      Track Back
      Galaxy Watch6 | Features & Display | Samsung Schweiz (109)
    • Haltbarkeit 5ATM+IP68/
      MIL-STD-810G
    • Grösse 44,4 mm | 40,4 mm
    • Gewicht 30.3 g | 25.9 g
  • Galaxy Watch5 Pro

    Galaxy Watch6 | Features & Display | Samsung Schweiz (110)

    Galaxy Watch6 | Features & Display | Samsung Schweiz (111)

    JETZT KAUFEN

    Mehr erfahren

    • Galaxy Watch6 | Features & Display | Samsung Schweiz (112) Display Saphirglas
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (113) Displaygrösse 34,6 mm
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (114) Schnell-ladefunktion8 Galaxy Watch6 | Features & Display | Samsung Schweiz (115)
    • Galaxy Watch6 | Features & Display | Samsung Schweiz (116) Infrarot-
      temperature-
      sensor
      Galaxy Watch6 | Features & Display | Samsung Schweiz (117)
    • Material Titan
    • Akku52 590mAh
    • Schlaf-
      -tracking
      Galaxy Watch6 | Features & Display | Samsung Schweiz (118)
    • Zyklus-
      erfassung
      Galaxy Watch6 | Features & Display | Samsung Schweiz (119)
    • Körper-
      zusammensetzung
      Galaxy Watch6 | Features & Display | Samsung Schweiz (120)
    • Route
      Workout /
      Track Back
      Galaxy Watch6 | Features & Display | Samsung Schweiz (121)
    • Haltbarkeit 5ATM+IP68/
      MIL-STD-810H
    • Grösse 45,4 mm
    • Gewicht 46.5 g

Join the Flip side

Zum Galaxy Z Flip5

Galaxy Watch6 | Features & Display | Samsung Schweiz (122)

Entfalte deine Welt

Zum Galaxy Z Fold5

Galaxy Watch6 | Features & Display | Samsung Schweiz (123)

Galaxy
Tab S9 | S9+ | S9
Ultra

Zum Galaxy Tab S9

Galaxy Watch6 | Features & Display | Samsung Schweiz (124)

Galaxy Watch6 Classic

Zur Galaxy Watch6 Classic

Galaxy Watch6 | Features & Display | Samsung Schweiz (125)

C C

  1. Die Displaygrösse der Galaxy Watch6 wird mit der der Galaxy Watch5 verglichen.
  2. . Die Vergleiche von Bildschirmgrösse und schwarzem Rand basieren auf dem Modell Galaxy Watch6 (Small). Auf Grundlage des Modells Galaxy Watch6 (Large) betragen die Vergleiche der Bildschirmgrösse und des schwarzen Rands 16,5 % bzw. 28 %.
  3. Im Vergleich zur Galaxy Watch5.
  4. Die Verfügbarkeit von Armbändern kann je nach Land oder Region variieren. Zusätzliche Armbänder sind separat erhältlich.
  5. Die Galaxy Watch6 bietet Wasserschutz bis 5ATM nach ISO-Standard 22810. Sie ist nicht zum Tauchen oder für Hochdruckwasseraktivitäten geeignet. Wenn das Gerät oder deine Hände nass sind, müssen sie vor der Benutzung gründlich abgetrocknet werden. Die Galaxy Watch6 ist bei dauerhaftem Untertauchen bei bis zu 1,5 m Wassertiefe für 30 Minuten (ausschliesslich in klarem Wasser) geschützt (IP68). Weitere Informationen, einschliesslich Pflege- und Gebrauchsanweisungen, findest du im Benutzerhandbuch.
  6. Basierend auf der Härteprüfung nach Vickers, gemessen mit einer konstanten Last von 200 gf.
  7. Die tatsächliche Akkulaufzeit hängt von Netzwerkumgebung, Nutzungsmuster und anderen Faktoren ab.
  8. Die Tests wurden von Samsung im Juni 2022 mit einer Vorabversion der Galaxy Watch5 (BT & LTE) durchgeführt, die jeweils mit einem Samsung Smartphone gekoppelt war. Alle Geräte wurden mit der Vorabversion der Software, dem Galaxy Watch Magnetic Fast Charging USB C Kabel (EP-OR900) und dem Samsung 25 W USB C Power Adapter (EP-TA800) getestet. Die Ladezeit variiert je nach Region, Einstellungen, Nutzungsmuster und Umgebungsfaktoren. Die tatsächlichen Ergebnisse können abweichen.
  9. Der Samsung 25 W USB C Power Adapter (EP-TA800) ist separat erhältlich.
  10. Erfordert die Samsung Health App in der Version 6.24 oder höher.
  11. Die Galaxy Watch6 muss mit einem Samsung Galaxy Smartphone mit Android 10.0 und mindestens 1,5 GB RAM gekoppelt sein.
  12. Nur für allgemeine Wellness- und Fitnesszwecke. Die Ergebnisse dienen nicht zur Erkennung, Diagnose oder Behandlung von Krankheiten oder Beschwerden. Die Messungen sind nur für deinen persönlichen Gebrauch bestimmt. Bitte suche eine ärztliche Fachkraft für genaue Untersuchungen und Diagnosen auf.
  13. "Um Einblicke in das Schlafverhalten zu erhalten, müssen Nutzer*innen die Galaxy Watch mindestens 7 Nächte lang im Schlaf tragen, davon 2 Tage an Wochenenden.
    Das Schlaftracking (Erfassung von REM-Schlafphasen, Tiefschlafphasen und gesamter Schlafdauer) kann ohne ein weiteres Gerät mit deiner Smartwatch genutzt werden. Um das Schlafprotokoll und Schlafempfehlungen abzurufen oder die Schnarcherkennung zu nutzen, wird ein gekoppeltes Smartphone benötigt."
  14. Die Funktionen zur Messung des Blutdrucks können je nach Land oder Region variieren.
  15. Das unsichtbare LED-Panel ist aktiviert, wenn der Ruhemodus eingeschaltet ist.
  16. Das Fabric Band ist separat erhältlich und mit der Galaxy Watch4 und späteren Galaxy Watch Serien kompatibel. Die Verfügbarkeit von Armbändern kann je nach Land/Region oder Anbieter variieren.
  17. Nur für allgemeine Wellness- und Fitnesszwecke. Die Ergebnisse dienen nicht zur Erkennung, Diagnose oder Behandlung von Krankheiten oder Beschwerden. Die Messungen sind nur für deinen persönlichen Gebrauch bestimmt. Bitte suche eine ärztliche Fachkraft für genaue Untersuchungen und Diagnosen auf. Bei der Samsung HealthMonitor-App, die eine EKG-Aufzeichnung ermöglicht, handelt es sich um ein Medizinprodukt. Die EKG-Funktion kann bei der Feststellung von Herzrhythmusstörungen unterstützen. Sie sucht aber niemals nach Anzeichen für einen Herzinfarkt. Die App ist nicht dazu gedacht, eine ärztliche Diagnose oder eine Behandlung durch eine ärztliche Fachkraft zu ersetzen. Bei Bedenken um die Gesundheit sollten Nutzer*innen unbedingt eine ärztliche Fachkraft aufsuchen.
  18. Die Verfügbarkeit der Funktion zur Benachrichtigung bei unregelmäßigem Herzrhythmus (Irregular Heart Rhythm Notification, IHRN) kann je nach Land oder Region variieren. Auf Grund von Länderbeschränkungen bei der Zulassung/Registrierung als „medizinisches Gerät“ wird die IHRN-Funktion nur auf Smartwatches und Smartphones unterstützt, die in Ländern gekauft wurden, in denen der Service derzeit verfügbar ist (der Service kann jedoch eingeschränkt sein, wenn Benutzer*innen in Länder reisen, in denen der Service nicht verfügbar ist). Es ist nicht beabsichtigt, bei jedem Vorkommen eines unregelmäßigen Herzrhythmus, das auf Vorhofflimmern hindeutet, eine Benachrichtigung zu übermitteln, und das Ausbleiben einer Benachrichtigung bedeutet nicht, dass kein Krankheitsprozess vorhanden ist. Die IHRN-Funktion ist nicht für Benutzer*innen mit anderen bekannten Herzrhythmusstörungen oder für Benutzer*innen unter 22 Jahren bestimmt. Benutzer*innen sollten die Ergebnisse der App nicht ohne Rücksprache mit einer qualifizierten ärztlichen Fachkraft interpretieren oder klinische Maßnahmen ergreifen.
  19. Die Verfügbarkeit der EKG-Funktion kann je nach Land oder Region variieren. Auf Grund von Länderbeschränkungen bei der Zulassung/Registrierung als „medizinisches Gerät“ wird die EKG-Funktion nur auf Smartwatches und Smartphones unterstützt, die in Ländern gekauft wurden, in denen der Service derzeit verfügbar ist (der Service kann jedoch eingeschränkt sein, wenn Benutzer*innen in Länder reisen, in denen der Service nicht verfügbar ist). Weitere Informationen und aktuelle Updates zu den Ländern, in denen diese Funktion verfügbar ist, findest du auf www.samsung.com/apps/samsung-health-monitor. Die EKG-Funktion ist nicht für Benutzer*innen unter 22 Jahren bestimmt. Benutzer*innen sollten die Ergebnisse der App nicht ohne Rücksprache mit einer qualifizierten ärztlichen Fachkraft interpretieren oder klinische Maßnahmen ergreifen.
  20. Für eine größere Genauigkeit sollten Nutzer*innen ihr Gerät mindestens einmal im Monat kalibrieren. Die Funktion benötigt ein Galaxy Smartphone mit Android 9.0 oder höher.
  21. Die Funktionen zur Messung des Blutdrucks können je nach Land oder Region variieren. Auf Grund von Beschränkungen bei der Zulassung/Registrierung als „medizinisches Gerät“ wird die Blutdruck-Funktion nur auf Smartwatches und Smartphones unterstützt, die in Ländern gekauft wurden, in denen der Service derzeit verfügbar ist (der Service kann jedoch eingeschränkt sein, wenn Benutzer*innen in Länder reisen, in denen der Service nicht verfügbar ist). Weitere Informationen und aktuelle Updates zu den Ländern, in denen der Dienst verfügbar ist, findest du unter https://www.samsung.com/apps/samsung-health-monitor. Die Blutdruck-App ist nicht für Benutzer*innen unter 22 Jahren gedacht.
  22. Nutzer*innen sollten ihren Blutdruck in einem ausgeruhten Zustand messen, so wie dies auch für Oberarm-Blutdruckmessgeräte empfohlen wird. Der Blutdruck sollte nicht gemessen werden, wenn Nutzer*innen Sport treiben, Zigaretten rauchen oder Alkohol trinken. Die Blutdruck-App ist nicht für diagnostische Zwecke in Bezug auf Bluthochdruck oder andere Herzerkrankungen oder für Benutzer*innen unter 22 Jahren gedacht. Benutzer*innen sollten die Ergebnisse des Geräts nicht ohne Rücksprache mit einer qualifizierten ärztlichen Fachkraft interpretieren oder klinische Maßnahmen ergreifen. Die Blutdruck-App ist nicht dazu gedacht, herkömmliche Diagnose- oder Behandlungsmethoden zu ersetzen.
  23. Der Verlauf über den gemessenen Blutdruck kann in der Samsung HealthMonitor-App auf einem gekoppelten Smartphone eingesehen werden.
  24. Nur für allgemeine Wellness- und Fitnesszwecke. Die Ergebnisse dienen nicht zur Erkennung, Diagnose oder Behandlung von Krankheiten oder Beschwerden.
  25. Die Erfassung der Körperzusammensetzung wird nur von Modellen der Samsung Galaxy Watch4 Serie und späteren Samsung Galaxy Watch Modellen unterstützt. Führe KEINE Körperzusammensetzungsanalyse durch, wenn du einen implantierten Herzschrittmacher oder andere implantierte medizinische Geräte hast oder schwanger bist. Alle gesundheitsbezogenen Informationen, auf die über das Gerät und die Anwendung zugegriffen wird, sind nicht als medizinischer Rat zu verstehen. Wenn du jünger als 20 Jahre alt bist, sind die Messergebnisse möglicherweise ungenau. Die Messungen sind nur für deinen persönlichen Gebrauch bestimmt. Bei Bedenken um die Gesundheit sollten Nutzer*innen unbedingt eine ärztliche Fachkraft aufsuchen.
  26. Kompatible Smartphones und verfügbare Funktionen können je nach Land/Region, Anbieter oder Gerät variieren.
  27. Auf der Galaxy Watch6 muss die neueste Wear OS-Version installiert sein.
  28. Die Funktion zur Sturzerkennung muss in der Galaxy Wearable-App auf deinem Galaxy Smartphone aktiviert sein, um sie auf der Smartwatch nutzen zu können.
  29. Der Notruf erfordert eine Netzverbindung oder die Kopplung mit einem Galaxy Smartphone.
  30. Die von der Smartwatch, der Samsung Health-App oder der zugehörigen Software gesammelten Informationen sind nicht dazu bestimmt, Krankheiten oder andere Zustände zu diagnostizieren, zu heilen, zu lindern, zu behandeln oder zu verhindern.
  31. Die automatische Trainingserkennung muss in den Einstellungen aktiviert werden. Die automatische Erkennung ist nicht für alle Trainingsprogramme verfügbar.
  32. Nur auf der Galaxy Watch6 Serie verfügbar und muss mit einem kompatiblen Mobilgerät gekoppelt werden.
  33. Um die Bereiche der einzelnen HF-Zonen für das Laufen auf Grundlage der kardiopulmonalen Fähigkeiten zu aktualisieren, ist es erforderlich, mehr als 10 Minuten mit einer konstanten Geschwindigkeit von 4 km/h oder schneller draußen zu joggen.
  34. Galaxy Z Flip5 separat erhältlich.
  35. Camera Controller wird von der Galaxy Watch4 Serie und neueren Galaxy Watch Modellen unterstützt, wenn sie mit der Galaxy S9 Serie und neueren Modellen gekoppelt sind. Die Zoomfunktion der Camera Controller-App ist auf der Samsung Galaxy Watch4 Serie und neueren Galaxy Watch Modellen verfügbar, wenn sie mit einem Samsung Smartphone der Galaxy S, Galaxy Note und Galaxy Z Serie mit One UI 5.1 oder höher und Unterstützung der Camera Controller-App gekoppelt sind.
  36. LTE-Verbindung erforderlich, um bestimmte Funktionen der Galaxy Watch6 nutzen zu können. LTE-Konnektivität nur bei LTE-Modellen verfügbar.
  37. Nicht alle Apps und Dienste sind mit Wear OS kompatibel.
  38. Verfügbar für LTE-Modelle.
  39. Beim aktivierten International Roaming können je nach Tarif deines Smartphone-Anbieters Roaming-Gebühren anfallen.
  40. Die Verfügbarkeit von Samsung Wallet und ihrer Funktionen können je nach Land oder Region variieren.
  41. Die Verfügbarkeit bestimmter Apps kann je nach Land oder Region variieren.
  42. Die GPS-Funktion erfordert eine Internetverbindung. Kann bei LTE-Modellen ohne gekoppeltes Smartphone verwendet werden. Nicht-LTE-Modelle erfordern eine Bluetooth-Verbindung zum gekoppelten Smartphone.
  43. Wenn GPS-Tracking aktiviert ist, können deine aktuellen Standortinformationen gesammelt und von Galaxy Apps sowie Apps von Drittanbietern verwendet werden, um standortbezogene Dienste anzubieten.
  44. Rabatte für beschädigte Geräte fallen deutlich geringer aus als die für voll funktionsfähige Geräte, es sei denn, es läuft eine gesonderte Werbeaktion, die den Wert von beschädigten Geräten begünstigt.
  45. Kauf im Samsung Online-Shop vor dem TT.MM.JJJJ. XX € Wert basiert auf einer beliebigen XXX (Marke, Produkt) Smartwatch. Es fallen Gebühren an, wenn du uns dein Altgerät nicht zuschickst. Es gelten die Teilnahmebedingungen.
  46. Eine Bluetooth-, WLAN- oder LTE-Verbindung ist erforderlich.
  47. Apps von Drittanbietern müssen separat heruntergeladen werden.
  48. Kompatibel mit Galaxy Watch in Wear OS Powered by Samsung. Erfordert die Kopplung mit einem Smartphone, auf dem die neueste Version von Smart Switch installiert ist.
  49. Die für die Übertragung verfügbaren Daten und Inhalte können je nach Betriebssystem variieren.
  50. Die mAh-Angabe bezieht sich auf den typischen Wert der Akkukapazität, der unter Laborbedingungen ermittelt wurde. Die nach der einschlägigen Norm IEC 61960-3 ermittelte Kapazität beläuft sich auf einen geringeren Wert.
  51. Die Tests wurden von Samsung im Juni 2022 mit einer Vorabversion der Galaxy Watch5 (BT & LTE) durchgeführt, die jeweils mit einem Samsung Smartphone gekoppelt war. Alle Geräte wurden mit der Vorabversion der Software, dem magnetischen Galaxy Watch Schnelllade-USB-C-Kabel (EP-OR900) und dem Samsung 25 W USB C Power-Adapter (EP-TA800) getestet. Die Ladezeit variiert je nach Region, Einstellungen, Nutzungsmuster und Umgebungsfaktoren. Die tatsächlichen Ergebnisse können abweichen.
  52. Die mAh-Angabe bezieht sich auf den typischen Wert der Akkukapazität, der unter Laborbedingungen ermittelt wurde. Die nach der einschlägigen Norm IEC 61960-3 ermittelte Kapazität beläuft sich auf einen geringeren Wert. Die (minimale) Akkukapazität beträgt 573 mAh. Die tatsächliche Akkulaufzeit kann je nach Netzwerkumgebung, Nutzerverhalten und anderen Faktoren variieren.

");return a.attr("data-swiper-slide-index")||a.attr("data-swiper-slide-index",t),i.cache&&(this.virtual.cache[t]=a),a},appendSlide:function(e){if("object"==typeof e&&"length"in e)for(var t=0;t

=0;i-=1)this.virtual.slides.splice(e[i],1),this.params.virtual.cache&&delete this.virtual.cache[e[i]],e[i]0&&0===this.$el.parents("."+this.params.slideActiveClass).length)return;var o=t.innerWidth,l=t.innerHeight,d=this.$el.offset();s&&(d.left-=this.$el[0].scrollLeft);for(var h=[[d.left,d.top],[d.left+this.width,d.top],[d.left,d.top+this.height],[d.left+this.width,d.top+this.height]],p=0;p=0&&c[0]<=o&&c[1]>=0&&c[1]<=l&&(n=!0)}if(!n)return}this.isHorizontal()?(33!==r&&34!==r&&37!==r&&39!==r||(a.preventDefault?a.preventDefault():a.returnValue=!1),(34!==r&&39!==r||s)&&(33!==r&&37!==r||!s)||this.slideNext(),(33!==r&&37!==r||s)&&(34!==r&&39!==r||!s)||this.slidePrev()):(33!==r&&34!==r&&38!==r&&40!==r||(a.preventDefault?a.preventDefault():a.returnValue=!1),34!==r&&40!==r||this.slideNext(),33!==r&&38!==r||this.slidePrev()),this.emit("keyPress",r)}},enable:function(){this.keyboard.enabled||(s(e).on("keydown",this.keyboard.handle),this.keyboard.enabled=!0)},disable:function(){this.keyboard.enabled&&(s(e).off("keydown",this.keyboard.handle),this.keyboard.enabled=!1)}},te={name:"keyboard",params:{keyboard:{enabled:!1,onlyInViewport:!0}},create:function(){n.extend(this,{keyboard:{enabled:!1,enable:ee.enable.bind(this),disable:ee.disable.bind(this),handle:ee.handle.bind(this)}})},on:{init:function(){this.params.keyboard.enabled&&this.keyboard.enable()},destroy:function(){this.keyboard.enabled&&this.keyboard.disable()}}};var ie={lastScrollTime:n.now(),lastEventBeforeSnap:void 0,recentWheelEvents:[],event:function(){return t.navigator.userAgent.indexOf("firefox")>-1?"DOMMouseScroll":function(){var t="onwheel"in e;if(!t){var i=e.createElement("div");i.setAttribute("onwheel","return;"),t="function"==typeof i.onwheel}return!t&&e.implementation&&e.implementation.hasFeature&&!0!==e.implementation.hasFeature("","")&&(t=e.implementation.hasFeature("Events.wheel","3.0")),t}()?"wheel":"mousewheel"},normalize:function(e){var t=0,i=0,s=0,a=0;return"detail"in e&&(i=e.detail),"wheelDelta"in e&&(i=-e.wheelDelta/120),"wheelDeltaY"in e&&(i=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=i,i=0),s=10*t,a=10*i,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(s=e.deltaX),e.shiftKey&&!s&&(s=a,a=0),(s||a)&&e.deltaMode&&(1===e.deltaMode?(s*=40,a*=40):(s*=800,a*=800)),s&&!t&&(t=s<1?-1:1),a&&!i&&(i=a<1?-1:1),{spinX:t,spinY:i,pixelX:s,pixelY:a}},handleMouseEnter:function(){this.mouseEntered=!0},handleMouseLeave:function(){this.mouseEntered=!1},handle:function(e){var t=e,i=this,s=i.params.mousewheel;if(i.params.cssMode&&t.preventDefault(),!i.mouseEntered&&!s.releaseOnEdges)return!0;t.originalEvent&&(t=t.originalEvent);var a=0,r=i.rtlTranslate?-1:1,o=ie.normalize(t);if(s.forceToAxis)if(i.isHorizontal()){if(!(Math.abs(o.pixelX)>Math.abs(o.pixelY)))return!0;a=o.pixelX*r}else{if(!(Math.abs(o.pixelY)>Math.abs(o.pixelX)))return!0;a=o.pixelY}else a=Math.abs(o.pixelX)>Math.abs(o.pixelY)?-o.pixelX*r:-o.pixelY;if(0===a)return!0;if(s.invert&&(a=-a),i.params.freeMode){var l={time:n.now(),delta:Math.abs(a),direction:Math.sign(a)},d=i.mousewheel.lastEventBeforeSnap,h=d&&l.time=i.minTranslate()&&(p=i.minTranslate()),p<=i.maxTranslate()&&(p=i.maxTranslate()),i.setTransition(0),i.setTranslate(p),i.updateProgress(),i.updateActiveIndex(),i.updateSlidesClasses(),(!c&&i.isBeginning||!u&&i.isEnd)&&i.updateSlidesClasses(),i.params.freeModeSticky){clearTimeout(i.mousewheel.timeout),i.mousewheel.timeout=void 0;var v=i.mousewheel.recentWheelEvents;v.length>=15&&v.shift();var f=v.length?v[v.length-1]:void 0,m=v[0];if(v.push(l),f&&(l.delta>f.delta||l.direction!==f.direction))v.splice(0);else if(v.length>=15&&l.time-m.time<500&&m.delta-l.delta>=1&&l.delta<=6){var g=a>0?.8:.2;i.mousewheel.lastEventBeforeSnap=l,v.splice(0),i.mousewheel.timeout=n.nextTick((function(){i.slideToClosest(i.params.speed,!0,void 0,g)}),0)}i.mousewheel.timeout||(i.mousewheel.timeout=n.nextTick((function(){i.mousewheel.lastEventBeforeSnap=l,v.splice(0),i.slideToClosest(i.params.speed,!0,void 0,.5)}),500))}if(h||i.emit("scroll",t),i.params.autoplay&&i.params.autoplayDisableOnInteraction&&i.autoplay.stop(),p===i.minTranslate()||p===i.maxTranslate())return!0}}else{var b={time:n.now(),delta:Math.abs(a),direction:Math.sign(a),raw:e},w=i.mousewheel.recentWheelEvents;w.length>=2&&w.shift();var y=w.length?w[w.length-1]:void 0;if(w.push(b),y?(b.direction!==y.direction||b.delta>y.delta)&&i.mousewheel.animateSlider(b):i.mousewheel.animateSlider(b),i.mousewheel.releaseScroll(b))return!0}return t.preventDefault?t.preventDefault():t.returnValue=!1,!1},animateSlider:function(e){return e.delta>=6&&n.now()-this.mousewheel.lastScrollTime<60||(e.direction<0?this.isEnd&&!this.params.loop||this.animating||(this.slideNext(),this.emit("scroll",e.raw)):this.isBeginning&&!this.params.loop||this.animating||(this.slidePrev(),this.emit("scroll",e.raw)),this.mousewheel.lastScrollTime=(new t.Date).getTime(),!1)},releaseScroll:function(e){var t=this.params.mousewheel;if(e.direction<0){if(this.isEnd&&!this.params.loop&&t.releaseOnEdges)return!0}else if(this.isBeginning&&!this.params.loop&&t.releaseOnEdges)return!0;return!1},enable:function(){var e=ie.event();if(this.params.cssMode)return this.wrapperEl.removeEventListener(e,this.mousewheel.handle),!0;if(!e)return!1;if(this.mousewheel.enabled)return!1;var t=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(t=s(this.params.mousewheel.eventsTarged)),t.on("mouseenter",this.mousewheel.handleMouseEnter),t.on("mouseleave",this.mousewheel.handleMouseLeave),t.on(e,this.mousewheel.handle),this.mousewheel.enabled=!0,!0},disable:function(){var e=ie.event();if(this.params.cssMode)return this.wrapperEl.addEventListener(e,this.mousewheel.handle),!0;if(!e)return!1;if(!this.mousewheel.enabled)return!1;var t=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(t=s(this.params.mousewheel.eventsTarged)),t.off(e,this.mousewheel.handle),this.mousewheel.enabled=!1,!0}},se={update:function(){var e=this.params.navigation;if(!this.params.loop){var t=this.navigation,i=t.$nextEl,s=t.$prevEl;s&&s.length>0&&(this.isBeginning?s.addClass(e.disabledClass):s.removeClass(e.disabledClass),s[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass)),i&&i.length>0&&(this.isEnd?i.addClass(e.disabledClass):i.removeClass(e.disabledClass),i[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass))}},onPrevClick:function(e){e.preventDefault(),this.isBeginning&&!this.params.loop||this.slidePrev()},onNextClick:function(e){e.preventDefault(),this.isEnd&&!this.params.loop||this.slideNext()},init:function(){var e,t,i=this.params.navigation;(i.nextEl||i.prevEl)&&(i.nextEl&&(e=s(i.nextEl),this.params.uniqueNavElements&&"string"==typeof i.nextEl&&e.length>1&&1===this.$el.find(i.nextEl).length&&(e=this.$el.find(i.nextEl))),i.prevEl&&(t=s(i.prevEl),this.params.uniqueNavElements&&"string"==typeof i.prevEl&&t.length>1&&1===this.$el.find(i.prevEl).length&&(t=this.$el.find(i.prevEl))),e&&e.length>0&&e.on("click",this.navigation.onNextClick),t&&t.length>0&&t.on("click",this.navigation.onPrevClick),n.extend(this.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}))},destroy:function(){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;t&&t.length&&(t.off("click",this.navigation.onNextClick),t.removeClass(this.params.navigation.disabledClass)),i&&i.length&&(i.off("click",this.navigation.onPrevClick),i.removeClass(this.params.navigation.disabledClass))}},ae={update:function(){var e=this.rtl,t=this.params.pagination;if(t.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var i,a=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,r=this.pagination.$el,n=this.params.loop?Math.ceil((a-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length;if(this.params.loop?((i=Math.ceil((this.activeIndex-this.loopedSlides)/this.params.slidesPerGroup))>a-1-2*this.loopedSlides&&(i-=a-2*this.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==this.params.paginationType&&(i=n+i)):i=void 0!==this.snapIndex?this.snapIndex:this.activeIndex||0,"bullets"===t.type&&this.pagination.bullets&&this.pagination.bullets.length>0){var o,l,d,h=this.pagination.bullets;if(t.dynamicBullets&&(this.pagination.bulletSize=h.eq(0)[this.isHorizontal()?"outerWidth":"outerHeight"](!0),r.css(this.isHorizontal()?"width":"height",this.pagination.bulletSize*(t.dynamicMainBullets+4)+"px"),t.dynamicMainBullets>1&&void 0!==this.previousIndex&&(this.pagination.dynamicBulletIndex+=i-this.previousIndex,this.pagination.dynamicBulletIndex>t.dynamicMainBullets-1?this.pagination.dynamicBulletIndex=t.dynamicMainBullets-1:this.pagination.dynamicBulletIndex<0&&(this.pagination.dynamicBulletIndex=0)),o=i-this.pagination.dynamicBulletIndex,d=((l=o+(Math.min(h.length,t.dynamicMainBullets)-1))+o)/2),h.removeClass(t.bulletActiveClass+" "+t.bulletActiveClass+"-next "+t.bulletActiveClass+"-next-next "+t.bulletActiveClass+"-prev "+t.bulletActiveClass+"-prev-prev "+t.bulletActiveClass+"-main"),r.length>1)h.each((function(e,a){var r=s(a),n=r.index();n===i&&r.addClass(t.bulletActiveClass),t.dynamicBullets&&(n>=o&&n<=l&&r.addClass(t.bulletActiveClass+"-main"),n===o&&r.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),n===l&&r.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next"))}));else{var p=h.eq(i),c=p.index();if(p.addClass(t.bulletActiveClass),t.dynamicBullets){for(var u=h.eq(o),v=h.eq(l),f=o;f<=l;f+=1)h.eq(f).addClass(t.bulletActiveClass+"-main");if(this.params.loop)if(c>=h.length-t.dynamicMainBullets){for(var m=t.dynamicMainBullets;m>=0;m-=1)h.eq(h.length-m).addClass(t.bulletActiveClass+"-main");h.eq(h.length-t.dynamicMainBullets-1).addClass(t.bulletActiveClass+"-prev")}else u.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),v.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next");else u.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),v.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next")}}if(t.dynamicBullets){var g=Math.min(h.length,t.dynamicMainBullets+4),b=(this.pagination.bulletSize*g-this.pagination.bulletSize)/2-d*this.pagination.bulletSize,w=e?"right":"left";h.css(this.isHorizontal()?w:"top",b+"px")}}if("fraction"===t.type&&(r.find("."+t.currentClass).text(t.formatFractionCurrent(i+1)),r.find("."+t.totalClass).text(t.formatFractionTotal(n))),"progressbar"===t.type){var y;y=t.progressbarOpposite?this.isHorizontal()?"vertical":"horizontal":this.isHorizontal()?"horizontal":"vertical";var x=(i+1)/n,T=1,E=1;"horizontal"===y?T=x:E=x,r.find("."+t.progressbarFillClass).transform("translate3d(0,0,0) scaleX("+T+") scaleY("+E+")").transition(this.params.speed)}"custom"===t.type&&t.renderCustom?(r.html(t.renderCustom(this,i+1,n)),this.emit("paginationRender",this,r[0])):this.emit("paginationUpdate",this,r[0]),r[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](t.lockClass)}},render:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,i=this.pagination.$el,s="";if("bullets"===e.type){for(var a=this.params.loop?Math.ceil((t-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length,r=0;r'+e.bulletElement+">";i.html(s),this.pagination.bullets=i.find("."+e.bulletClass)}"fraction"===e.type&&(s=e.renderFraction?e.renderFraction.call(this,e.currentClass,e.totalClass):' / ',i.html(s)),"progressbar"===e.type&&(s=e.renderProgressbar?e.renderProgressbar.call(this,e.progressbarFillClass):'',i.html(s)),"custom"!==e.type&&this.emit("paginationRender",this.pagination.$el[0])}},init:function(){var e=this,t=e.params.pagination;if(t.el){var i=s(t.el);0!==i.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&i.length>1&&1===e.$el.find(t.el).length&&(i=e.$el.find(t.el)),"bullets"===t.type&&t.clickable&&i.addClass(t.clickableClass),i.addClass(t.modifierClass+t.type),"bullets"===t.type&&t.dynamicBullets&&(i.addClass(""+t.modifierClass+t.type+"-dynamic"),e.pagination.dynamicBulletIndex=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&i.addClass(t.progressbarOppositeClass),t.clickable&&i.on("click","."+t.bulletClass,(function(t){t.preventDefault();var i=s(this).index()*e.params.slidesPerGroup;e.params.loop&&(i+=e.loopedSlides),e.slideTo(i)})),n.extend(e.pagination,{$el:i,el:i[0]}))}},destroy:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.pagination.$el;t.removeClass(e.hiddenClass),t.removeClass(e.modifierClass+e.type),this.pagination.bullets&&this.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&t.off("click","."+e.bulletClass)}}},re={setTranslate:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=this.rtlTranslate,i=this.progress,s=e.dragSize,a=e.trackSize,r=e.$dragEl,n=e.$el,o=this.params.scrollbar,l=s,d=(a-s)*i;t?(d=-d)>0?(l=s-d,d=0):-d+s>a&&(l=a+d):d<0?(l=s+d,d=0):d+s>a&&(l=a-d),this.isHorizontal()?(r.transform("translate3d("+d+"px, 0, 0)"),r[0].style.width=l+"px"):(r.transform("translate3d(0px, "+d+"px, 0)"),r[0].style.height=l+"px"),o.hide&&(clearTimeout(this.scrollbar.timeout),n[0].style.opacity=1,this.scrollbar.timeout=setTimeout((function(){n[0].style.opacity=0,n.transition(400)}),1e3))}},setTransition:function(e){this.params.scrollbar.el&&this.scrollbar.el&&this.scrollbar.$dragEl.transition(e)},updateSize:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=e.$dragEl,i=e.$el;t[0].style.width="",t[0].style.height="";var s,a=this.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,r=this.size/this.virtualSize,o=r*(a/this.size);s="auto"===this.params.scrollbar.dragSize?a*r:parseInt(this.params.scrollbar.dragSize,10),this.isHorizontal()?t[0].style.width=s+"px":t[0].style.height=s+"px",i[0].style.display=r>=1?"none":"",this.params.scrollbar.hide&&(i[0].style.opacity=0),n.extend(e,{trackSize:a,divider:r,moveDivider:o,dragSize:s}),e.$el[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](this.params.scrollbar.lockClass)}},getPointerPosition:function(e){return this.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientX:e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientY:e.clientY},setDragPosition:function(e){var t,i=this.scrollbar,s=this.rtlTranslate,a=i.$el,r=i.dragSize,n=i.trackSize,o=i.dragStartPos;t=(i.getPointerPosition(e)-a.offset()[this.isHorizontal()?"left":"top"]-(null!==o?o:r/2))/(n-r),t=Math.max(Math.min(t,1),0),s&&(t=1-t);var l=this.minTranslate()+(this.maxTranslate()-this.minTranslate())*t;this.updateProgress(l),this.setTranslate(l),this.updateActiveIndex(),this.updateSlidesClasses()},onDragStart:function(e){var t=this.params.scrollbar,i=this.scrollbar,s=this.$wrapperEl,a=i.$el,r=i.$dragEl;this.scrollbar.isTouched=!0,this.scrollbar.dragStartPos=e.target===r[0]||e.target===r?i.getPointerPosition(e)-e.target.getBoundingClientRect()[this.isHorizontal()?"left":"top"]:null,e.preventDefault(),e.stopPropagation(),s.transition(100),r.transition(100),i.setDragPosition(e),clearTimeout(this.scrollbar.dragTimeout),a.transition(0),t.hide&&a.css("opacity",1),this.params.cssMode&&this.$wrapperEl.css("scroll-snap-type","none"),this.emit("scrollbarDragStart",e)},onDragMove:function(e){var t=this.scrollbar,i=this.$wrapperEl,s=t.$el,a=t.$dragEl;this.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,t.setDragPosition(e),i.transition(0),s.transition(0),a.transition(0),this.emit("scrollbarDragMove",e))},onDragEnd:function(e){var t=this.params.scrollbar,i=this.scrollbar,s=this.$wrapperEl,a=i.$el;this.scrollbar.isTouched&&(this.scrollbar.isTouched=!1,this.params.cssMode&&(this.$wrapperEl.css("scroll-snap-type",""),s.transition("")),t.hide&&(clearTimeout(this.scrollbar.dragTimeout),this.scrollbar.dragTimeout=n.nextTick((function(){a.css("opacity",0),a.transition(400)}),1e3)),this.emit("scrollbarDragEnd",e),t.snapOnRelease&&this.slideToClosest())},enableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEventsTouch,s=this.touchEventsDesktop,a=this.params,r=t.$el[0],n=!(!o.passiveListener||!a.passiveListeners)&&{passive:!1,capture:!1},l=!(!o.passiveListener||!a.passiveListeners)&&{passive:!0,capture:!1};o.touch?(r.addEventListener(i.start,this.scrollbar.onDragStart,n),r.addEventListener(i.move,this.scrollbar.onDragMove,n),r.addEventListener(i.end,this.scrollbar.onDragEnd,l)):(r.addEventListener(s.start,this.scrollbar.onDragStart,n),e.addEventListener(s.move,this.scrollbar.onDragMove,n),e.addEventListener(s.end,this.scrollbar.onDragEnd,l))}},disableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEventsTouch,s=this.touchEventsDesktop,a=this.params,r=t.$el[0],n=!(!o.passiveListener||!a.passiveListeners)&&{passive:!1,capture:!1},l=!(!o.passiveListener||!a.passiveListeners)&&{passive:!0,capture:!1};o.touch?(r.removeEventListener(i.start,this.scrollbar.onDragStart,n),r.removeEventListener(i.move,this.scrollbar.onDragMove,n),r.removeEventListener(i.end,this.scrollbar.onDragEnd,l)):(r.removeEventListener(s.start,this.scrollbar.onDragStart,n),e.removeEventListener(s.move,this.scrollbar.onDragMove,n),e.removeEventListener(s.end,this.scrollbar.onDragEnd,l))}},init:function(){if(this.params.scrollbar.el){var e=this.scrollbar,t=this.$el,i=this.params.scrollbar,a=s(i.el);this.params.uniqueNavElements&&"string"==typeof i.el&&a.length>1&&1===t.find(i.el).length&&(a=t.find(i.el));var r=a.find("."+this.params.scrollbar.dragClass);0===r.length&&(r=s(''),a.append(r)),n.extend(e,{$el:a,el:a[0],$dragEl:r,dragEl:r[0]}),i.draggable&&e.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},ne={setTransform:function(e,t){var i=this.rtl,a=s(e),r=i?-1:1,n=a.attr("data-swiper-parallax")||"0",o=a.attr("data-swiper-parallax-x"),l=a.attr("data-swiper-parallax-y"),d=a.attr("data-swiper-parallax-scale"),h=a.attr("data-swiper-parallax-opacity");if(o||l?(o=o||"0",l=l||"0"):this.isHorizontal()?(o=n,l="0"):(l=n,o="0"),o=o.indexOf("%")>=0?parseInt(o,10)*t*r+"%":o*t*r+"px",l=l.indexOf("%")>=0?parseInt(l,10)*t+"%":l*t+"px",null!=h){var p=h-(h-1)*(1-Math.abs(t));a[0].style.opacity=p}if(null==d)a.transform("translate3d("+o+", "+l+", 0px)");else{var c=d-(d-1)*(1-Math.abs(t));a.transform("translate3d("+o+", "+l+", 0px) scale("+c+")")}},setTranslate:function(){var e=this,t=e.$el,i=e.slides,a=e.progress,r=e.snapGrid;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((function(t,i){e.parallax.setTransform(i,a)})),i.each((function(t,i){var n=i.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(n+=Math.ceil(t/2)-a*(r.length-1)),n=Math.min(Math.max(n,-1),1),s(i).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((function(t,i){e.parallax.setTransform(i,n)}))}))},setTransition:function(e){void 0===e&&(e=this.params.speed);this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((function(t,i){var a=s(i),r=parseInt(a.attr("data-swiper-parallax-duration"),10)||e;0===e&&(r=0),a.transition(r)}))}},oe={getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var t=e.targetTouches[0].pageX,i=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,a=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-t,2)+Math.pow(a-i,2))},onGestureStart:function(e){var t=this.params.zoom,i=this.zoom,a=i.gesture;if(i.fakeGestureTouched=!1,i.fakeGestureMoved=!1,!o.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;i.fakeGestureTouched=!0,a.scaleStart=oe.getDistanceBetweenTouches(e)}a.$slideEl&&a.$slideEl.length||(a.$slideEl=s(e.target).closest(".swiper-slide"),0===a.$slideEl.length&&(a.$slideEl=this.slides.eq(this.activeIndex)),a.$imageEl=a.$slideEl.find("img, svg, canvas"),a.$imageWrapEl=a.$imageEl.parent("."+t.containerClass),a.maxRatio=a.$imageWrapEl.attr("data-swiper-zoom")||t.maxRatio,0!==a.$imageWrapEl.length)?(a.$imageEl.transition(0),this.zoom.isScaling=!0):a.$imageEl=void 0},onGestureChange:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!o.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;i.fakeGestureMoved=!0,s.scaleMove=oe.getDistanceBetweenTouches(e)}s.$imageEl&&0!==s.$imageEl.length&&(o.gestures?i.scale=e.scale*i.currentScale:i.scale=s.scaleMove/s.scaleStart*i.currentScale,i.scale>s.maxRatio&&(i.scale=s.maxRatio-1+Math.pow(i.scale-s.maxRatio+1,.5)),i.scales.touchesStart.x))return void(s.isTouched=!1);if(!this.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.ys.touchesStart.y))return void(s.isTouched=!1)}e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentXs.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentYs.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),a.prevPositionX||(a.prevPositionX=s.touchesCurrent.x),a.prevPositionY||(a.prevPositionY=s.touchesCurrent.y),a.prevTime||(a.prevTime=Date.now()),a.x=(s.touchesCurrent.x-a.prevPositionX)/(Date.now()-a.prevTime)/2,a.y=(s.touchesCurrent.y-a.prevPositionY)/(Date.now()-a.prevTime)/2,Math.abs(s.touchesCurrent.x-a.prevPositionX)<2&&(a.x=0),Math.abs(s.touchesCurrent.y-a.prevPositionY)<2&&(a.y=0),a.prevPositionX=s.touchesCurrent.x,a.prevPositionY=s.touchesCurrent.y,a.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,i=e.image,s=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!i.isTouched||!i.isMoved)return i.isTouched=!1,void(i.isMoved=!1);i.isTouched=!1,i.isMoved=!1;var a=300,r=300,n=s.x*a,o=i.currentX+n,l=s.y*r,d=i.currentY+l;0!==s.x&&(a=Math.abs((o-i.currentX)/s.x)),0!==s.y&&(r=Math.abs((d-i.currentY)/s.y));var h=Math.max(a,r);i.currentX=o,i.currentY=d;var p=i.width*e.scale,c=i.height*e.scale;i.minX=Math.min(t.slideWidth/2-p/2,0),i.maxX=-i.minX,i.minY=Math.min(t.slideHeight/2-c/2,0),i.maxY=-i.minY,i.currentX=Math.max(Math.min(i.currentX,i.maxX),i.minX),i.currentY=Math.max(Math.min(i.currentY,i.maxY),i.minY),t.$imageWrapEl.transition(h).transform("translate3d("+i.currentX+"px, "+i.currentY+"px,0)")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,e.currentScale=1,t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,i,a,r,n,o,l,d,h,p,c,u,v,f,m,g,b=this.zoom,w=this.params.zoom,y=b.gesture,x=b.image;(y.$slideEl||(y.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),y.$imageEl=y.$slideEl.find("img, svg, canvas"),y.$imageWrapEl=y.$imageEl.parent("."+w.containerClass)),y.$imageEl&&0!==y.$imageEl.length)&&(y.$slideEl.addClass(""+w.zoomedSlideClass),void 0===x.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,i="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=x.touchesStart.x,i=x.touchesStart.y),b.scale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,b.currentScale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,e?(m=y.$slideEl[0].offsetWidth,g=y.$slideEl[0].offsetHeight,a=y.$slideEl.offset().left+m/2-t,r=y.$slideEl.offset().top+g/2-i,l=y.$imageEl[0].offsetWidth,d=y.$imageEl[0].offsetHeight,h=l*b.scale,p=d*b.scale,v=-(c=Math.min(m/2-h/2,0)),f=-(u=Math.min(g/2-p/2,0)),(n=a*b.scale)v&&(n=v),(o=r*b.scale)f&&(o=f)):(n=0,o=0),y.$imageWrapEl.transition(300).transform("translate3d("+n+"px, "+o+"px,0)"),y.$imageEl.transition(300).transform("translate3d(0,0,0) scale("+b.scale+")"))},out:function(){var e=this.zoom,t=this.params.zoom,i=e.gesture;i.$slideEl||(i.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),i.$imageEl=i.$slideEl.find("img, svg, canvas"),i.$imageWrapEl=i.$imageEl.parent("."+t.containerClass)),i.$imageEl&&0!==i.$imageEl.length&&(e.scale=1,e.currentScale=1,i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),i.$slideEl.removeClass(""+t.zoomedSlideClass),i.$slideEl=void 0)},enable:function(){var e=this.zoom;if(!e.enabled){e.enabled=!0;var t=!("touchstart"!==this.touchEvents.start||!o.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1},i=!o.passiveListener||{passive:!1,capture:!0};o.gestures?(this.$wrapperEl.on("gesturestart",".swiper-slide",e.onGestureStart,t),this.$wrapperEl.on("gesturechange",".swiper-slide",e.onGestureChange,t),this.$wrapperEl.on("gestureend",".swiper-slide",e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.on(this.touchEvents.start,".swiper-slide",e.onGestureStart,t),this.$wrapperEl.on(this.touchEvents.move,".swiper-slide",e.onGestureChange,i),this.$wrapperEl.on(this.touchEvents.end,".swiper-slide",e.onGestureEnd,t),this.touchEvents.cancel&&this.$wrapperEl.on(this.touchEvents.cancel,".swiper-slide",e.onGestureEnd,t)),this.$wrapperEl.on(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove,i)}},disable:function(){var e=this.zoom;if(e.enabled){this.zoom.enabled=!1;var t=!("touchstart"!==this.touchEvents.start||!o.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1},i=!o.passiveListener||{passive:!1,capture:!0};o.gestures?(this.$wrapperEl.off("gesturestart",".swiper-slide",e.onGestureStart,t),this.$wrapperEl.off("gesturechange",".swiper-slide",e.onGestureChange,t),this.$wrapperEl.off("gestureend",".swiper-slide",e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.off(this.touchEvents.start,".swiper-slide",e.onGestureStart,t),this.$wrapperEl.off(this.touchEvents.move,".swiper-slide",e.onGestureChange,i),this.$wrapperEl.off(this.touchEvents.end,".swiper-slide",e.onGestureEnd,t),this.touchEvents.cancel&&this.$wrapperEl.off(this.touchEvents.cancel,".swiper-slide",e.onGestureEnd,t)),this.$wrapperEl.off(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove,i)}}},le={loadInSlide:function(e,t){void 0===t&&(t=!0);var i=this,a=i.params.lazy;if(void 0!==e&&0!==i.slides.length){var r=i.virtual&&i.params.virtual.enabled?i.$wrapperEl.children("."+i.params.slideClass+'[data-swiper-slide-index="'+e+'"]'):i.slides.eq(e),n=r.find("."+a.elementClass+":not(."+a.loadedClass+"):not(."+a.loadingClass+")");!r.hasClass(a.elementClass)||r.hasClass(a.loadedClass)||r.hasClass(a.loadingClass)||(n=n.add(r[0])),0!==n.length&&n.each((function(e,n){var o=s(n);o.addClass(a.loadingClass);var l=o.attr("data-background"),d=o.attr("data-src"),h=o.attr("data-srcset"),p=o.attr("data-sizes");i.loadImage(o[0],d||l,h,p,!1,(function(){if(null!=i&&i&&(!i||i.params)&&!i.destroyed){if(l?(o.css("background-image",'url("'+l+'")'),o.removeAttr("data-background")):(h&&(o.attr("srcset",h),o.removeAttr("data-srcset")),p&&(o.attr("sizes",p),o.removeAttr("data-sizes")),d&&(o.attr("src",d),o.removeAttr("data-src"))),o.addClass(a.loadedClass).removeClass(a.loadingClass),r.find("."+a.preloaderClass).remove(),i.params.loop&&t){var e=r.attr("data-swiper-slide-index");if(r.hasClass(i.params.slideDuplicateClass)){var s=i.$wrapperEl.children('[data-swiper-slide-index="'+e+'"]:not(.'+i.params.slideDuplicateClass+")");i.lazy.loadInSlide(s.index(),!1)}else{var n=i.$wrapperEl.children("."+i.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');i.lazy.loadInSlide(n.index(),!1)}}i.emit("lazyImageReady",r[0],o[0])}})),i.emit("lazyImageLoad",r[0],o[0])}))}},load:function(){var e=this,t=e.$wrapperEl,i=e.params,a=e.slides,r=e.activeIndex,n=e.virtual&&i.virtual.enabled,o=i.lazy,l=i.slidesPerView;function d(e){if(n){if(t.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]').length)return!0}else if(a[e])return!0;return!1}function h(e){return n?s(e).attr("data-swiper-slide-index"):s(e).index()}if("auto"===l&&(l=0),e.lazy.initialImageLoaded||(e.lazy.initialImageLoaded=!0),e.params.watchSlidesVisibility)t.children("."+i.slideVisibleClass).each((function(t,i){var a=n?s(i).attr("data-swiper-slide-index"):s(i).index();e.lazy.loadInSlide(a)}));else if(l>1)for(var p=r;p1||o.loadPrevNextAmount&&o.loadPrevNextAmount>1){for(var c=o.loadPrevNextAmount,u=l,v=Math.min(r+u+Math.max(c,u),a.length),f=Math.max(r-Math.max(u,c),0),m=r+l;m0&&e.lazy.loadInSlide(h(b));var w=t.children("."+i.slidePrevClass);w.length>0&&e.lazy.loadInSlide(h(w))}}},de={LinearSpline:function(e,t){var i,s,a,r,n,o=function(e,t){for(s=-1,i=e.length;i-s>1;)e[a=i+s>>1]<=t?s=a:i=a;return i};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){this.controller.spline||(this.controller.spline=this.params.loop?new de.LinearSpline(this.slidesGrid,e.slidesGrid):new de.LinearSpline(this.snapGrid,e.snapGrid))},setTranslate:function(e,t){var i,s,a=this,r=a.controller.control;function n(e){var t=a.rtlTranslate?-a.translate:a.translate;"slide"===a.params.controller.by&&(a.controller.getInterpolateFunction(e),s=-a.controller.spline.interpolate(-t)),s&&"container"!==a.params.controller.by||(i=(e.maxTranslate()-e.minTranslate())/(a.maxTranslate()-a.minTranslate()),s=(t-a.minTranslate())*i+e.minTranslate()),a.params.controller.inverse&&(s=e.maxTranslate()-s),e.updateProgress(s),e.setTranslate(s,a),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o0&&(this.isBeginning?this.a11y.disableEl(i):this.a11y.enableEl(i)),t&&t.length>0&&(this.isEnd?this.a11y.disableEl(t):this.a11y.enableEl(t))}},updatePagination:function(){var e=this,t=e.params.a11y;e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.bullets.each((function(i,a){var r=s(a);e.a11y.makeElFocusable(r),e.a11y.addElRole(r,"button"),e.a11y.addElLabel(r,t.paginationBulletMessage.replace(/{{index}}/,r.index()+1))}))},init:function(){this.$el.append(this.a11y.liveRegion);var e,t,i=this.params.a11y;this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&(this.a11y.makeElFocusable(e),this.a11y.addElRole(e,"button"),this.a11y.addElLabel(e,i.nextSlideMessage),e.on("keydown",this.a11y.onEnterKey)),t&&(this.a11y.makeElFocusable(t),this.a11y.addElRole(t,"button"),this.a11y.addElLabel(t,i.prevSlideMessage),t.on("keydown",this.a11y.onEnterKey)),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.on("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)},destroy:function(){var e,t;this.a11y.liveRegion&&this.a11y.liveRegion.length>0&&this.a11y.liveRegion.remove(),this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&e.off("keydown",this.a11y.onEnterKey),t&&t.off("keydown",this.a11y.onEnterKey),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.off("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)}},pe={init:function(){if(this.params.history){if(!t.history||!t.history.pushState)return this.params.history.enabled=!1,void(this.params.hashNavigation.enabled=!0);var e=this.history;e.initialized=!0,e.paths=pe.getPathValues(),(e.paths.key||e.paths.value)&&(e.scrollToSlide(0,e.paths.value,this.params.runCallbacksOnInit),this.params.history.replaceState||t.addEventListener("popstate",this.history.setHistoryPopState))}},destroy:function(){this.params.history.replaceState||t.removeEventListener("popstate",this.history.setHistoryPopState)},setHistoryPopState:function(){this.history.paths=pe.getPathValues(),this.history.scrollToSlide(this.params.speed,this.history.paths.value,!1)},getPathValues:function(){var e=t.location.pathname.slice(1).split("/").filter((function(e){return""!==e})),i=e.length;return{key:e[i-2],value:e[i-1]}},setHistory:function(e,i){if(this.history.initialized&&this.params.history.enabled){var s=this.slides.eq(i),a=pe.slugify(s.attr("data-history"));t.location.pathname.includes(e)||(a=e+"/"+a);var r=t.history.state;r&&r.value===a||(this.params.history.replaceState?t.history.replaceState({value:a},null,a):t.history.pushState({value:a},null,a))}},slugify:function(e){return e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")},scrollToSlide:function(e,t,i){if(t)for(var s=0,a=this.slides.length;s

'),i.append(e)),e.css({height:r+"px"})):0===(e=t.find(".swiper-cube-shadow")).length&&(e=s('

'),t.append(e)));for(var u=0;u

-1&&(c=90*f+90*b,o&&(c=90*-f-90*b)),v.transform(T),d.slideShadows){var E=h?v.find(".swiper-slide-shadow-left"):v.find(".swiper-slide-shadow-top"),S=h?v.find(".swiper-slide-shadow-right"):v.find(".swiper-slide-shadow-bottom");0===E.length&&(E=s(''),v.append(E)),0===S.length&&(S=s(''),v.append(S)),E.length&&(E[0].style.opacity=Math.max(-b,0)),S.length&&(S[0].style.opacity=Math.max(b,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+l/2+"px","-moz-transform-origin":"50% 50% -"+l/2+"px","-ms-transform-origin":"50% 50% -"+l/2+"px","transform-origin":"50% 50% -"+l/2+"px"}),d.shadow)if(h)e.transform("translate3d(0px, "+(r/2+d.shadowOffset)+"px, "+-r/2+"px) rotateX(90deg) rotateZ(0deg) scale("+d.shadowScale+")");else{var C=Math.abs(c)-90*Math.floor(Math.abs(c)/90),M=1.5-(Math.sin(2*C*Math.PI/360)/2+Math.cos(2*C*Math.PI/360)/2),P=d.shadowScale,z=d.shadowScale/M,k=d.shadowOffset;e.transform("scale3d("+P+", 1, "+z+") translate3d(0px, "+(n/2+k)+"px, "+-n/2/z+"px) rotateX(-90deg)")}var $=j.isSafari||j.isUiWebView?-l/2:0;i.transform("translate3d(0px,0,"+$+"px) rotateX("+(this.isHorizontal()?0:c)+"deg) rotateY("+(this.isHorizontal()?-c:0)+"deg)")},setTransition:function(e){var t=this.$el;this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}},me={setTranslate:function(){for(var e=this.slides,t=this.rtlTranslate,i=0;i

'),a.append(h)),0===p.length&&(p=s('

'),a.append(p)),h.length&&(h[0].style.opacity=Math.max(-r,0)),p.length&&(p[0].style.opacity=Math.max(r,0))}a.transform("translate3d("+l+"px, "+d+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){var t=this,i=t.slides,s=t.activeIndex,a=t.$wrapperEl;if(i.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.virtualTranslate&&0!==e){var r=!1;i.eq(s).transitionEnd((function(){if(!r&&t&&!t.destroyed){r=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i

'),f.append(S)),0===C.length&&(C=s('

'),f.append(C)),S.length&&(S[0].style.opacity=g>0?g:0),C.length&&(C[0].style.opacity=-g>0?-g:0)}}(o.pointerEvents||o.prefixedPointerEvents)&&(a[0].style.perspectiveOrigin=h+"px 50%")},setTransition:function(e){this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}},be={init:function(){var e=this.params.thumbs,t=this.constructor;e.swiper instanceof t?(this.thumbs.swiper=e.swiper,n.extend(this.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),n.extend(this.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1})):n.isObject(e.swiper)&&(this.thumbs.swiper=new t(n.extend({},e.swiper,{watchSlidesVisibility:!0,watchSlidesProgress:!0,slideToClickedSlide:!1})),this.thumbs.swiperCreated=!0),this.thumbs.swiper.$el.addClass(this.params.thumbs.thumbsContainerClass),this.thumbs.swiper.on("tap",this.thumbs.onThumbClick)},onThumbClick:function(){var e=this.thumbs.swiper;if(e){var t=e.clickedIndex,i=e.clickedSlide;if(!(i&&s(i).hasClass(this.params.thumbs.slideThumbActiveClass)||null==t)){var a;if(a=e.params.loop?parseInt(s(e.clickedSlide).attr("data-swiper-slide-index"),10):t,this.params.loop){var r=this.activeIndex;this.slides.eq(r).hasClass(this.params.slideDuplicateClass)&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,r=this.activeIndex);var n=this.slides.eq(r).prevAll('[data-swiper-slide-index="'+a+'"]').eq(0).index(),o=this.slides.eq(r).nextAll('[data-swiper-slide-index="'+a+'"]').eq(0).index();a=void 0===n?o:void 0===o?n:o-r

a?s-Math.floor(i/2)+1:s+Math.floor(i/2)-1:s>a&&(s=s-i+1),t.slideTo(s,e?0:void 0))}var o=1,l=this.params.thumbs.slideThumbActiveClass;if(this.params.slidesPerView>1&&!this.params.centeredSlides&&(o=this.params.slidesPerView),this.params.thumbs.multipleActiveThumbs||(o=1),o=Math.floor(o),t.slides.removeClass(l),t.params.loop||t.params.virtual&&t.params.virtual.enabled)for(var d=0;d0&&!s(e.target).hasClass(this.params.pagination.bulletClass)&&(!0===this.pagination.$el.hasClass(this.params.pagination.hiddenClass)?this.emit("paginationShow",this):this.emit("paginationHide",this),this.pagination.$el.toggleClass(this.params.pagination.hiddenClass))}}},{name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create:function(){n.extend(this,{scrollbar:{init:re.init.bind(this),destroy:re.destroy.bind(this),updateSize:re.updateSize.bind(this),setTranslate:re.setTranslate.bind(this),setTransition:re.setTransition.bind(this),enableDraggable:re.enableDraggable.bind(this),disableDraggable:re.disableDraggable.bind(this),setDragPosition:re.setDragPosition.bind(this),getPointerPosition:re.getPointerPosition.bind(this),onDragStart:re.onDragStart.bind(this),onDragMove:re.onDragMove.bind(this),onDragEnd:re.onDragEnd.bind(this),isTouched:!1,timeout:null,dragTimeout:null}})},on:{init:function(){this.scrollbar.init(),this.scrollbar.updateSize(),this.scrollbar.setTranslate()},update:function(){this.scrollbar.updateSize()},resize:function(){this.scrollbar.updateSize()},observerUpdate:function(){this.scrollbar.updateSize()},setTranslate:function(){this.scrollbar.setTranslate()},setTransition:function(e){this.scrollbar.setTransition(e)},destroy:function(){this.scrollbar.destroy()}}},{name:"parallax",params:{parallax:{enabled:!1}},create:function(){n.extend(this,{parallax:{setTransform:ne.setTransform.bind(this),setTranslate:ne.setTranslate.bind(this),setTransition:ne.setTransition.bind(this)}})},on:{beforeInit:function(){this.params.parallax.enabled&&(this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},init:function(){this.params.parallax.enabled&&this.parallax.setTranslate()},setTranslate:function(){this.params.parallax.enabled&&this.parallax.setTranslate()},setTransition:function(e){this.params.parallax.enabled&&this.parallax.setTransition(e)}}},{name:"zoom",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}},create:function(){var e=this,t={enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}};"onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach((function(i){t[i]=oe[i].bind(e)})),n.extend(e,{zoom:t});var i=1;Object.defineProperty(e.zoom,"scale",{get:function(){return i},set:function(t){if(i!==t){var s=e.zoom.gesture.$imageEl?e.zoom.gesture.$imageEl[0]:void 0,a=e.zoom.gesture.$slideEl?e.zoom.gesture.$slideEl[0]:void 0;e.emit("zoomChange",t,s,a)}i=t}})},on:{init:function(){this.params.zoom.enabled&&this.zoom.enable()},destroy:function(){this.zoom.disable()},touchStart:function(e){this.zoom.enabled&&this.zoom.onTouchStart(e)},touchEnd:function(e){this.zoom.enabled&&this.zoom.onTouchEnd(e)},doubleTap:function(e){this.params.zoom.enabled&&this.zoom.enabled&&this.params.zoom.toggle&&this.zoom.toggle(e)},transitionEnd:function(){this.zoom.enabled&&this.params.zoom.enabled&&this.zoom.onTransitionEnd()},slideChange:function(){this.zoom.enabled&&this.params.zoom.enabled&&this.params.cssMode&&this.zoom.onTransitionEnd()}}},{name:"lazy",params:{lazy:{enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}},create:function(){n.extend(this,{lazy:{initialImageLoaded:!1,load:le.load.bind(this),loadInSlide:le.loadInSlide.bind(this)}})},on:{beforeInit:function(){this.params.lazy.enabled&&this.params.preloadImages&&(this.params.preloadImages=!1)},init:function(){this.params.lazy.enabled&&!this.params.loop&&0===this.params.initialSlide&&this.lazy.load()},scroll:function(){this.params.freeMode&&!this.params.freeModeSticky&&this.lazy.load()},resize:function(){this.params.lazy.enabled&&this.lazy.load()},scrollbarDragMove:function(){this.params.lazy.enabled&&this.lazy.load()},transitionStart:function(){this.params.lazy.enabled&&(this.params.lazy.loadOnTransitionStart||!this.params.lazy.loadOnTransitionStart&&!this.lazy.initialImageLoaded)&&this.lazy.load()},transitionEnd:function(){this.params.lazy.enabled&&!this.params.lazy.loadOnTransitionStart&&this.lazy.load()},slideChange:function(){this.params.lazy.enabled&&this.params.cssMode&&this.lazy.load()}}},{name:"controller",params:{controller:{control:void 0,inverse:!1,by:"slide"}},create:function(){n.extend(this,{controller:{control:this.params.controller.control,getInterpolateFunction:de.getInterpolateFunction.bind(this),setTranslate:de.setTranslate.bind(this),setTransition:de.setTransition.bind(this)}})},on:{update:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},resize:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},observerUpdate:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},setTranslate:function(e,t){this.controller.control&&this.controller.setTranslate(e,t)},setTransition:function(e,t){this.controller.control&&this.controller.setTransition(e,t)}}},{name:"a11y",params:{a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}"}},create:function(){var e=this;n.extend(e,{a11y:{liveRegion:s('')}}),Object.keys(he).forEach((function(t){e.a11y[t]=he[t].bind(e)}))},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create:function(){n.extend(this,{history:{init:pe.init.bind(this),setHistory:pe.setHistory.bind(this),setHistoryPopState:pe.setHistoryPopState.bind(this),scrollToSlide:pe.scrollToSlide.bind(this),destroy:pe.destroy.bind(this)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)},slideChange:function(){this.history.initialized&&this.params.cssMode&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){n.extend(this,{hashNavigation:{initialized:!1,init:ce.init.bind(this),destroy:ce.destroy.bind(this),setHash:ce.setHash.bind(this),onHashCange:ce.onHashCange.bind(this)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()},slideChange:function(){this.hashNavigation.initialized&&this.params.cssMode&&this.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){var e=this;n.extend(e,{autoplay:{running:!1,paused:!1,run:ue.run.bind(e),start:ue.start.bind(e),stop:ue.stop.bind(e),pause:ue.pause.bind(e),onVisibilityChange:function(){"hidden"===document.visibilityState&&e.autoplay.running&&e.autoplay.pause(),"visible"===document.visibilityState&&e.autoplay.paused&&(e.autoplay.run(),e.autoplay.paused=!1)},onTransitionEnd:function(t){e&&!e.destroyed&&e.$wrapperEl&&t.target===this&&(e.$wrapperEl[0].removeEventListener("transitionend",e.autoplay.onTransitionEnd),e.$wrapperEl[0].removeEventListener("webkitTransitionEnd",e.autoplay.onTransitionEnd),e.autoplay.paused=!1,e.autoplay.running?e.autoplay.run():e.autoplay.stop())}}})},on:{init:function(){this.params.autoplay.enabled&&(this.autoplay.start(),document.addEventListener("visibilitychange",this.autoplay.onVisibilityChange))},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},touchEnd:function(){this.params.cssMode&&this.autoplay.paused&&!this.params.autoplay.disableOnInteraction&&this.autoplay.run()},destroy:function(){this.autoplay.running&&this.autoplay.stop(),document.removeEventListener("visibilitychange",this.autoplay.onVisibilityChange)}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){n.extend(this,{fadeEffect:{setTranslate:ve.setTranslate.bind(this),setTransition:ve.setTransition.bind(this)}})},on:{beforeInit:function(){if("fade"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"fade");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};n.extend(this.params,e),n.extend(this.originalParams,e)}},setTranslate:function(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){n.extend(this,{cubeEffect:{setTranslate:fe.setTranslate.bind(this),setTransition:fe.setTransition.bind(this)}})},on:{beforeInit:function(){if("cube"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"cube"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};n.extend(this.params,e),n.extend(this.originalParams,e)}},setTranslate:function(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){n.extend(this,{flipEffect:{setTranslate:me.setTranslate.bind(this),setTransition:me.setTransition.bind(this)}})},on:{beforeInit:function(){if("flip"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"flip"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};n.extend(this.params,e),n.extend(this.originalParams,e)}},setTranslate:function(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){n.extend(this,{coverflowEffect:{setTranslate:ge.setTranslate.bind(this),setTransition:ge.setTransition.bind(this)}})},on:{beforeInit:function(){"coverflow"===this.params.effect&&(this.classNames.push(this.params.containerModifierClass+"coverflow"),this.classNames.push(this.params.containerModifierClass+"3d"),this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},setTranslate:function(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}},{name:"thumbs",params:{thumbs:{multipleActiveThumbs:!0,swiper:null,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-container-thumbs"}},create:function(){n.extend(this,{thumbs:{swiper:null,init:be.init.bind(this),update:be.update.bind(this),onThumbClick:be.onThumbClick.bind(this)}})},on:{beforeInit:function(){var e=this.params.thumbs;e&&e.swiper&&(this.thumbs.init(),this.thumbs.update(!0))},slideChange:function(){this.thumbs.swiper&&this.thumbs.update()},update:function(){this.thumbs.swiper&&this.thumbs.update()},resize:function(){this.thumbs.swiper&&this.thumbs.update()},observerUpdate:function(){this.thumbs.swiper&&this.thumbs.update()},setTransition:function(e){var t=this.thumbs.swiper;t&&t.setTransition(e)},beforeDestroy:function(){var e=this.thumbs.swiper;e&&this.thumbs.swiperCreated&&e&&e.destroy()}}}];return void 0===W.use&&(W.use=W.Class.use,W.installModule=W.Class.installModule),W.use(we),W})); //# sourceMappingURL=swiper.min.js.map /*! * ANI-Util JavaScript Library v1.0 * * Copyright 2021. Yoon jae-ho * Released under the MIT license * * Date: 2021-02-09 */ var ANIUTIL = (function () { var calRange = function (values) { var values = { targetValue: values.targetValue, progress: values.progress, startPoint: !!!values.startPoint ? 0 : values.startPoint, endPoint: !!!values.endPoint ? 100 : values.endPoint }; if (values.startPoint > 0) { values.endPoint = values.endPoint - values.startPoint > 0 ? values.endPoint - values.startPoint : values.endPoint; } var returnValue = (values.targetValue * (values.progress - values.startPoint)) / values.endPoint; if (returnValue > values.targetValue) { returnValue = values.targetValue; } if (returnValue < 0) { returnValue = 0; } return returnValue; }; var percentToPixel = function (opts) { var targetValue = opts.targetValue, progress = opts.progress; return targetValue * (progress / 100); }; var videoObjectFit = function (opts) { var init = function (opts) { this.opts = opts; this.resizeTiming = opts.resizeTiming ? opts.resizeTiming : 100; this.setElement(); this.setVideoStyle(); this.bindEvent(); }; var fn = init.prototype; fn.setElement = function () { if (this.opts.wrapElement !== undefined) { this.wrapElement = this.opts.wrapElement.jquery ? this.opts.wrapElement[0] : this.opts.wrapElement; } if (this.opts.targetVideo !== undefined) { this.targetVideo = this.opts.targetVideo.jquery ? this.opts.targetVideo[0] : this.opts.targetVideo; } }; fn.setVideoStyle = function () { this.wrapElement.style.overflow = 'hidden'; this.targetVideo.style.position = 'absolute'; this.targetVideo.style.top = '50%'; this.targetVideo.style.left = '50%'; this.targetVideo.style.transform = 'translate(-50%, -50%)'; }; fn.bindEvent = function () { var self = this; window.addEventListener('load', function () { self.setVideoSize(); }); window.addEventListener('resize', function () { self.setVideoSize(); }); }; fn.getVideoInfo = function () { this.wrapWidth = this.wrapElement.clientWidth; this.wrapHeight = this.wrapElement.clientHeight; this.videoWidth = this.targetVideo.clientWidth; this.videoHeight = this.targetVideo.clientHeight; this.wrapRatio = this.wrapHeight / this.wrapWidth; this.videoRatio = this.videoHeight / this.videoWidth; }; fn.setVideoSize = function () { var self = this, timer = null; clearTimeout(timer); timer = setTimeout(function () { self.getVideoInfo(); if (self.wrapRatio < self.videoRatio) { self.targetVideo.style.width = '100%'; self.targetVideo.style.height = 'auto'; } else { self.targetVideo.style.width = 'auto'; self.targetVideo.style.height = '100%'; } }, this.resizeTiming); }; return new init(opts); }; var addClass = function (opts) { var classLength = opts.classList.length; for (var i = 0; i < classLength; i++) { opts.targetElement.classList.add(opts.classList[i]); } }; var removeClass = function (opts) { var classLength = opts.classList.length; for (var i = 0; i < classLength; i++) { opts.targetElement.classList.remove(opts.classList[i]); } }; var scrollController = function (opt) { var opt = opt ? opt : {}, agent = navigator.userAgent.toLowerCase(), targetElement = document.scrollingElement || document.documentElement || document.body.parentNode || document.body, speed = !!!opt.speed ? 120 : opt.speed, duration = opt.duration >= 0 ? opt.duration : 1, scrollSize = targetElement.scrollTop, maxScrollSize, frameElement = targetElement === document.body && document.documentElement ? document.documentElement : targetElement, // safari is the new IE moveState = false, scrollTiming = null; var init = function () { if (agent.indexOf('chrome') == -1 && agent.indexOf('safari') != -1) return; bindEvent.wheel(); bindEvent.scroll(); }; var bindEvent = { wheel: function () { if ((navigator.appName == 'Netscape' && navigator.userAgent.search('Trident') != -1) || agent.indexOf('msie') != -1) { document.addEventListener( 'mousewheel', function (e) { if (document.documentElement.style.overflow == 'hidden') return; eventList.scrollEvent(e); }, { passive: false } ); } else { document.addEventListener( 'wheel', function (e) { if (eventList.hasScrollBox(e.target)) return; eventList.scrollEvent(e); }, { passive: false } ); } }, scroll: function () { window.addEventListener('scroll', function () { if (document.documentElement.style.overflow == 'hidden') return; if (!moveState) { scrollSize = targetElement.scrollTop; } }); } }; var eventList = { scrollEvent: function (e) { e.preventDefault(); var fixedMoveSpeed = document.body.getAttribute('data-scroll-speed'); var delta = this.normalizeWheelDelta(e), moveSpeed = opt.currDelta && fixedMoveSpeed ? fixedMoveSpeed : !!!fixedMoveSpeed && !!!speed ? 120 : speed; scrollSize = scrollSize + -delta * moveSpeed; //현재까지 스크롤한 사이즈 maxScrollSize = Math.max(0, Math.min(scrollSize, targetElement.scrollHeight - frameElement.clientHeight)); //최대 스크롤 사이즈 this.update(); }, normalizeWheelDelta: function (e) { if (e.detail) { if (e.wheelDelta) { return (e.wheelDelta / e.detail / 40) * (e.detail > 0 ? 1 : -1); // Opera } else { return -e.detail / 3; // Firefox } } else { return e.wheelDelta / 120; // IE,Safari,Chrome } }, update: function () { var moveRange = maxScrollSize - targetElement.scrollTop, moveSize = 0 >= Math.ceil(targetElement.scrollTop + moveRange) ? 0 : scrollSize > maxScrollSize ? maxScrollSize : Math.ceil(targetElement.scrollTop + moveRange); //한번 스크롤시 이동할 거리 moveState = true; TweenMax.to(targetElement, duration, { ease: 'power1.out', scrollTop: moveSize, onComplete: function () { clearTimeout(scrollTiming); scrollTiming = null; scrollTiming = setTimeout(function () { moveState = false; scrollSize = targetElement.scrollTop; }, 500); } }); if (scrollSize <= 0) { scrollSize = 0; } else if (scrollSize >= maxScrollSize) { scrollSize = maxScrollSize; } }, hasScrollBox: function (node) { while (node && node !== document.body && node !== document) { var overflowNode = window.getComputedStyle(node)['overflow']; if (overflowNode && (overflowNode.indexOf('auto') > -1 || overflowNode.indexOf('scroll') > -1)) { return true; } node = node.parentNode; } return false; } }; var requestAnimationFrame = (function () { // requestAnimationFrame cross browser return ( window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (func) { window.setTimeout(func, 1000 / 50); } ); })(); return init(); }; var resizeScrollOffset = function (opt) { var scrollProgress = null, correctionTiming = null, resizeTiming = !!!opt ? 200 : opt + 200; var scrollElement, scrollElementHeight, winScrollTop, scrollProgress; var init = function () { bindEvent(); }; var getScrollProgerss = function () { if (scrollProgress == null) { scrollElement = document.scrollingElement || document.documentElement || document.body.parentNode || document.body; scrollElementHeight = document.body.clientHeight; winScrollTop = window.pageYOffset + scrollElement.clientHeight; scrollProgress = winScrollTop / scrollElementHeight; } else { scrollElementHeight = document.body.clientHeight; } }; var setCorrScroll = function () { clearTimeout(correctionTiming); correctionTiming = setTimeout(function () { window.scrollTo(0, scrollElementHeight * scrollProgress - window.innerHeight); scrollProgress = null; }, resizeTiming); }; var bindEvent = function () { window.addEventListener('resize', function () { getScrollProgerss(); setCorrScroll(); }); }; return init(); }; var checkTouchDevice = function () { if (navigator.userAgent.indexOf('Windows') > -1 || navigator.userAgent.indexOf('Macintosh') > -1) { return false; } else if ('ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch)) { return true; } }; var checkFold = function () { var foldState; var screenRatio = screen.width / screen.height; var isFold = checkTouchDevice() && screenRatio > 0.7137 && screenRatio < 0.8 && document.getElementsByName('viewport')[0].content == 'width=768'; var isFoldLatest = checkTouchDevice() && screenRatio > 0.8 && screenRatio < 0.95 && document.getElementsByName('viewport')[0].content == 'width=768'; if (isFold) { foldState = 'isFold'; } else if (isFoldLatest) { foldState = 'isFoldLatest'; } return foldState; }; var deviceConsole = function (value, visible) { var consoleElement, consoleValueElement; if (!document.querySelector('.console-layer')) { consoleElement = document.createElement('div'); consoleElement.classList.add('console-layer'); consoleElement.setAttribute('style', 'position: fixed; left: 0; top: 0; padding: 20px; z-index:1000000000; background: #fff;'); document.querySelector('body').append(consoleElement); } if (visible == 'multi') { consoleElement = document.querySelector('.console-layer'); consoleValueElement = document.createElement('div'); consoleValueElement.classList.add('console-value'); consoleValueElement.setAttribute('style', 'border: 1px #ddd solid; float: left; padding: 10px;'); consoleElement.append(consoleValueElement); } else { if (!document.querySelector('.console-value')) { consoleValueElement = document.createElement('div'); consoleValueElement.classList.add('console-value'); consoleValueElement.setAttribute('style', 'border: 1px #ddd solid; float: left; padding: 10px;'); consoleElement.append(consoleValueElement); consoleValueElement = document.querySelector('.console-value'); } else { consoleValueElement = document.querySelector('.console-value'); } } consoleValueElement.innerHTML = value; }; var responsiveHandler = function (opts) { window.resolutionStatus = null; var isResolution, oldActiveIndex, isActiveIndex, callbackTiming = null; var windowWidth = window.innerWidth; var opts = { resolution: opts.resolution, statusName: opts.statusName || [], callback: opts.callback || [], activeTiming: !!!opts.activeTiming ? 100 : opts.activeTiming }; var checkResolution = function () { windowWidth = window.innerWidth; for (var i = 0; i < opts.resolution.length; i++) { var currentSize = opts.resolution[i], nextSize = !!!opts.resolution[i + 1] ? 0 : opts.resolution[i + 1]; if ((windowWidth <= currentSize && windowWidth > nextSize && isResolution != opts.statusName[i]) || (windowWidth <= currentSize && windowWidth > nextSize && isActiveIndex != i)) { document.documentElement.classList.remove(isResolution); isResolution = opts.statusName[i] || i; isActiveIndex = i; document.documentElement.classList.add(isResolution); } else if ((windowWidth >= opts.resolution[0] && isResolution != opts.statusName[0]) || (windowWidth >= opts.resolution[0] && !!!isActiveIndex)) { document.documentElement.classList.remove(isResolution); isResolution = opts.statusName[0] || i; isActiveIndex = i; document.documentElement.classList.add(isResolution); } } }; var activeCallbacks = function () { clearTimeout(callbackTiming); console.log(opts.activeTiming); if (oldActiveIndex == isActiveIndex) return; if (!!!opts.callback[isActiveIndex]) return; callbackTiming = setTimeout(function () { opts.callback[isActiveIndex](); callbackTiming = null; oldActiveIndex = isActiveIndex; }, opts.activeTiming); }; var bindEvent = function () { window.addEventListener('DOMContentLoaded', function () { checkResolution(); oldActiveIndex = isActiveIndex; }); window.addEventListener('resize', function () { checkResolution(); activeCallbacks(); }); }; var init = function () { bindEvent(); return this; }; return init(opts); }; return { calRange: function (values) { return calRange(values); }, videoObjectFit: function (opts) { videoObjectFit(opts); }, addClass: function (opts) { addClass(opts); }, removeClass: function (opts) { removeClass(opts); }, scrollController: function (opt) { scrollController(opt); }, resizeScrollOffset: function (opt) { resizeScrollOffset(opt); }, checkTouchDevice: checkTouchDevice, checkFold: checkFold, deviceConsole: deviceConsole, percentToPixel: percentToPixel, responsiveHandler: responsiveHandler }; })(); 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = (function () { return { isIosDevice: (function () { var isIos = /iPad|iPhone|iPod/.test(navigator.userAgent); isIos ? document.documentElement.classList.add('isIosDevice') : document.documentElement.classList.add('isNotIosDevice'); return isIos; })(), checkGlobal: (function () { var check = location.pathname.indexOf('/global/galaxy') === 0 || window.IS_CAMPAIGN === true; if (check) document.documentElement.classList.add('global'); else document.documentElement.classList.add('dotcom'); })(), checkOS: (function () { var os = navigator.appVersion.match(/(mac|win|linux)/i); os = os ? os[1].toLowerCase() : ''; document.documentElement.classList.add(os); })(), isFireFox: (function () { var check = /firefox/i.test(navigator.userAgent); if (check) document.documentElement.classList.add('firefox'); })(), isWebkit: (function () { var check = /applewebkit/i.test(navigator.userAgent); if (check) document.documentElement.classList.add('webkit'); })(), isChrome: (function () { var check = /chrome/i.test(navigator.userAgent); if (check) document.documentElement.classList.add('chrome'); })(), isOpera: (function () { var check = /opera/i.test(navigator.userAgent); if (check) document.documentElement.classList.add('opera'); })(), isIos: (function () { var check = /ip(ad|hone|od)/i.test(navigator.userAgent); if (check) document.documentElement.classList.add('ios'); })(), isCrIos: (function () { var check = /crios/i.test(navigator.userAgent); if (check) document.documentElement.classList.add('crios'); })(), isAndroid: (function () { var check = /android/i.test(navigator.userAgent); if (check) document.documentElement.classList.add('android'); })(), isSafari: (function () { var checkWebkit = /applewebkit/i.test(navigator.userAgent); var checkChrome = /chrome/i.test(navigator.userAgent); if (checkWebkit && !checkChrome) document.documentElement.classList.add('safari'); })(), isHuawei: (function () { var check = /HUAWEICLT/i.test(navigator.userAgent); if (check) document.documentElement.classList.add('huawei'); })(), isUCBrowser: (function () { var check = /UCBrowser/i.test(navigator.userAgent); if (check) document.documentElement.classList.add('ucbrowser'); })(), winSize: (function () { var isWinSafari = (function () { var appNetscape = navigator.appName === 'Netscape', appVersionMac = navigator.appVersion.indexOf('Mac') !== -1, userAgentSafari = navigator.userAgent.indexOf('Safari') !== -1, userAgentChrome = navigator.userAgent.indexOf('Chrome') !== -1; return appNetscape && !appVersionMac && userAgentSafari && !userAgentChrome; })(); if (isWinSafari) { return function () { var win_wh = { w: $(win).width(), h: $(win).height() }; return win_wh; }; } else { return function () { var win_wh = { w: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, h: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight }; return win_wh; }; } })(), requestAFrame: (function () { return ( window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) { return window.setTimeout(callback, 1000 / 60); } ); })(), cancelAFrame: (function () { return ( window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function (id) { window.clearTimeout(id); } ); })(), isObject: function (o) { return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object; }, def: function () { var args = [], len$1 = arguments.length; while (len$1--) args[len$1] = arguments[len$1]; var to = Object(args[0]); for (var i = 1; i < args.length; i += 1) { var nextSource = args[i]; if (nextSource !== undefined && nextSource !== null) { var keysArray = Object.keys(Object(nextSource)); for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { var nextKey = keysArray[nextIndex]; var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); if (desc !== undefined && desc.enumerable) { if (this.isObject(to[nextKey]) && this.isObject(nextSource[nextKey])) { this.def(to[nextKey], nextSource[nextKey]); } else if (!this.isObject(to[nextKey]) && this.isObject(nextSource[nextKey])) { to[nextKey] = {}; this.def(to[nextKey], nextSource[nextKey]); } else { to[nextKey] = nextSource[nextKey]; } } } } } return to; }, convertArray: function (nodeList) { return Array.prototype.slice.call(nodeList); }, getOffset: function (element) { var top = element.getBoundingClientRect().top + window.pageYOffset, bottom = element.getBoundingClientRect().bottom + window.pageYOffset; return { top: top, bottom: bottom }; }, getScroll: function () { var top = window.pageYOffset, bottom = top + window.innerHeight; return { top: top, bottom: bottom }; }, getViewPort: function () { var doc = window; var pre = 'inner'; if (!('innerWidth' in window)) { pre = 'client'; doc = document.documentElement || document.body; } return { width: doc[pre + 'Width'], height: doc[pre + 'Height'] }; }, getCurrentDevice: function () { var device = 'desktop'; var width = UTILS.getViewPort().width; if (width >= 1024) { device = 'desktop'; } else if (width < 1024 && width >= 768) { device = 'tablet'; } else { device = 'mobile'; } return device; }, isInVerticalViewPort: function (el) { var rect = el.getBoundingClientRect(); return rect.top - 200 <= UTILS.getViewPort().height && rect.bottom >= 0; }, isInHorizontalViewPort: function (el) { var rect = el.getBoundingClientRect(); return rect.left - 200 <= UTILS.getViewPort().width && rect.right + 200 >= 0; }, isVerticalVisible: function (el) { return UTILS.isInVerticalViewPort(el) && !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length); }, isHorizontalVisible: function (el) { return UTILS.isInHorizontalViewPort(el) && !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length); }, setCookie: function (name, value, day) { var date = new Date(); date.setTime(date.getTime() + day * 60 * 60 * 24 * 1000); document.cookie = name + '=' + value + '; exprires=' + date.toUTCString() + '; path=/'; }, getCookie: function (name) { var value = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); return value ? value[2] : null; }, triggerEvent: function (el, eventName, detail, bubbles, cancelable) { var _detail = !!detail ? detail : null; var _bubbles = !!bubbles ? bubbles : false; var _cancelable = !!cancelable ? cancelable : true; var event; if (_detail == null) { event = document.createEvent('HTMLEvents'); event.initEvent(eventName, _bubbles, _cancelable); } else { event = document.createEvent('CustomEvent'); event.initCustomEvent(eventName, _bubbles, _cancelable, _detail); } el.dispatchEvent(event); }, visibleScroll: function () { if (document.documentElement.classList.contains('isTouchDevice')) return; if (this.scrollFlag === true) { this.scrollFlag = false; document.body.style.position = ''; document.body.style.width = ''; document.body.style.top = ''; document.body.style.boxSizing = ''; document.body.style.paddingRight = ''; document.documentElement.style.overflow = ''; if (this.popupEl !== null) { this.popupEl.style.paddingRight = ''; this.popupEl = null; } window.scrollTo(0, this.currentPos); } }, hiddenScroll: function (popupEl) { if (document.documentElement.classList.contains('isTouchDevice')) return; this.popupEl = !!popupEl ? popupEl : null; this.scrollFlag = true; this.currentPos = window.pageYOffset || document.documentElement.scrollTop; var scrollBarWidth = window.innerWidth - document.documentElement.clientWidth; var fixedPos; if (this.currentPos > 0) { fixedPos = '-' + this.currentPos + 'px'; } else { fixedPos = 0; } document.body.style.position = 'fixed'; document.body.style.width = '100%'; document.body.style.top = fixedPos; document.body.style.boxSizing = 'border-box'; document.body.style.paddingRight = scrollBarWidth + 'px'; document.documentElement.style.overflow = 'hidden'; if (this.popupEl !== null) { this.popupEl.style.paddingRight = scrollBarWidth + 'px'; } }, closest: function (el, selector) { do { if (el == document.documentElement) return null; if (el.matches ? el.matches(selector) : el.msMatchesSelector(selector)) return el; el = el.parentElement || el.parentNode; } while (el !== null || el.nodeType === 1); return null; }, onPopupAccessibility: function (el) { el.setAttribute('aria-hidden', true); el.setAttribute('tabindex', -1); var clickable = el.querySelectorAll('a, button, input, select, iframe'); for (var i = 0; i < clickable.length; i++) { var currAria = clickable[i].getAttribute('aria-hidden'); var currTab = clickable[i].getAttribute('tabindex'); if (currAria != null && clickable[i].getAttribute('data-prev-aria-hidden') == null) clickable[i].setAttribute('data-prev-aria-hidden', currAria); if (currTab != null && clickable[i].getAttribute('data-prev-tabindex') == null) clickable[i].setAttribute('data-prev-tabindex', currTab); clickable[i].setAttribute('tabindex', -1); clickable[i].setAttribute('aria-hidden', true); } }, offPopupAccessibility: function (el) { el.removeAttribute('aria-hidden'); el.removeAttribute('tabindex'); var clickable = el.querySelectorAll('a, button, input, select, iframe'); for (var i = 0; i < clickable.length; i++) { var prevAria = clickable[i].getAttribute('data-prev-aria-hidden'); var prevTab = clickable[i].getAttribute('data-prev-tabindex'); if (prevAria != null) clickable[i].setAttribute('aria-hidden', prevAria); else clickable[i].removeAttribute('aria-hidden'); if (prevTab != null) clickable[i].setAttribute('tabindex', prevTab); else clickable[i].removeAttribute('tabindex'); clickable[i].removeAttribute('data-prev-aria-hidden'); clickable[i].removeAttribute('data-prev-tabindex'); } }, onAccessibility: function (el) { if (!document.documentElement.classList.contains('is-layer-popup-opened')) { el.setAttribute('aria-hidden', true); el.setAttribute('tabindex', -1); var clickable = el.querySelectorAll('a, button, input, select, iframe'); for (var i = 0; i < clickable.length; i++) { clickable[i].setAttribute('tabindex', -1); clickable[i].setAttribute('aria-hidden', true); } } }, offAccessibility: function (el) { if (!document.documentElement.classList.contains('is-layer-popup-opened')) { el.removeAttribute('aria-hidden'); el.removeAttribute('tabindex'); var clickable = el.querySelectorAll('a, button, input, select, iframe'); for (var i = 0; i < clickable.length; i++) { clickable[i].removeAttribute('tabindex'); clickable[i].removeAttribute('aria-hidden'); } } }, extend: function (de, add) { Object.keys(add).forEach(function (key) { de[key] = add[key]; }); return de; }, getHeight: function (target) { if (!!target) { var targetStyle = window.getComputedStyle(target); var targetDisplay = targetStyle.display; var targetMaxHeight = parseInt(targetStyle.maxHeight); var returnHeight = 0; if (targetDisplay != 'none' && targetMaxHeight != 0) { return target.offsetHeight; } target.style.position = 'absolute'; target.style.visibility = 'hidden'; target.style.display = 'block'; returnHeight = target.offsetHeight; target.style.display = ''; target.style.position = ''; target.style.visibility = ''; return returnHeight; } return 0; }, setLastActiveItem: function (target) { if (!!target) { this.lastActiveItem = target; } else { this.lastActiveItem = null; } }, getLastActiveItem: function () { if (this.lastActiveItem != null) { return this.lastActiveItem; } else { return null; } }, isRTL: function () { return document.documentElement.classList.contains('rtl'); }, checkRegion: function () { var metas = document.getElementsByTagName('meta'); var region = ''; for (var i = 0; i < metas.length; i++) { if (metas[i].getAttribute('name') == 'sitecode') { region = metas[i].getAttribute('content'); return region; } } if (region == '') return document.location.pathname.indexOf('global') > -1 ? 'global' : 'jp'; }, isLowNetwork: function () { var cookie = '___GALAXY_SPEED'; if (UTILS.getCookie(cookie) == null || UTILS.getCookie(cookie) == undefined) return false; else if (UTILS.getCookie(cookie) == 'L') return true; else if (UTILS.getCookie(cookie) == 'H') return false; }, getQueryString: function (key) { var str = location.href; var index = str.indexOf('?') + 1; var lastIndex = str.indexOf('#') > -1 ? str.indexOf('#') + 1 : str.length; if (index == 0) return ''; str = str.substring(index, lastIndex); str = str.split('&'); var result = ''; for (var i = 0; i < str.length; i++) { var arr = str[i].split('='); if (arr.length != 2) break; if (arr[0] == key) result = arr[1]; break; } return result; }, customParallax: function (opts) { var mode = opts.mode ? opts.mode : 'center'; var delay = opts.delay ? opts.delay : 0; var ease = opts.ease ? opts.ease : 'Power0.easeNone'; var transZ = opts.transZ ? opts.transZ : 0; var duration = opts.duration ? opts.duration : 0.3; var distance = opts.distance ? opts.distance : 0; var correction = opts.correction ? opts.correction : 0; var windowCorrection = opts.windowCorrection ? window.innerHeight * opts.windowCorrection : 0; var direction = opts.direction ? opts.direction : 1; var activeElement = opts.activeElement; var targetElement = opts.targetElement ? opts.targetElement : activeElement; var wrapperElement = opts.wrapperElement ? opts.wrapperElement : activeElement; var unit = opts.unit ? opts.unit : 'px'; var winScrollTop = window.pageYOffset; var winScrollBottom = window.pageYOffset + window.innerHeight; var elementRect = activeElement.getBoundingClientRect(); var elementOffsetTop = winScrollTop + wrapperElement.getBoundingClientRect().top; var elementOffsetBottom = elementOffsetTop + wrapperElement.getBoundingClientRect().height; var trackHeight = window.innerHeight + elementRect.height + windowCorrection * 2; var elementOffsetY = mode == 'center' ? elementRect.top - (window.innerHeight - elementRect.height) / 2 : elementRect.top - window.innerHeight; if (unit == 'px') distance = (elementRect.height * distance) / 100; var percent = correction + ((elementOffsetY * (mode == 'center' ? distance * 2 : distance)) / trackHeight) * direction; if (elementOffsetTop <= winScrollBottom + windowCorrection && elementOffsetBottom >= winScrollTop - windowCorrection) { TweenMax.to(targetElement, duration, { y: percent + unit, z: transZ, ease: ease, delay: delay }); } }, getNavHeight: function () { var navHeight = 0; var navigation = document.querySelector('.pd-g-header-navigation') || document.querySelector('#subnav') || document.querySelector('.sticky-menu') || document.querySelector('.pd-g-floating-nav'); if (!!navigation) { if (navigation.classList.contains('pd-g-header-navigation')) { var headerNav = navigation.querySelector('.pd-header-navigation'); var menuWrap = headerNav.querySelector('.pd-header-navigation__menu-wrap'); navHeight = headerNav.clientHeight + menuWrap.clientHeight; } else { navHeight = navigation.clientHeight; } } return navHeight; }, isBrokenFixed: function () { var winWidth = window.innerWidth; var winHeight = window.innerHeight; var brokenFixed = false; document.documentElement.classList.remove('is-broken-fixed'); if (winWidth >= 1440 && winHeight <= 540) { document.documentElement.classList.add('is-broken-fixed'); brokenFixed = true; } else if (winWidth <= 810 && winHeight / winWidth < 0.5277) { document.documentElement.classList.add('is-broken-fixed'); brokenFixed = true; } else if (winWidth / window.outerWidth < 0.4) { document.documentElement.classList.add('is-broken-fixed'); brokenFixed = true; } else if (winHeight < UTILS.MIN_VIEW_HEIGHT) { document.documentElement.classList.add('is-broken-fixed'); brokenFixed = true; } else { document.documentElement.classList.remove('is-broken-fixed'); } return brokenFixed; }, isFullAnimationBrokenFixed: () => { const winWidth = window.innerWidth; const winHeight = window.innerHeight; const mobileLandscapeMode = !!UTILS.isTouchDevice && window.matchMedia('(orientation: landscape)').matches; const mobilePortraitMode = !!UTILS.isTouchDevice && !window.matchMedia('(orientation: landscape)').matches; let brokenFixed = false; if (mobilePortraitMode && winHeight / winWidth < 1.5) { document.documentElement.classList.add('is-animation-broken-fixed'); brokenFixed = true; } else if (mobileLandscapeMode) { document.documentElement.classList.add('is-animation-broken-fixed'); brokenFixed = true; } else if (winHeight < 700) { document.documentElement.classList.add('is-animation-broken-fixed'); brokenFixed = true; } else { document.documentElement.classList.remove('is-animation-broken-fixed'); } // if (winHeight - winWidth >= 0 && winHeight - winWidth < 300) { // document.documentElement.classList.add('is-animation-broken-fixed'); // brokenFixed = true; // } else if (winHeight < UTILS.MIN_VIEW_HEIGHT) { // document.documentElement.classList.add('is-animation-broken-fixed'); // brokenFixed = true; // } else { // document.documentElement.classList.remove('is-animation-broken-fixed'); // } return brokenFixed }, isTouchDevice: (function () { var checkDevice = 'ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch); checkDevice ? document.documentElement.classList.add('isTouchDevice') : document.documentElement.classList.add('isNotTouchDevice'); return checkDevice; })(), isIEorEdge: (function () { var word; var agent = navigator.userAgent.toLowerCase(); if (navigator.appName == 'Microsoft Internet Explorer') { word = 'msie '; } else if (agent.search('trident') > -1) { word = 'trident/.*rv:'; } else if (agent.search('edge/') > -1) { word = 'edge/'; } else { return -1; } var reg = new RegExp(word + '([0-9]{1,})(\\.{0,}[0-9]{0,1})'); if (reg.exec(agent) != null) { document.documentElement.classList.add('isIEorEdge'); return parseFloat(RegExp.$1 + RegExp.$2); } return -1; })(), page: { scrollLock: { className: 'is-no-scroll', barWidth: function () { return window.innerWidth - document.documentElement.clientWidth; }, el: (function () { return $('html'); })(), run: function (w) { document.documentElement.style.paddingRight = w + 'px'; }, off: function () { var barWidth = this.barWidth(); this.el.removeClass(this.className); // NOTE : standard pd 템플릿 대응 this.el.removeClass('hive-layer-scroll-lock'); this.run(0); // const bodyEl = document.querySelector('body'); // bodyEl.style.position = null; // bodyEl.style.top = null; // bodyEl.style.width = null; // window.scrollTo(0, this.scrollEnd) }, on: function () { var barWidth = this.barWidth(); this.el.addClass(this.className); this.run(barWidth); // const bodyEl = document.querySelector('body'); // const scrollStart = window.pageYOffset || document.documentElement.scrollTop; // bodyEl.style.position = 'fixed'; // bodyEl.style.top = -scrollStart + 'px'; // bodyEl.style.width = '100%'; // this.scrollEnd = scrollStart <= 0 ? 0 : scrollStart; } } }, MIN_VIEW_HEIGHT: 400, RESPONSIVE: { PC: { NAME: 'pc', WIDTH: 1440 }, TABLET: { NAME: 'tablet', WIDTH: 1024 }, MOBILE: { NAME: 'mobile', WIDTH: 767 } } }; })(); WATCH6.UTILS = UTILS; /*! * Scrolle JavaScript Library v1.0.4 * * Copyright 2021. Yoon jae-ho * Released under the MIT license * * Date: 2021-02-09 */ 'use strict' var SCROLLER = (function(){ var init = function(opts){ this.initialize = true; this.opts = opts; this.correction = !!!opts.correction ? 0 : opts.correction; this.removeCorrection = !!!opts.removeCorrection ? 0 : opts.removeCorrection; this.trackHeight = !!!opts.trackHeight ? 0 : opts.trackHeight; this.activeClass = opts.activeClass; this.activeCallbackClass = !!!opts.activeCallbackClass ? 'callback-active' : opts.activeCallbackClass; this.useStrictMode = opts.useStrictMode == undefined ? true : opts.useStrictMode; this.useFixed = !!!opts.useFixed ? false : opts.useFixed; this.useFixedStyle = opts.useFixedStyle == undefined ? true : opts.useFixedStyle; this.useSticky = !!!opts.useSticky ? false : opts.useSticky; this.useStickyStyle = opts.useStickyStyle == undefined ? true : opts.useStickyStyle; this.useViewportOver = !!!opts.useViewportOver ? true : opts.useViewportOver; this.activeVisibility = !!!opts.activeVisibility ? 'before' : opts.activeVisibility; this.activeType = !!!opts.activeType ? 'reverse' : this.opts.activeType; this.autoHeight = opts.autoHeight == undefined ? true : opts.autoHeight; this.offsetY = !!!opts.offsetY ? 0 : opts.offsetY; this.resize = opts.resize == undefined ? true : opts.resize; this.resizeTiming = opts.resizeTiming == undefined ? false : opts.resizeTiming; this.windowHeight = window.innerHeight; this.oldPregress = 0; this.oldWinScrollTop = 0; this.elementInformation = {}; this.isFixedArea = false; this.checkTouchDevice = false; this.elementEventList.setElement.call(this); this.bindEvent(); }; var fn = init.prototype; fn.bindEvent = function(){ var self = this; var setTimeing = null; this.elementHandler(); if (this.resize){ this.addEventList = function(){ if (!self.resizeTiming){ self.windowHeight = window.innerHeight; self.elementHandler(); } else { clearTimeout(setTimeing); setTimeing = setTimeout(function(){ self.windowHeight = window.innerHeight; self.elementHandler(); }, self.resizeTiming); } }; window.addEventListener('resize', this.addEventList); } if (this.opts.IEScroll){ this.utilList.IEScrollHandler.call(this); } }; fn.elementHandler = function(){ this.elementEventList.setTrackStyle.call(this); this.getFixedState(); if (this.trackHeight > 1){ this.elementEventList.setTrackHeigh.call(this); } if (!this.useSticky && this.useFixed && this.useFixedStyle){ this.elementEventList.setFixedStyle.call(this); } if (this.useSticky && !this.useFixed && this.useStickyStyle){ this.elementEventList.setStickyStyle.call(this); } return this; }; fn.utilList = { checkTouchDevice: function() { if (navigator.userAgent.indexOf('Windows') > -1 || navigator.userAgent.indexOf('Macintosh') > -1) { return this.checkTouchDevice = false; } else if ('ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch)) { return this.checkTouchDevice = true; } }, IEScrollHandler: function(){ if (navigator.userAgent.match(/Trident\/7\./)){ this.body.addEventListener('mousewheel', function(e){ e.preventDefault(); var wheelDelta = e.wheelDelta, currentScrollPosition = window.pageYOffset; window.scrollTo(0, currentScrollPosition - wheelDelta); }); this.body.addEventListener('keydown', function(e){ var currentScrollPosition = window.pageYOffset; switch (e.which){ case 38: e.preventDefault(); window.scrollTo(0, currentScrollPosition - 40); break; case 40: e.preventDefault(); window.scrollTo(0, currentScrollPosition + 40); break; default: return; } }); } }, getScroll: function(){ var top = window.pageYOffset, bottom = top + this.windowHeight; return { top: top, bottom: bottom }; }, getOffset: function(element){ var top = element.getBoundingClientRect().top + window.pageYOffset, bottom = element.getBoundingClientRect().bottom + window.pageYOffset; return { top: top, bottom: bottom }; }, getUserAgent: function(){ return navigator.userAgent; } }; fn.elementEventList = { setElement: function(){ this.body = document.querySelector('body'); if (this.opts.trackElement !== undefined){ this.trackElement = this.opts.trackElement.jquery ? this.opts.trackElement[0] : this.opts.trackElement; } if (this.opts.fixedElement !== undefined){ this.fixedElement = this.opts.fixedElement.jquery ? this.opts.fixedElement[0] : this.opts.fixedElement; } if (this.opts.activeElement !== undefined){ this.activeElement = this.opts.activeElement.jquery ? this.opts.activeElement[0] : this.opts.activeElement; } }, setTrackHeigh: function(){ if (this.trackHeight <= 1) return; this.trackElement.style.height = ''; var checkTrackHeight = this.trackElement.clientHeight == 0; var isTrackHeight = this.windowHeight; var calTrackHeight = isTrackHeight * this.trackHeight; if (checkTrackHeight){ this.trackElement.style.height = this.windowHeight + 'px'; } this.trackElement.style.height = calTrackHeight + 'px'; }, setTrackStyle: function(){ if (!!!this.trackElement) return; if (this.useFixed && window.getComputedStyle(this.trackElement).position == 'static'){ this.trackElement.style.position = 'relative'; } }, setFixedStyle: function(){ if (!this.isFixedArea) { this.fixedElement.style.height = ''; this.fixedElement.style.top = ''; this.fixedElement.style.position = 'absolute'; } if (this.fixedElement.clientWidth == 0){ this.fixedElement.style.width = '100%'; } if (this.autoHeight) { if (typeof this.offsetY == 'string'){ this.fixedElement.style.height = 'calc(' + this.windowHeight + 'px - ' + this.offsetY + ')'; this.fixedElement.style.top = this.offsetY; } else { this.fixedElement.style.height = (this.windowHeight - this.offsetY) + 'px'; this.fixedElement.style.top = this.offsetY + 'px'; } } }, setStickyStyle: function(){ if (!this.isFixedArea) { this.fixedElement.style.position = 'sticky'; } if (this.fixedElement.clientWidth == 0){ this.fixedElement.style.width = '100%'; } }, setFixedElement: function(){ this.diffHeight = this.windowHeight - this.fixedElement.clientHeight; this.trackTopOffset = this.utilList.getOffset.call(this, this.trackElement).top; this.trackBottomOffset = this.utilList.getOffset.call(this, this.trackElement).bottom; if (this.winScrollTop <= this.trackTopOffset){ this.fixedElement.style.position = 'absolute'; if (typeof this.offsetY == 'string'){ this.fixedElement.style.top = this.offsetY; } else { this.fixedElement.style.top = this.offsetY + 'px'; } this.fixedElement.style.bottom = ''; } else if (this.winScrollBottom >= this.trackBottomOffset){ this.fixedElement.style.position = 'absolute'; this.fixedElement.style.top = this.trackElement.clientHeight - this.fixedElement.clientHeight + 'px'; } else { if (!this.isFixedArea) { this.fixedElement.style.position = 'fixed'; this.fixedElement.style.top = '0'; } }; }, }; fn.getWheelDirection = function(){ if (this.winScrollTop >= this.oldWinScrollTop){ this.wheelDirection = 'down'; } else { this.wheelDirection = 'up'; } this.oldWinScrollTop = this.winScrollTop; }; fn.getProgress = function(){ var trackTopOffset = this.utilList.getOffset.call(this, this.trackElement).top - (this.windowHeight * this.correction), trackHeight = this.useFixed || this.useSticky ? Math.abs(this.trackElement.clientHeight - this.windowHeight) : this.useViewportOver ? this.trackElement.clientHeight + this.windowHeight : this.trackElement.clientHeight, scrollTop = this.winScrollTop - trackTopOffset, scrollBottom = this.winScrollBottom - trackTopOffset, calProgress = this.useFixed || this.useSticky ? scrollTop / trackHeight * 100 : scrollBottom / trackHeight * 100; if (this.useStrictMode){ this.progress = Math.floor(calProgress) < 0 ? 0 : Math.floor(calProgress) > 100 ? 100 : Math.floor(calProgress); } else { this.progress = calProgress; }; this.getWheelDirection(); return this.progress; }; fn.getFixedState = function(){ if(this.progress > 0 && this.progress < 100) { this.isFixedArea = true; } else { this.isFixedArea = false; } }; fn.trackAnimation = function(callback){ if (!this.initialize) return; this.winScrollTop = this.utilList.getScroll.call(this).top - (this.windowHeight * this.correction); this.winScrollBottom = this.utilList.getScroll.call(this).bottom; if (this.useFixed && !this.useSticky){ this.elementEventList.setFixedElement.call(this); }; this.getProgress(); this.getFixedState(); if (callback){ if (this.oldPregress !== this.progress){ callback.call(this); }; this.oldPregress = this.progress; }; }; fn.activeAnimation = function(){ if (!this.initialize) return; this.winScrollTop = this.utilList.getScroll.call(this).top; this.winScrollBottom = this.utilList.getScroll.call(this).bottom; this.trackElementHeight = this.trackElement.clientHeight; this.correctionValue = this.trackElementHeight * this.correction; this.removeCorrectionValue = this.trackElementHeight * this.removeCorrection; this.elementOffsetTop = this.utilList.getOffset.call(this, this.trackElement).top; this.elementOffsetBottom = this.utilList.getOffset.call(this, this.trackElement).bottom; this.downScrollTop = this.winScrollTop - this.correctionValue; this.downScrollBottom = this.winScrollBottom - this.correctionValue; this.upScrollTop = this.winScrollTop + this.correctionValue; this.upScrollBottom = this.winScrollBottom + this.correctionValue; var self = this; var visibleType = this.activeVisibility, removeType = this.activeType, corrHeight = this.windowHeight / 2; var addActiveClass = function(){ if (!!!self.activeClass) return; if (typeof self.activeClass == 'object'){ var classLength = self.activeClass.length; for (var i = 0; i < classLength; i++){ if (!self.activeElement.classList.contains(self.activeClass[i])){ self.activeElement.classList.add(self.activeClass[i]); } } } else { if (!self.activeElement.classList.contains(self.activeClass)){ self.activeElement.classList.add(self.activeClass); } } }; var removeActiveClass = function(){ if (typeof self.activeClass == 'object'){ var classLength = self.activeClass.length; for (var i = 0; i < classLength; i++){ if (self.activeElement.classList.contains(self.activeClass[i])){ self.activeElement.classList.remove(self.activeClass[i]); } } } else { if (self.activeElement.classList.contains(self.activeClass)){ self.activeElement.classList.remove(self.activeClass); } } if (self.activeElement.classList.contains(self.activeCallbackClass)){ self.activeElement.classList.remove(self.activeCallbackClass); } }; var activeCallback = function(){ if (!self.activeElement.classList.contains(self.activeCallbackClass)){ if (!!!self.opts.activeCallback) return; self.opts.activeCallback.call(self); self.activeElement.classList.add(self.activeCallbackClass); } }; var endCallback = function(){ if (self.activeElement.classList.contains(self.activeCallbackClass)){ if (!!!self.opts.endCallback) return; self.opts.endCallback.call(self); } }; var activeHandler = function(){ activeCallback(); addActiveClass(); }; var removeHandler = function(){ endCallback(); removeActiveClass(); }; this.getWheelDirection(); switch (visibleType){ case 'before': if (this.wheelDirection == 'down' && this.downScrollBottom >= this.elementOffsetTop && this.downScrollTop <= this.elementOffsetTop || this.wheelDirection == 'up' && this.upScrollTop <= this.elementOffsetBottom && this.upScrollBottom >= this.elementOffsetBottom || this.activeType == 'oneWay' && this.downScrollBottom >= this.elementOffsetTop){ activeHandler(); this.activeStatus = true; } break; case 'visible': if (this.wheelDirection == 'down' && this.downScrollBottom >= this.elementOffsetTop + corrHeight && this.downScrollTop <= this.elementOffsetTop || this.wheelDirection == 'up' && this.upScrollTop <= this.elementOffsetBottom - corrHeight && this.upScrollBottom >= this.elementOffsetBottom || this.activeType == 'oneWay' && this.downScrollBottom >= this.elementOffsetTop + corrHeight){ activeHandler(); this.activeStatus = true; } break; } switch (removeType){ case 'reverse': if (visibleType == 'visible'){ if (this.activeStatus && this.wheelDirection == 'down' && this.winScrollTop > this.elementOffsetBottom || this.activeStatus && this.wheelDirection == 'up' && this.winScrollBottom < this.elementOffsetTop){ removeHandler(); this.activeStatus = false; } } else { if (this.activeStatus && this.winScrollTop < this.elementOffsetTop && this.winScrollBottom < this.elementOffsetTop || this.activeStatus && this.winScrollTop > this.elementOffsetBottom && this.winScrollBottom > this.elementOffsetBottom){ removeHandler(); this.activeStatus = false; } } break; case 'oneWay': if (visibleType == 'visible'){ if (this.activeStatus && this.winScrollBottom < this.elementOffsetTop + corrHeight){ removeHandler(); this.activeStatus = false; } } else { if (this.activeStatus && this.winScrollTop < this.elementOffsetTop && this.winScrollBottom < this.elementOffsetTop){ removeHandler(); this.activeStatus = false; } } break; } }; //TO-DO: 네이밍 변경 fn.getElementInformation = function(){ if (this.trackElement){ this.elementInformation.trackElement = { element: this.trackElement, width: this.trackElement.clientWidth, height: this.trackElement.clientHeight, topOffset: this.utilList.getOffset.call(this, this.trackElement).top, bottomOffset: this.utilList.getOffset.call(this, this.trackElement).bottom } }; if (this.activeElement){ this.elementInformation.activeElement = { element: this.activeElement, width: this.activeElement.clientWidth, height: this.activeElement.clientHeight, topOffset: this.utilList.getOffset.call(this, this.activeElement).top, bottomOffset: this.utilList.getOffset.call(this, this.activeElement).bottom } }; return this.elementInformation; } fn.destroy = function(e){ if (!!this.trackElement){ this.trackElement.style.position = ''; this.trackElement.style.height = ''; } if (!!this.fixedElement){ this.fixedElement.style.position = ''; this.fixedElement.style.top = ''; this.fixedElement.style.height = ''; } this.trackElement = ''; this.fixedElement = ''; this.activeElement = ''; this.correction = ''; this.trackHeight = ''; this.activeCallbackClass = ''; this.useFixed = ''; this.activeVisibility = ''; this.activeType = ''; this.offsetY = ''; this.resize = ''; this.windowHeight = ''; this.elementInformation = ''; window.removeEventListener('load', this.addEventList); window.removeEventListener('resize', this.addEventList); this.initialize = false; }; return function(opts){ return new init(opts); }; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; class ImageLoader { constructor(el = container, args) { const defParams = { el: el, lazyClass: '.js-img-src', lazyCompleteClass: 'load-complete', startLazyClass: args.startLazyClass || '.js-start-img-src', endLazyClass: args.endLazyClass || '.js-end-img-src', responsiveClass: args.responsiveClass || '.js-res-img', loadOption: args.loadOption, visiblePoint: !!!args.visiblePoint ? 0 : args.visiblePoint, useDefaultImg: args.useDefaultImg, resizeStart: null }; this.opts = defParams; this.classes = defParams.classes; this.el = document.querySelector(el); this.init(); } init() { this.initOpts(); this.getLazyImage(); this.getResponsiveImage(); this.bindEvents(); } initOpts() { this.targetAttr = this.opts.loadOption[0].attribute; this.responsiveCheck = this.opts.loadOption; this.dynamicCallCount = 0; this.dynamicLoadedComplate = false; if (this.opts.useDefaultImg) { this.setDefaultImage(); } } getLazyImage() { const lazyImageList = Array.from(this.el.querySelectorAll(this.opts.lazyClass)); const dynamicLazyImageList = Array.from(this.el.querySelectorAll(this.opts.startLazyClass)); const lazyImageAllList = lazyImageList.concat(dynamicLazyImageList); this.lazyImages = lazyImageAllList; this.lazyLength = lazyImageAllList.length; } getResponsiveImage() { const responsiveImageList = this.el.querySelectorAll(this.opts.responsiveClass); this.responsiveImages = responsiveImageList; this.responsiveLength = responsiveImageList.length; } bindEvents() { window.addEventListener('load', this.onLoadHandler.bind(this)); window.addEventListener('scroll', this.lazyEvent.bind(this)); if (this.responsiveCheck) { window.addEventListener('resize', this.onResizeHandler.bind(this)); } } onLoadHandler() { this.responsiveHandler(); this.lazyEvent(); } onResizeHandler() { clearTimeout(this.opts.resizeStart); this.opts.resizeStart = setTimeout(() => { this.responsiveHandler(); this.lazyEvent(); }, 80); } lazyEvent() { this.setLazyImage(); if (this.lazyLength === this.lazyCompleteLength) { window.removeEventListener('scroll', this.lazyEvent.bind(this)); } } responsiveHandler() { this.windowWidth = window.innerWidth; let resolutionLength = this.opts.loadOption.length; for (let i = 0; i < resolutionLength; i++) { let nextIndex = i + 1, nextPoint = nextIndex == resolutionLength ? 0 : this.opts.loadOption[nextIndex].resolution, checkPoint = false; if (i == 0) { checkPoint = this.windowWidth > nextPoint; } else { checkPoint = this.windowWidth <= this.opts.loadOption[i].resolution && this.windowWidth > nextPoint; } if (checkPoint) { if (this.opts.loadOption[i].attribute !== this.oldAttr) { this.targetAttr = this.opts.loadOption[i].attribute; this.oldAttr = this.targetAttr; this.attrIndex = i; this.dynamicCallCount = 0; this.setResponsiveImage(); } } } } setResponsiveImage(imageTarget) { if (imageTarget) { for (let i = 0; i < imageTarget.length; i++) { let targetImage = imageTarget[i]; let imgSrc = imageTarget[i].getAttribute(this.targetAttr); if (!!!imgSrc) { imgSrc = this.findImageHandler(targetImage); } if (!imageTarget[i].classList.contains(this.opts.lazyCompleteClass)) { imageTarget[i].setAttribute('src', imgSrc); imageTarget[i].classList.add(this.opts.lazyCompleteClass); } } } else { for (let i = 0; i < this.responsiveLength; i++) { let targetImage = this.responsiveImages[i]; let imgSrc = targetImage.getAttribute(this.targetAttr); if (!!!imgSrc) { imgSrc = this.findImageHandler(targetImage); } if (targetImage.classList.contains(this.opts.lazyCompleteClass)) { targetImage.setAttribute('src', imgSrc); } } } } checkCompleteImage() { let lazyCompleteList = this.el.querySelectorAll('.' + this.opts.lazyCompleteClass); this.lazyCompleteLength = lazyCompleteList.length; } setDefaultImage() { for (var i = 0; i < this.lazyLength; i++) { this.lazyImages[i].setAttribute('src', 'data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH/C1hNUCBEYXRhWE1QAz94cAAh+QQFAAAAACwAAAAAAQABAAACAkQBADs='); } } setLazyImage() { this.windowHeight = window.innerHeight; for (let i = 0; i < this.lazyLength; i++) { let targetElement = this.lazyImages[i], corrHeight = this.windowHeight * this.opts.visiblePoint, scrollTop = UTILS.getScroll.call(this).top - corrHeight, scrollBottom = UTILS.getScroll.call(this).bottom + corrHeight, targetOffsetTop = UTILS.getOffset.call(this, targetElement).top, targetOffsetBottom = UTILS.getOffset.call(this, targetElement).bottom, lazyClass = this.opts.lazyClass.split('.'), removeClass = lazyClass[lazyClass.length - 1], startLazyClass = this.opts.startLazyClass.split('.'), startRemoveClass = startLazyClass[startLazyClass.length - 1]; let isOffsetParent; if (window.getComputedStyle(targetElement).display === 'none') { const targetParent = targetElement.parentNode; if (targetParent.offsetParent != null) { isOffsetParent = targetParent.offsetParent; targetOffsetTop = UTILS.getOffset.call(this, targetParent).top; targetOffsetBottom = UTILS.getOffset.call(this, targetParent).bottom; } } else { isOffsetParent = targetElement.offsetParent; } if ( ((scrollBottom > targetOffsetTop && scrollTop <= targetOffsetTop) || (scrollTop < targetOffsetBottom && scrollBottom > targetOffsetBottom) || (scrollTop < targetOffsetTop && scrollBottom > targetOffsetBottom) || (scrollTop > targetOffsetTop && scrollBottom < targetOffsetBottom)) && isOffsetParent != null ) { let imgSrc = targetElement.getAttribute(this.targetAttr); if (!!!imgSrc) { imgSrc = this.findImageHandler(targetElement); } if (!targetElement.classList.contains(this.opts.lazyCompleteClass)) { targetElement.setAttribute('src', imgSrc); var imageLoadEvent = () => { if (this.opts.startLazyClass.split(' ').length == 1) targetElement.classList.remove(startRemoveClass); if (this.opts.lazyClass.split(' ').length == 1) targetElement.classList.remove(removeClass); // imgElement.classList.add(self.lazyCompleteClass); this.checkCompleteImage(); targetElement.removeEventListener('load', imageLoadEvent); }; targetElement.addEventListener('load', imageLoadEvent); targetElement.classList.add(this.opts.lazyCompleteClass); } } } } findRemainingImageAttr(element) { var attrLength = this.opts.loadOption.length; for (var i = 0; i < attrLength; i++) { var getAttr = element.getAttribute(this.opts.loadOption[i].attribute); if (getAttr) { return getAttr; break; } } } findNextImageAttr(element) { const isIndex = this.attrIndex; for (let i = isIndex; i >= 0; i--) { let getAttr = element.getAttribute(this.opts.loadOption[i].attribute); if (getAttr) { return getAttr; break; } if (i == 0 && getAttr == undefined) { return this.findRemainingImageAttr(element); } } } findImageHandler(element) { if (this.attrIndex !== 0) { return this.findNextImageAttr(element); } else { return this.findRemainingImageAttr(element); } } } WATCH6.ImageLoader = ImageLoader; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class VideoLoader { constructor(el = container, args) { const defParams = { el: el, lazyClass: args.lazyClass || '.js-video-src', responsiveClass: args.responsiveClass || '.js-res-video', imageLazyCompleteClass: 'load-complete', imageEndLazyClass: args.imageEndLazyClass || '.js-end-img-src', notLoadElement: args.notLoadElement || [], loadOption: args.loadOption, visiblePoint: !!!args.visiblePoint ? 0 : args.visiblePoint, resizeStart: null, classes: { loaded: 'loaded', ended: 'ended' } }; this.opts = defParams; this.classes = defParams.classes; this.el = document.querySelector(el); this.init(); } init() { this.initOpts(); this.getLazyVideo(); this.getResponsiveVideo(); this.bindEvents(); } initOpts() { this.getCurrentDevice(); const targetindex = this.currentDevice !== 'mobile' ? 0 : 1; this.prevVideoSrc = ''; this.targetAttr = this.opts.loadOption[targetindex].attribute; this.responsiveCheck = this.opts.loadOption; this.videoCallStack = []; } getLazyVideo() { let lazyVideoList = Array.from(this.el.querySelectorAll(this.opts.lazyClass)).filter((lazyVideo) => { lazyVideo.isVideoInit = false; for (let i = 0; i < this.opts.notLoadElement.length; i++) { return !lazyVideo.closest(this.opts.notLoadElement[i]); } }); lazyVideoList = lazyVideoList.filter((lazyVideo) => { if (lazyVideo.querySelector('video')) { return lazyVideo; } }); this.lazyVideos = lazyVideoList; this.lazyLength = lazyVideoList.length; } getResponsiveVideo() { let responsiveVideoList = Array.from(this.el.querySelectorAll(this.opts.responsiveClass)).filter((lazyVideo) => { for (let i = 0; i < this.opts.notLoadElement.length; i++) { return !lazyVideo.closest(this.opts.notLoadElement[i]); } }); this.responsiveVideos = responsiveVideoList; this.responsiveLength = responsiveVideoList.length; } bindEvents() { window.addEventListener('load', this.onLoadHandler.bind(this)); window.addEventListener('scroll', this.lazyEvent.bind(this)); if (this.responsiveCheck) { window.addEventListener('resize', this.onResizeHandler.bind(this)); } } getCurrentDevice() { this.winWidth = UTILS.winSize().w; if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; this.prevDevice = this.currentDevice; } onLoadHandler() { this.getCurrentDevice(); this.responsiveHandler(); this.lazyEvent(); } onResizeHandler() { clearTimeout(this.opts.resizeStart); this.opts.resizeStart = setTimeout(() => { this.getCurrentDevice(); this.responsiveHandler(); this.lazyEvent(); }, 80); } lazyEvent() { this.setLazyVideo(); if (this.lazyLength === this.lazyCompleteLength) { window.removeEventListener('scroll', this.lazyEvent.bind(this)); } } responsiveHandler() { this.windowWidth = window.innerWidth; let resolutionLength = this.opts.loadOption.length; for (let i = 0; i < resolutionLength; i++) { let nextIndex = i + 1, nextPoint = nextIndex == resolutionLength ? 0 : this.opts.loadOption[nextIndex].resolution, checkPoint = false; if (i == 0) { checkPoint = this.windowWidth > nextPoint; } else { checkPoint = this.windowWidth <= this.opts.loadOption[i].resolution && this.windowWidth > nextPoint; } if (checkPoint) { if (this.opts.loadOption[i].attribute !== this.oldAttr) { this.targetAttr = this.opts.loadOption[i].attribute; this.oldAttr = this.targetAttr; this.attrIndex = i; this.setResponsiveVideo(); } } } } setResponsiveVideo() { for (let i = 0; i < this.responsiveLength; i++) { const videoElement = this.responsiveVideos[i]; const video = videoElement.querySelector('video'); const videoSrc = videoElement.getAttribute(this.targetAttr); if (videoElement.classList.contains(this.classes.loaded) && videoElement.isVideoInit) { video.querySelectorAll('source').forEach((source) => { const type = source.getAttribute('type'); if (type.indexOf('webm') > -1) source.src = videoSrc + '.webm'; if (type.indexOf('mp4') > -1) source.src = videoSrc + '.mp4'; video.load(); video.addEventListener('canplaythrough', () => { window.setTimeout(() => { videoElement.classList.add(this.classes.loaded); }, 500); this.checkCompleteVideo(); this.getEndImage(videoElement); }, { once : true }) }); } } } setLazyVideo() { for (let i = 0; i < this.lazyLength; i++) { const winOffsetTop = window.pageYOffset; const winOffsetBottom = winOffsetTop + window.innerHeight; const targetElement = this.lazyVideos[i]; const targetRect = targetElement.getBoundingClientRect(); const targetOffsetTop = winOffsetTop + targetRect.top; const targetOffsetBottom = winOffsetTop + targetRect.bottom; if (winOffsetBottom > targetOffsetTop - (window.innerHeight * (window.pageYOffset != 0 ? this.opts.visiblePoint : 0)) && winOffsetTop < targetOffsetBottom + (window.innerHeight * (window.pageYOffset != 0 ? this.opts.visiblePoint : 0)) && !targetElement.isVideoInit) { // this.setVideoControl(); // if (!UTILS.isLowNetwork()) { if (this.videoCallStack.indexOf(i) < 0) { this.videoCallStack.push(i); this.setVideoSrc(); } // } } } } setVideoSrc() { const targetIndex = this.videoCallStack[0]; const videoElement = this.lazyVideos[targetIndex]; const video = videoElement.querySelector('video'); const videoSrc = videoElement.getAttribute(this.targetAttr); const lazyClass = this.opts.lazyClass.split('.'); const removeClass = lazyClass[lazyClass.length - 1]; const currentVideoSrc = videoSrc; // console.log(this.videoCallStack); // console.log(videoElement, this.videoCallStack.length) if (this.prevVideoSrc !== currentVideoSrc) { // console.log(this.videoCallStack, videoElement, this.targetAttr) video.querySelectorAll('source').forEach((source) => { const type = source.getAttribute('type'); if (type.indexOf('webm') > -1) source.src = videoSrc + '.webm'; if (type.indexOf('mp4') > -1) source.src = videoSrc + '.mp4'; }); video.load(); video.addEventListener('canplaythrough', () => { window.setTimeout(() => { videoElement.classList.add(this.classes.loaded); // videoElement.classList.remove(this.classes.ended); }, 500); if (this.opts.lazyClass.split(' ').length == 1) videoElement.classList.remove(removeClass); this.checkCompleteVideo(); this.getEndImage(videoElement); this.videoCallStack.splice(0, 1); if (this.videoCallStack.length > 0) { this.setVideoSrc(); } }, { once: true }); videoElement.isVideoInit = true; } this.prevVideoSrc = currentVideoSrc; } getEndImage(videoElement) { const targetAttr = this.currentDevice === 'desktop' ? 'data-src-pc' : this.currentDevice === 'tablet' ? 'data-src-tablet' : 'data-src-mobile'; const endImage = videoElement.querySelector(this.opts.imageEndLazyClass); const lazyClass = this.opts.imageEndLazyClass.split('.'); const removeClass = lazyClass[lazyClass.length - 1]; if (endImage && !endImage.classList.contains(this.opts.imageLazyCompleteClass)) { endImage.src = endImage.getAttribute(targetAttr); endImage.addEventListener('load', () => { if (this.opts.imageEndLazyClass.split(' ').length == 1) endImage.classList.remove(removeClass); endImage.classList.add(this.opts.imageLazyCompleteClass); }, { once: true }) } } checkCompleteVideo() { let lazyCompleteList = Array.from(this.el.querySelectorAll('.' + this.classes.loaded)).filter((lazyVideo) => { for (let i = 0; i < this.opts.notLoadElement.length; i++) { return !lazyVideo.closest(this.opts.notLoadElement[i]); } }); this.lazyCompleteLength = lazyCompleteList.length; } } WATCH6.VideoLoader = VideoLoader; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class VideoPlayer { constructor(el, args) { const defParams = { sectionElement: args.sectionElement, videoParentElement: null, videoElement: el, videoController: '.video__controller', hiddenElement: '.blind', endImage: '.video__end-frame img', videoLazyClass: '.js-video-src', lazyCompleteClass: 'load-complete', imageEndLazyClass: '.js-end-img-src', visiblePoint: args.visiblePoint ? args.visiblePoint : 0, classes: { loaded: 'loaded', ended: 'ended', paused: 'paused', playing: 'playing', isPaused: 'is-paused' }, resizeStart: null, on: { updateController: null, updatePlayState: null } }; this.opts = UTILS.def(defParams, args || {}); this.classes = defParams.classes; this.init(); } init() { this.setElements(); this.initOpts(); if (this.video !== null) { if (!this.video.paused) { this.video.pause(); } this.videoElement.playState = false; this.updateController(); this.bindEvents(); } } setElements() { this.videoElement = this.opts.videoElement; this.video = this.videoElement.querySelector('video'); if (this.video === null) return; if (this.opts.videoParentElement !== null) { this.videoParentElement = this.video.closest(this.opts.videoParentElement); } else { this.videoParentElement = this.videoElement; } this.videoController = this.videoParentElement.querySelector(this.opts.videoController); // if (this.videoController) { // this.videoControllerText = this.videoController.querySelector(this.opts.hiddenElement); // } } initOpts() { this.getCurrentDevice(); this.autoPlay = this.videoElement.dataset.autoPlay ? JSON.parse(this.videoElement.dataset.autoPlay) : false; this.videoElement.playState = false; this.videoElement.autoPlayState = false; this.useController = this.videoController ? true : false; // if (this.useController) { // this.globalText = JSON.parse(this.videoController.dataset.globalText); // } } getCurrentDevice() { this.winWidth = UTILS.winSize().w; if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; this.prevDevice = this.currentDevice; } getEndImage() { const targetAttr = this.currentDevice === 'desktop' ? 'data-src-pc' : this.currentDevice === 'tablet' ? 'data-src-tablet' : 'data-src-mobile'; const endImage = this.videoElement.querySelector(this.opts.imageEndLazyClass); const lazyClass = this.opts.imageEndLazyClass.split('.'); const removeClass = lazyClass[lazyClass.length - 1]; if (endImage) { endImage.src = endImage.getAttribute(targetAttr); endImage.addEventListener('load', () => { if (this.opts.imageEndLazyClass.split(' ').length == 1) endImage.classList.remove(removeClass); endImage.classList.add(this.opts.lazyCompleteClass); }, { once: true }) } } bindEvents() { window.addEventListener('resize', this.onResizeHandler.bind(this)); window.addEventListener('scroll', this.onScrollHandler.bind(this)); this.video.addEventListener('canplaythrough', this.onCanplayThrough.bind(this), { once: true }); if (this.useController) { this.videoController.addEventListener('click', this.onClickController.bind(this)); } } onChange(videoElement) { if (videoElement === this.videoElement) { const targetAttr = this.currentDevice !== 'mobile' ? 'data-media-pc' : 'data-media-mo'; const videoSrc = this.videoElement.getAttribute(targetAttr); const currentVideoSrc = videoSrc; if (this.prevVideoSrc !== currentVideoSrc) { this.videoElement.playState = false; this.video.querySelectorAll('source').forEach((source) => { const type = source.getAttribute('type'); if (type.indexOf('webm') > -1) source.src = videoSrc + '.webm'; if (type.indexOf('mp4') > -1) source.src = videoSrc + '.mp4'; this.video.load(); }); this.videoElement.classList.remove(this.classes.playing); this.videoElement.classList.remove(this.classes.paused); this.video.addEventListener( 'canplaythrough', () => { if (!UTILS.isLowNetwork()) { this.onPlay(); } this.getEndImage(); },{ once : true }); } this.prevVideoSrc = currentVideoSrc; } } onLoad(videoElement) { if (videoElement === this.videoElement) { const targetAttr = this.currentDevice !== 'mobile' ? 'data-media-pc' : 'data-media-mo'; const videoSrc = this.videoElement.getAttribute(targetAttr); this.videoElement.playState = false; this.video.querySelectorAll('source').forEach((source) => { const type = source.getAttribute('type'); if (type.indexOf('webm') > -1) source.src = videoSrc + '.webm'; if (type.indexOf('mp4') > -1) source.src = videoSrc + '.mp4'; this.video.load(); }); this.video.addEventListener( 'canplaythrough', () => { if (!UTILS.isLowNetwork()) { this.onPlay(); } this.getEndImage(); },{ once : true }); } } onPlay(videoElement) { const playFunc = () => { if (this.video.readyState > 0 && !this.videoElement.playState) { if (this.video.currentTime === this.video.duration) { this.video.currentTime = 0; } if (this.autoPlay) this.videoElement.autoPlayState = true; this.videoElement.playState = true; if (this.videoElement.classList.contains(this.classes.paused)) { this.videoElement.classList.add(this.classes.playing); } else { window.setTimeout(() => { this.videoElement.classList.add(this.classes.playing); }, 350); } this.videoElement.classList.remove(this.classes.ended); this.videoElement.classList.remove(this.classes.paused); window.setTimeout(() => { this.video.play(); this.updateController(); this.outCallback('updatePlayState', true); }, 350); this.video.addEventListener('ended', this.updatePlayEnded.bind(this), { once: true }); } } if (videoElement) { if (videoElement === this.videoElement) { playFunc(); } } else { playFunc(); } } onPause() { if (!this.video.paused) { this.video.pause(); } this.videoElement.playState = false; this.videoElement.classList.remove(this.classes.ended); this.videoElement.classList.remove(this.classes.playing); this.videoElement.classList.add(this.classes.paused); this.updateController(); } onEnded() { if (this.video.readyState > 3) { if (!this.video.ended) { this.video.pause(); } this.video.currentTime = this.video.duration; this.videoElement.playState = false; this.videoElement.classList.add(this.classes.ended); this.videoElement.classList.remove(this.classes.playing); this.videoElement.classList.remove(this.classes.paused); this.updateController(); } } onReset(videoElement) { const resetFunc = () => { this.video.pause(); this.video.currentTime = 0; this.videoElement.playState = false; if (this.autoPlay) this.videoElement.autoPlayState = false; this.videoElement.classList.remove(this.classes.ended); this.videoElement.classList.remove(this.classes.playing); this.videoElement.classList.remove(this.classes.paused); this.updateController(); } if (videoElement) { if (videoElement === this.videoElement) { resetFunc(); } } else { resetFunc(); } } onCanplayThrough() { const videoLazyClass = this.opts.videoLazyClass.split('.'); const removeClass = videoLazyClass[videoLazyClass.length - 1]; if (this.useController) { window.setTimeout(() => { this.videoController.style.display = 'block'; }, 500); } this.videoElement.classList.add(this.classes.loaded); // this.videoElement.classList.add(this.classes.paused); if (this.opts.videoLazyClass.split(' ').length == 1) this.videoElement.classList.remove(removeClass); this.isCanplay = true; this.onScrollHandler(); this.isCanplay = false; } onClickController(e) { e.preventDefault(); if (!this.videoElement.playState) { this.onPlay(); } else { this.onPause(); } } updatePlayEnded() { this.onPause(); } updateController() { if (!this.useController) return; if (!this.videoElement.playState) { // this.videoControllerText.innerText = this.globalText.play; this.videoController.classList.remove(this.classes.isPaused); } else { // this.videoControllerText.innerText = this.globalText.stop; this.videoController.classList.add(this.classes.isPaused); } const data = { el: this.videoController, playState: this.videoElement.playState } this.outCallback('updateController', data); } onScrollHandler() { if (this.videoElement.closest('.cm-layer')) return; const scrollY = window.scrollY; const direction = scrollY > this.lastScrollY ? 'down' : 'up'; const targetHeight = UTILS.getHeight(this.videoElement); const windowHeight = UTILS.winSize().h; // const visiblePoint = targetHeight > windowHeight ? this.opts.visiblePoint : 0; // const visibleOffset = targetHeight * visiblePoint; const visibleOffset = targetHeight * 0.5; const scrollTop = UTILS.getScroll().top; const scrollBottom = UTILS.getScroll().bottom; const targetOffsetTop = UTILS.getOffset(this.videoElement).top; const targetOffsetBottom = UTILS.getOffset(this.videoElement).bottom - visibleOffset; const playState = this.videoElement.classList.contains(this.classes.playing) && this.videoElement.playState; const pausedState = this.videoElement.classList.contains(this.classes.paused) && !this.videoElement.playState; const endedState = this.videoElement.classList.contains(this.classes.ended) && !this.videoElement.playState; if (scrollTop > targetOffsetBottom + visibleOffset) { if (this.autoPlay) { if (this.videoElement.autoPlayState) { if (playState || pausedState) { this.onEnded(); } } else { // NOTE: video load 되기 전 end 이미지가 먼저 노출되어 보여져야할 경우 대응. this.videoElement.classList.add(this.classes.ended); } } // console.log(this.videoElement, 'overview bottom'); } else if (scrollBottom < targetOffsetTop) { if (this.autoPlay && this.videoElement.autoPlayState) { if (playState || pausedState || endedState) { // console.log('reset', playState, pausedState); this.onReset(); } } // console.log(this.videoElement, 'overview top'); } else if (scrollBottom > targetOffsetBottom && scrollTop < targetOffsetTop) { const playState = this.isCanplay || direction === 'down'; if (playState) { // console.log(!this.videoElement.playState, !this.videoElement.autoPlayState) if (this.autoPlay && !this.videoElement.playState && !this.videoElement.autoPlayState) { // console.log('play', direction); if (!UTILS.isLowNetwork()) { this.onPlay(); } } } } this.lastScrollY = scrollY; } onResponsiveChange() { window.setTimeout(() => { this.isCanplay = true; this.onReset(); this.onScrollHandler(); this.isCanplay = false; }, 20) } onResizeHandler() { if (UTILS.winSize().w === this.winWidth) return; this.winWidth = UTILS.winSize().w; if (this.opts.resizeStart == null) { this.opts.resizeStart = this.winWidth; this.resizeAnimateFunc(); } window.clearTimeout(this.resizeEndTime); this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150); } resizeAnimateFunc() { this.setLayout(); this.resizeRequestFrame = UTILS.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)); } resizeEndFunc() { this.opts.resizeStart = null; UTILS.cancelAFrame.call(window, this.resizeRequestFrame); } setLayout() { if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; if (this.currentDevice !== this.prevDevice) { this.onResponsiveChange(); } this.prevDevice = this.currentDevice; } outCallback(ing, param) { var callbackObj = this.opts.on[ing]; if (callbackObj == null) return; callbackObj(param); } } WATCH6.VideoPlayer = VideoPlayer; })(); (function () { 'use strict'; const initialize = (function () { var self = {}; var currDevice = false, prevDevice = null, currentSup = null; var init = function () { setVariables(); bindEvents(); setScrollControl(); }; var setVariables = function () { self.resizeTimeout = null; self.supClicker = document.querySelectorAll('a.click_sup'); self.supTopBtn = document.querySelectorAll('button.click_disclaimer'); self.contents = document.getElementById('contents') || document.getElementById('content'); self.allClickables = self.contents.querySelectorAll('a, button, input, select'); }; var bindEvents = function () { var i = 0; window.addEventListener('load', onLoadHandler); window.addEventListener('resize', onResizeHandler); window.addEventListener('scroll', onScrollHandler); for (i = 0; i < self.allClickables.length; i++) { var clickable = self.allClickables[i]; clickable.isClicked = false; clickable.isVisible = false; clickable.addEventListener('focusin', centeredFocus); clickable.addEventListener('mousedown', checkClick); } for (i = 0; i < self.supClicker.length; i++) { self.supClicker[i].addEventListener('click', onClickSup); } for (i = 0; i < self.supTopBtn.length; i++) { self.supTopBtn[i].addEventListener('click', onClickSupTopBtn); } }; var onLoadHandler = function () { onResizeHandler(); onScrollHandler(); if (UTILS.isLowNetwork()) { document.documentElement.classList.add('low_network'); } document.documentElement.classList.add('load'); window.removeEventListener('load', onLoadHandler); }; var onResizeHandler = function () { if (window.innerWidth >= 1024) currDevice = 'desktop'; else if (window.innerWidth >= 768 && window.innerWidth < 1024) currDevice = 'tablet'; else currDevice = 'mobile'; clearTimeout(self.resizeTimeout); self.resizeTimeout = setTimeout(function () { UTILS.isBrokenFixed(); }, 100); if (currDevice != prevDevice) { document.documentElement.classList.add(currDevice); document.documentElement.classList.remove(prevDevice); prevDevice = currDevice; } }; var onScrollHandler = function () { var winOffsetTop = window.pageYOffset; var winOffsetBottom = winOffsetTop + window.innerHeight; for (var i = 0; i < self.allClickables.length; i++) { var clickable = self.allClickables[i]; var clickablePos = winOffsetTop + clickable.getBoundingClientRect().top; var winVisibleTop = winOffsetTop + UTILS.getNavHeight(); if (clickablePos >= winVisibleTop && clickablePos <= winOffsetBottom) { clickable.isVisible = true; } else if (clickablePos < winVisibleTop || clickablePos > winOffsetBottom) { clickable.isVisible = false; } } }; var onClickSup = function (e) { e.preventDefault(); e.stopPropagation(); var _this = this; var destIndex = parseFloat(this.innerText); var disclaimerList = document.querySelectorAll('#desc-section ol'); disclaimerList.forEach((el) => { if (window.getComputedStyle(el).display === 'block') { disclaimerList = el; } }); var disclaimerItems = disclaimerList.querySelectorAll('li'); var disclaimerItem = disclaimerList.querySelectorAll('li')[destIndex - 1]; var disclaimer = disclaimerItem.querySelector('span'); var disclaimerText = disclaimer.innerHTML; var activeBlock = '' + disclaimerText + ''; disclaimer.innerHTML = activeBlock; currentSup = e.currentTarget; var focusInEvent = function () { centeredFocus.call(_this); disclaimer.removeEventListener('focusin', focusInEvent); }; var focusOutEvent = function () { disclaimer.innerHTML = disclaimerText; disclaimer.removeAttribute('tabindex'); disclaimer.removeEventListener('focusout', focusOutEvent); }; if (e.currentTarget.closest('.cm-layer')) { const targetLayer = e.currentTarget.closest('.cm-layer'); $(targetLayer).trigger('closeLayer', false); } disclaimer.addEventListener('focusin', focusInEvent); disclaimer.addEventListener('focusout', focusOutEvent); setTimeout(() => { disclaimerItem.querySelector('a').focus(); }, 0); disclaimerItems.forEach( el => el.classList.remove('is-active')); disclaimerItem.classList.add('is-active'); }; var onClickSupTopBtn = function (e) { var disclaimer = e.target.closest('li'); var supNum = disclaimer.getAttribute('data-sup'); var supList = document.querySelectorAll('.click_sup'); for (let i = 0; i < supList.length; i++) { if (supList[i].innerText === supNum) { centeredFocus.call(this); currentSup.focus(); } } const curSupLayer = currentSup.closest('.cm-layer'); if(!!curSupLayer) { const supLayerId = curSupLayer.id; const layerParent = curSupLayer.parentNode; const targetButton = layerParent.querySelector(`[data-layer-target="#${supLayerId}"]`); if (currentSup.innerText === supNum) { targetButton.focus(); }; }; disclaimer.classList.remove('is-active'); }; var centeredFocus = function (e) { if (!document.documentElement.classList.contains('ios') && e && e.relatedTarget == null) return; var _this = this; if (!this.isClicked && !this.isVisible && !isSubNav(this)) { setTimeout(function () { var winOffsetTop = window.pageYOffset; var targetRect = _this.getBoundingClientRect(); var winHeight = (window.innerHeight - UTILS.getNavHeight()) / 2; var targetOffsetMid = winOffsetTop - UTILS.getNavHeight() + targetRect.top + targetRect.height / 2; window.scrollTo(0, targetOffsetMid - winHeight); }, 10); } this.isClicked = false; }; var isSubNav = function (element) { var parent = element.parentNode; var parentId = parent.getAttribute('id'); if (parentId == 'contents' || parent == document.body) { return false; } else { if (parentId == 'subnav' || parent.classList.contains('sc-s22ultra-popup')) { return true; } else { return isSubNav(parent); } } }; var checkClick = function () { this.isClicked = true; }; var setScrollControl = function () { var docClass = document.documentElement.classList; if (UTILS.checkRegion() != 'global' && !docClass.contains('mac') && !docClass.contains('safari')) { ANIUTIL.scrollController({ speed: 120, duration: 0.5 }); } }; return { init: init }; })(); window.initialize = initialize; })(); (function (global, factory) { global = global; global.TrapFocus = factory(); })(window, function () { 'use strict'; var TrapFocus = (function (isUndefined) { var win = window, doc = win.document, $ = win.jQuery, hasTrap = null, Util = win.WATCH6.UTILS; function TrapFocus(container, args) { if (!(this instanceof TrapFocus)) { return new TrapFocus(container, args); } var defParams = { obj: container, prevStep: null, isDestroy: false, IgnoreUtilFocusChanges: false, ariaAttr: { hidden: 'aria-hidden', disabled: 'aria-disabled', modal: 'aria-modal' }, ariaNotHidden: (() => { return args && args.ariaNotHidden ? args.ariaNotHidden : []; })(), classAttr: { clone: 'trapfocus' }, elAttr: { tabIndex: 'tabindex', role: 'role' }, customEvent: '.TrapFocus' + new Date().getTime() + Math.random() }; this.opts = Util.def(defParams, args || {}); if (!(this.obj = $(this.opts.obj)).length) return; if (hasTrap != null) { hasTrap.destroy(); } hasTrap = this; this.init(); } TrapFocus.prototype = { init: function () { this.initLayout(); this.buildAria(); this.bindEvents(true); this.loadComponent(); this.obj.data('TrapFocus', this); }, initLayout: function () { var ariaAttr = this.opts.ariaAttr; var elAttr = this.opts.elAttr; this.obj.attr(ariaAttr.modal, 'true'); this.obj.attr(elAttr.role, 'dialog'); }, buildAria: function () { var ariaAttr = this.opts.ariaAttr; var elAttr = this.opts.elAttr; var defaultNotHidden = 'head, script, noscript, link, style, meta'; var hiddenParam = this.opts.ariaNotHidden.length > 0 ? `, ${this.opts.ariaNotHidden.join(',')}` : ''; Util.def(this, { aria: { notHidden: Array(defaultNotHidden + hiddenParam), focusType: ['A', 'BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'], dataAttr: { ariaHidden: 'trapfocusariahidden', ariaDisabled: 'trapfocusariadisabled', tabIndex: 'trapfocustabindex', role: 'trapfocusrole' }, destroy: $.proxy(function () { var dataAttr = this.aria.dataAttr; var hiddenEls = this.aria.hiddenEls; var focusEls = this.aria.focusEls; var tabindexEls = this.aria.tabindexEls; // aria-hidden for (var hMin = 0, hMax = hiddenEls.length; hMin < hMax; hMin++) { (function (h_index) { var hiddenEl = hiddenEls.eq(h_index), ariaCondition = hiddenEl.data(dataAttr.ariaHidden), elCondition = hiddenEl.data(dataAttr.role); if (ariaCondition != isUndefined) { hiddenEl.attr(ariaAttr.hidden, ariaCondition); hiddenEl.removeData(dataAttr.ariaHidden); } else { hiddenEl.removeAttr(ariaAttr.hidden); } if (elCondition != isUndefined) { hiddenEl.attr(elAttr.role, elCondition); hiddenEl.removeData(dataAttr.role); } else { hiddenEl.removeAttr(elAttr.role); } })(hMin); } // aria-disabled for (var fMin = 0, fMax = focusEls.length; fMin < fMax; fMin++) { (function (f_index) { var focusEl = focusEls.eq(f_index), ariaCondition = focusEl.data(dataAttr.ariaDisabled); focusEl.removeAttr(elAttr.tabIndex); if (ariaCondition != isUndefined) { focusEl.attr(ariaAttr.disabled, ariaCondition); focusEl.removeData(dataAttr.ariaDisabled); } else { focusEl.removeAttr(ariaAttr.disabled); } })(fMin); } // tabindex for (var tMin = 0, tMax = tabindexEls.length; tMin < tMax; tMin++) { (function (t_index) { var tabindexEl = tabindexEls.eq(t_index), ariaCondition = tabindexEl.data(dataAttr.tabIndex); if (ariaCondition != isUndefined) { tabindexEl.attr(elAttr.tabIndex, ariaCondition); tabindexEl.removeData(dataAttr.tabIndex); } else { tabindexEl.removeAttr(elAttr.tabIndex); } })(tMin); } var cookieBtnWrap = document.getElementById('teconsent'); if (cookieBtnWrap) { var cookieBtn = cookieBtnWrap.querySelector('a'); if (cookieBtn && cookieBtn.getAttribute('tabindex') === '-1') { cookieBtn.setAttribute('tabindex', '0'); cookieBtn.removeAttribute('aria-disabled'); } } }, this), build: $.proxy(function () { var _this = this; var focusTypes = this.aria.focusType; var dataAttr = this.aria.dataAttr; var objParents = this.obj.parents(); var hiddenEls = this.obj.siblings().not(_this.aria.notHidden.join(',')); var focusEls = $(''); var tabindexEls = $(''); // this.entryFocus(); for (var i = 0, max = objParents.length; i < max; i++) { (function (index) { var _target = objParents.eq(index); hiddenEls = hiddenEls.add(_target.siblings().not(_this.aria.notHidden.join(','))); })(i); } focusEls = focusEls.add(hiddenEls); tabindexEls = tabindexEls.add(hiddenEls); this.obj.removeAttr(ariaAttr.hidden); // aria-hidden for (var hMin = 0, hMax = hiddenEls.length; hMin < hMax; hMin++) { (function (h_index) { var hiddenEl = hiddenEls.eq(h_index), ariaCondition = hiddenEl.attr(ariaAttr.hidden), elCondition = hiddenEl.attr(elAttr.role); if (ariaCondition != isUndefined) { hiddenEl.data(dataAttr.ariaHidden, ariaCondition); } if (elCondition != isUndefined) { hiddenEl.data(dataAttr.role, elCondition); } hiddenEl.attr(ariaAttr.hidden, 'true'); hiddenEl.attr(elAttr.role, 'none presentation'); })(hMin); } // aria-disabled focusEls = focusEls.add(hiddenEls.find(focusTypes.join(',').toLowerCase())); for (var fMin = 0, fMax = focusEls.length; fMin < fMax; fMin++) { (function (f_index) { var focusEl = focusEls.eq(f_index), ariaCondition = focusEl.attr(ariaAttr.disabled); if (ariaCondition != isUndefined) { focusEl.data(dataAttr.ariaDisabled, ariaCondition); } focusEl.attr(ariaAttr.disabled, 'true'); setTimeout(() => { focusEl.attr(elAttr.tabIndex, -1); }); })(fMin); } // tabindex tabindexEls = tabindexEls.add(hiddenEls.find('[' + elAttr.tabIndex + ']')); for (var tMin = 0, tMax = tabindexEls.length; tMin < tMax; tMin++) { (function (t_index) { var tabindexEl = tabindexEls.eq(t_index), ariaCondition = tabindexEl.attr(elAttr.tabIndex); if (ariaCondition != isUndefined) { tabindexEl.data(dataAttr.tabIndex, ariaCondition); } tabindexEl.attr(elAttr.tabIndex, -1); })(tMin); } this.aria.hiddenEls = hiddenEls; this.aria.focusEls = focusEls; this.aria.tabindexEls = tabindexEls; }, this) } }); }, changeEvents: function (event) { var events = [], eventNames = event.split(' '); for (var key in eventNames) { events.push(eventNames[key] + this.opts.customEvent); } return events.join(' '); }, bindEvents: function (type) { if (type) { $(doc).on(this.changeEvents('focusin'), $.proxy(this.trapFocus, this)); } else { $(doc).off(this.changeEvents('focusin')); } }, focusFirstDescendant: function (element) { for (var i = 0; i < element.childNodes.length; i++) { var child = element.childNodes[i]; if (this.attemptFocus(child) || this.focusFirstDescendant(child)) { return true; } } return false; }, focusLastDescendant: function (element) { for (var i = element.childNodes.length - 1; i >= 0; i--) { var child = element.childNodes[i]; if (this.attemptFocus(child) || this.focusLastDescendant(child)) { return true; } } return false; }, isFocusable: function (element) { if (element.tabIndex > 0 || (element.tabIndex === 0 && element.getAttribute('tabIndex') !== null)) { return true; } if (element.disabled) { return false; } switch (element.nodeName) { case 'A': return !!element.href && element.rel != 'ignore'; case 'INPUT': return element.type != 'hidden' && element.type != 'file'; case 'BUTTON': case 'SELECT': case 'TEXTAREA': case 'VIDEO': case 'SOURCE': case 'IFRAME': return true; default: return false; } }, attemptFocus: function (element) { if (this.opts.isDestroy) return; if (!this.isFocusable(element)) { return false; } this.opts.IgnoreUtilFocusChanges = true; try { element.focus(); } catch (e) {} this.opts.IgnoreUtilFocusChanges = false; return document.activeElement === element; }, trapFocus: function (e) { if (this.opts.isDestroy) return; if (this.opts.IgnoreUtilFocusChanges) { return; } var currentDialog = document; this.dynamicComponentFocus(); }, loadComponent: function () { this.dynamicComponentFocus(); // 늦게 붙는 경우 추가 대응 setTimeout(() => { this.dynamicComponentFocus(); }, 3000); this.focusFirstDescendant(this.obj[0]); this.lastFocus = document.activeElement; this.aria.build(); }, // [WAQA]: 다이나믹 컴포넌트 trapfocus 대응 직진 코드임... dynamicComponentFocus: function () { const ariaAttr = this.opts.ariaAttr; const elAttr = this.opts.elAttr; // [WAQA]: 다이나믹 컴포넌트 대응 직진 코드임... // [WAQA]: 국가별로 feedback 컴포넌트 타입이 다름. // - UK만 QSIFeedbackButton-btn 사용하는것으로 보여짐. // 시간차 노출 대응. setTimeout(() => { var feedbackbtn = document.getElementById('QSIFeedbackButton-btn'); var feedbackclosebtn = document.getElementById('QSIFeedbackButton-close-btn'); var feedbackbtn2 = document.getElementById('nebula_div_btn'); var liveChatWrap = document.getElementById('spr-live-chat-app'); var cookieBtnWrap = document.getElementById('teconsent'); if (feedbackbtn) { var feedbackbtnWrap = feedbackbtn.parentElement; feedbackbtn.setAttribute(ariaAttr.disabled, 'true'); feedbackbtn.setAttribute(elAttr.tabIndex, '-1'); feedbackbtnWrap.setAttribute(ariaAttr.disabled, 'true'); feedbackbtnWrap.setAttribute(ariaAttr.hidden, 'true'); feedbackbtnWrap.setAttribute(elAttr.tabIndex, '-1'); feedbackbtnWrap.setAttribute(elAttr.role, 'none presentation'); } if (feedbackbtn2) { var feedbackbtnWrap2 = feedbackbtn2.parentElement; feedbackbtn2.setAttribute(ariaAttr.disabled, 'true'); feedbackbtn2.setAttribute(elAttr.tabIndex, '0'); feedbackbtnWrap2.setAttribute(ariaAttr.disabled, 'true'); feedbackbtnWrap2.setAttribute(ariaAttr.hidden, 'true'); feedbackbtnWrap2.setAttribute(elAttr.tabIndex, '-1'); feedbackbtnWrap2.setAttribute(elAttr.role, 'none presentation'); } if (liveChatWrap) { liveChatWrap.setAttribute(ariaAttr.disabled, 'true'); liveChatWrap.setAttribute(ariaAttr.hidden, 'true'); liveChatWrap.setAttribute(elAttr.tabIndex, '-1'); liveChatWrap.setAttribute(elAttr.role, 'none presentation'); } // cookie preferences if (cookieBtnWrap && cookieBtnWrap.hasAttribute('aria-label')) { setTimeout(() => { var cookieBtn = cookieBtnWrap.querySelector('a'); cookieBtn.setAttribute(elAttr.tabIndex, '-1'); cookieBtn.setAttribute(ariaAttr.disabled, 'true'); cookieBtn.setAttribute(ariaAttr.hidden, 'true'); }); } }); // // 늦게 붙는 경우 대응 // setTimeout(() => { // var cookieBtnWrap = document.getElementById('teconsent'); // if (cookieBtnWrap && cookieBtnWrap.hasAttribute('aria-label')) { // setTimeout(() => { // var cookieBtn = cookieBtnWrap.querySelector('a'); // cookieBtn.setAttribute(elAttr.tabIndex, '-1'); // cookieBtn.setAttribute(ariaAttr.disabled, 'true'); // cookieBtn.setAttribute(ariaAttr.hidden, 'true'); // }); // } // }, 2500); }, destroy: function () { hasTrap = null; this.opts.isDestroy = true; var ariaAttr = this.opts.ariaAttr; var elAttr = this.opts.elAttr; this.bindEvents(false); this.aria.destroy(); this.obj.removeAttr(ariaAttr.modal); } }; return TrapFocus; })(); return TrapFocus; }); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class HeightMatch { constructor(el = container, args) { const defParams = { container: el || '.heightmatch-wrap', childElement: '>li', notCompareElement: null, pushElement: null, matchElement: '.heightmatch-cont', column: 3, pushObjs: null, useDestroyHeight: true, destroyType: false, resizeStart: null, breakpoints: {}, matchBefore: null, matchAfter: null, loadAfter: null }; this.opts = UTILS.def(defParams, args || {}); this.classes = defParams.classes; this.obj = $(document.querySelector(el)); this.init(); } init() { if (this.obj === null) return; this.setElements(); this.setOpts(); this.setRows(); this.buildHeightControl(); this.outCallback('loadAfter'); this.bindEvents(); } setElements() { this.objChild = this.obj.find(this.opts.childElement); this.opts.pushObjs = null; if (this.opts.pushElement == null) { this.opts.pushObjs = this.objChild.not(this.opts.notCompareElement); } else { this.opts.pushObjs = this.objChild.not(this.opts.notCompareElement).find(this.opts.pushElement); } } setOpts() { this.currentDevice = false; this.prevDevice = null; var winWidth = UTILS.winSize().w; // breakpoints var breakpoints = this.opts.breakpoints, breakKeyMins = [], breakKeyMin; for (var key in breakpoints) { if (key >= winWidth) { breakKeyMins.push(key); breakKeyMin = Math.min.apply(null, breakKeyMins); } else { breakKeyMin = null; } } this.breakOpts = UTILS.def({}, this.opts); if (breakKeyMin != null) { this.breakOpts = UTILS.def(this.breakOpts, breakpoints[breakKeyMin]); } } bindEvents() { window.addEventListener('resize', this.onResizeHandler.bind(this)); } onResizeHandler() { if (UTILS.winSize().w === this.winWidth) return; this.winWidth = UTILS.winSize().w; if (this.opts.resizeStart == null) { this.opts.resizeStart = this.winWidth; this.outCallback('matchBefore'); this.resizeAnimateFunc(); } window.clearTimeout(this.resizeEndTime); this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150); } resizeAnimateFunc() { this.setLayout(); this.setOpts(); this.setRows(); this.buildHeightControl(); this.resizeRequestFrame = UTILS.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)); } resizeEndFunc() { this.opts.resizeStart = null; this.setOpts(); this.setRows(); this.buildHeightControl(); this.outCallback('matchAfter'); UTILS.cancelAFrame.call(window, this.resizeRequestFrame); } setLayout() { if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; if (this.currentDevice !== this.prevDevice) { // this.onResponsiveChange(); } this.prevDevice = this.currentDevice; } setRows() { this.rowNum = Math.ceil(this.objChild.length / this.breakOpts.column); } buildHeightControl() { // if (UTILS.isSupportTransform) { if (this.breakOpts.column <= 1) { if (this.opts.pushObjs !== null) { this.opts.pushObjs.css('height', ''); } } else { this.buildHeight(); } // } else { // this.buildHeight(); // } } buildHeight() { this.heightArray = []; for (var i = 0; i < this.rowNum; i++) { this.heightArray[i] = []; } for (var i = 0, max = this.objChild.length; i < max; i++) { var arrayIndex = parseInt(i / this.breakOpts.column, 10), matchElement = this.objChild.eq(i).not(this.opts.notCompareElement).find(this.opts.matchElement), condition = matchElement.is(':visible'), maxHeight = condition ? Math.ceil(matchElement.outerHeight()) : 0; this.heightArray[arrayIndex].push(maxHeight); } for (var i = 0; i < this.rowNum; i++) { this.heightArray[i] = Math.max.apply(null, this.heightArray[i]); } this.setHeightLayout(); } setHeightLayout() { for (var i = 0, max = this.objChild.length; i < max; i++) { var arrayIndex = parseInt(i / this.breakOpts.column, 10); if (this.opts.pushElement == null) { this.objChild.eq(i).not(this.opts.notCompareElement).height(this.heightArray[arrayIndex]); } else { this.objChild.eq(i).not(this.opts.notCompareElement).find(this.opts.pushElement).height(this.heightArray[arrayIndex]); } } } destroy() { if (this.opts.useDestroyHeight) { if (this.opts.pushObjs !== null) { this.opts.pushObjs.css('height', ''); } } this.opts.destroyType = true; this.bindEvents(false); } reInit() { this.setElements(); this.setOpts(); this.setRows(); this.buildHeightControl(); this.onResizeHandler(); if (this.opts.destroyType) { this.opts.destroyType = false; this.bindEvents(true); } } outCallback(ing) { var callbackObj = this.opts[ing]; if (callbackObj == null) return; callbackObj(); } } WATCH6.HeightMatch = HeightMatch; })(); (function (global, factory) { global = global; global.HiveLayer = factory(); })(window, function () { 'use strict'; var HiveLayer = (function () { var win = window, $ = win.jQuery, doc = win.document, Util = win.WATCH6.UTILS, hasLayer = []; function HiveLayer(container, args) { if (!(this instanceof HiveLayer)) { return new HiveLayer(container, args); } var defParams = { effect: 'fade', // Could be 'default', 'fade', 'slide', 'flip', 'slide2' layerWrapElements: container, layerBody: '.cm-layer__body', layerElements: '.cm-layer__wrapper', openerElements: '.js-layer-opener', closerElements: '.js-layer-closer', dimmedElements: '.cm-layer__dimmed', classAttr: { htmlToggle: 'is-layer-open', isAsync: 'is-async' }, focusOutObj: { CSS: { overflow: 'hidden', position: 'absolute', left: 0, top: 0, 'z-index': -1, width: 1, height: 1, 'font-size': '1px', 'line-height': 0 } }, customEvent: '.HiveLayer' + new Date().getTime() + Math.random(), openerTarget: null, useOutside: false, useEscape: true, useCloseFocus: true, useScrollLock: true, useTrapFocus: true, flip: { CLASS: 'hive-layer-flip', direction: 'horizontal', // Could be 'horizontal', 'vertical' rotateStart: 90, rotateEnd: 0 }, customToggle: false, dimmedDuration: 250, fps: 120, easing: 'swing', duration: 250, on: { buildTools: null, layerMove: null, layerOpenBefore: null, layerOpenAfter: null, layerCloseBefore: null, layerCloseAfter: null }, ariaNotHidden: [] }; if (!(this.layerWrap = defParams.layerWrapElements).length) return; this.layerWrap = $(defParams.layerWrapElements); // this.opts = Util.def(defParams, this.layerWrap.data('hivelayer-opts') || args || {}); this.opts = Util.def(defParams, args || {}); this.init(); } HiveLayer.prototype = { init: function () { this.initOpts(); this.setElements(); this.initLayout(); this.buildTween(); this.buildTrapFocus(); this.bindEvents(true); this.layerWrap.data('HiveLayer', this); }, initOpts: function () { this.layerWrapInstance = '#' + this.layerWrap.attr('id'); if (!this.opts.isSupportTransition && this.opts.effect === 'flip') { this.opts.effect = 'default'; } if (this.opts.effect == 'custom') { this.opts.effect = 'default'; this.opts.customToggle = true; } }, setElements: function () { this.layerBody = this.layerWrap.find(this.opts.layerBody); this.layerObj = this.layerWrap.find(this.opts.layerElements); this.closerObj = this.layerWrap.find(this.opts.closerElements); this.dimmedObj = this.layerWrap.find(this.opts.dimmedElements); }, initLayout: function () { if (this.opts.effect === 'slide') { this.dimmedObj.hide(); this.layerObj.hide(); } else if (this.opts.effect === 'flip') { var fDirection = this.opts.flip.direction; if (fDirection !== 'vertical') { this.opts.flip.cssD = 'rotateY'; } else { this.opts.flip.cssD = 'rotateX'; } this.dimmedObj.hide(); this.layerObj.hide(); this.layerWrap.addClass(this.opts.flip.CLASS); } }, buildTween: function () { Util.def(this, { tweens: { instance: [], kill: $.proxy(function () { for (var i = 0, max = this.tweens.instance.length; i < max; i++) { this.tweens.instance[i].kill(); } this.tweens.instance = []; }, this) } }); }, buildTrapFocus: function () { if (!this.opts.useTrapFocus) return; Util.def(this, { trapfocus: { instance: null, destroy: $.proxy(function () { if (this.trapfocus.instance == null) return; this.trapfocus.instance.destroy(); this.trapfocus.instance = null; }, this), build: $.proxy(function () { if (this.trapfocus.instance !== null) return; this.trapfocus.instance = new TrapFocus(this.layerObj, { ariaNotHidden: this.opts.ariaNotHidden }); }, this) } }); }, bindEvents: function (type) { if (type) { $(doc).on('click clickCustom', this.opts.openerElements + '[data-layer-target="' + this.layerWrapInstance + '"]', $.proxy(this.onLayerOpen, this)); this.layerWrap.on('openLayer', $.proxy(this.onLayerOpen, this)); this.closerObj.on('mousedown click clickCustom', $.proxy(this.onLayerClose, this)); // this.dimmedObj.on(this.changeEvents('mousedown click clickCustom'), $.proxy(this.onLayerClose, this)); this.layerWrap.on('layerSetOptions', $.proxy(this.setOptions, this)); if (this.opts.useEscape) { this.layerObj.on('keydown', $.proxy(this.onEscapeClose, this)); } } else { $(doc).off('click clickCustom'); this.layerWrap.off('openLayer'); this.closerObj.off('mousedown click clickCustom'); // this.dimmedObj.off(this.changeEvents('mousedown click clickCustom')); this.layerWrap.off('layerSetOptions'); if (this.opts.useEscape) { this.layerObj.off('keydown'); } } }, bindOutsideEvents: function (type) { if (!this.opts.useOutside) return; if (type) { this.layerObj.on('clickoutside touchendoutside', $.proxy(this.onLayerOutsideFunc, this)); } else { this.layerObj.off('clickoutside touchendoutside'); } }, bindCloseEvents: function (type) { if (type) { this.layerWrap.on('closeLayer', $.proxy(this.closeLayer, this)); } else { this.layerWrap.off('closeLayer'); } }, setOptions: function (e, data) { Util.def(this.opts, data || {}); if (data.customToggle) { this.opts.effect = 'default'; } }, setScrollLock: function (type) { if (!this.opts.useScrollLock) return; if (type) { Util.page.scrollLock.on(); } else { Util.page.scrollLock.off(); } $('html').toggleClass(this.opts.classAttr.htmlToggle, type); }, onLayerOpen: function (e) { e.preventDefault(); // this.beforeScroll = window.pageYOffset; setTimeout(() => { this.dimmedObj.on('mousedown click clickCustom', $.proxy(this.onLayerClose, this)); }, 500); if (e.type === 'click' || e.type === 'clickCustom') { this.opts.openerTarget = $(e.currentTarget); } if (e.type === 'click') { if (this.opts.openerTarget.hasClass(this.opts.classAttr.isAsync)) return; } this.layerViewType = 'open'; hasLayer.push({ POPUPWRAP: this.layerWrap }); if (document.querySelector('html.load div#header')) { document.querySelector('html.load div#header').style.opacity = 0; document.querySelector('html.load div#header').style.pointerEvents = 'none'; } // [s] 강제 가상 포커스 영역 추가 // var firstFocus = $('').css(this.opts.focusOutObj.CSS); // this.layerObj.prepend(firstFocus); // firstFocus.on('focusout', function () { // firstFocus.remove(); // }); // [e] 강제 가상 포커스 영역 추가 this.setScrollLock(true); this.bindCloseEvents(true); if (this.opts.effect === 'default') { if (!this.opts.customToggle) { this.layerWrap.css({ opacity: 0, display: 'block' }); this.outCallback('layerOpenBefore'); this.outCallback('buildTools'); this.layerWrap.css('opacity', ''); this.openAfterBugFunc(); } else { this.outCallback('layerOpenBefore'); } } else if (this.opts.effect === 'fade') { this.layerWrap.css({ opacity: 0, display: 'block' }); this.outCallback('layerOpenBefore'); TweenLite.set(this.layerBody, { opacity: 0, scale: 1, overflow: 'hidden' }); this.outCallback('buildTools'); var step1 = TweenLite.to(this.layerWrap, this.opts.duration / 1000, { opacity: 1, onComplete: $.proxy(function () { var step2 = TweenLite.to(this.layerBody, 0.25, { ease: Expo.easeOut, opacity: 1, scale: 1, onComplete: $.proxy(function () { this.layerBody.css({ overflow: '', transform: '' }); this.openAfterBugFunc(); }, this) }); this.tweens.instance.push(step2); }, this) }); this.tweens.instance.push(step1); } else if (this.opts.effect === 'slide') { var speed = 1; TweenLite.set(this.dimmedObj, { display: 'block', opacity: 0 }); TweenLite.set(this.layerWrap, { display: 'block' }); TweenLite.set(this.layerBody, { overflow: 'hidden' }); TweenLite.set(this.layerObj, { display: '', y: -Util.winSize().h }); TweenLite.set(this.layerObj, { display: '' }); this.outCallback('layerOpenBefore'); var step1 = TweenLite.to(this.dimmedObj, speed, { opacity: 0.9 }); var step2 = TweenLite.to(this.layerObj, speed, { y: 0, onComplete: $.proxy(function () { this.outCallback('buildTools'); this.layerBody.css({ overflow: '' }); this.layerObj.css({ transform: '' }); this.openAfterBugFunc(); }, this) }); this.tweens.instance.push(step1); this.tweens.instance.push(step2); } else if (this.opts.effect === 'slide2') { var speed = 0.6; TweenLite.set(this.dimmedObj, { display: 'block', opacity: 0 }); TweenLite.set(this.layerWrap, { display: 'block' }); TweenLite.set(this.layerObj, { display: '', y: Util.winSize().h }); TweenLite.set(this.layerObj, { display: '' }); this.outCallback('layerOpenBefore'); var step1 = TweenLite.to(this.dimmedObj, speed, { opacity: 0.9 }); var step2 = TweenLite.to(this.layerObj, speed, { y: 0, onComplete: $.proxy(function () { this.outCallback('buildTools'); this.layerBody.css({ overflow: '' }); this.layerObj.css({ transform: '' }); this.openAfterBugFunc(); }, this) }); this.tweens.instance.push(step1); this.tweens.instance.push(step2); } else if (this.opts.effect === 'flip') { var moveDistance = this.opts.flip.rotateEnd - this.opts.flip.rotateStart, moveOneStep = (moveDistance / this.opts.duration) * (1000 / this.opts.fps), currentStep = 0; this.opts.flip.moveData = { startDistance: this.opts.flip.rotateStart, endDistance: this.opts.flip.rotateEnd, moveDistance: moveDistance, moveOneStep: moveOneStep, currentStep: currentStep }; this.layerWrap.show(); this.dimmedObj.fadeIn( this.opts.dimmedDuration, $.proxy(function () { this.outCallback('layerOpenBefore'); this.outCallback('buildTools'); this.layerObj.show(); this.initStep(this.opts.flip.moveData); this.flipFunc(); }, this) ); win.setTimeout( $.proxy(function () { this.outCallback('buildTools'); }, this), 30 ); } this.ariaAccessbility(true, this.layerWrap); }, initStep: function (data) { this.opts.stepTimeOld = new Date(); this.direction = data.startDistance > data.moveDistance ? 'toNext' : 'toPrev'; this.condition = this.direction === 'toNext' ? data.currentStep > data.moveDistance : data.currentStep < data.moveDistance; }, moveStep: function (data) { this.opts.stepTimeNew = new Date(); this.opts.remaining = Math.max(0, this.opts.stepTimeOld - this.opts.stepTimeNew + this.opts.duration); var temp = this.opts.remaining / this.opts.duration || 0, percent = 1 - temp, eased = $.easing[this.opts.easing](percent, this.opts.duration * percent, 0, 1, this.opts.duration); data.currentStep = (data.endDistance - data.startDistance) * eased; }, flipFunc: function () { var data = this.opts.flip.moveData; this.moveStep(data); if (this.condition) { win.clearTimeout(this.stepTimeout); this.stepTimeout = win.setTimeout( $.proxy(function () { this.flipFunc(); }, this), 1000 / this.opts.fps ); this.condition = this.direction === 'toNext' ? data.currentStep > data.moveDistance : data.currentStep < data.moveDistance; this.outCallback('layerMove', data.currentStep, data); } else { this.opts.remaining = this.opts.duration; if (this.layerViewType === 'close' || !this.layerViewType) { this.closeAfterBugFunc(); this.dimmedObj.fadeOut( this.opts.dimmedDuration, $.proxy(function () { this.layerWrap.hide(); this.layerObj.hide(); }, this) ); } else { this.openAfterBugFunc(); } } var movePosition = data.startDistance + data.currentStep; this.layerObj.css({ transform: this.opts.flip.cssD + '(' + movePosition + 'deg)' }); }, onLayerOpenAfter: function () { // Util.findFocus(this.layerObj); if (this.trapfocus) { this.trapfocus.build(); } this.bindOutsideEvents(true); this.outCallback('layerOpenAfter'); }, openAfterBugFunc: function () { win.clearTimeout(this.openAfterTimeout); this.openAfterTimeout = win.setTimeout($.proxy(this.onLayerOpenAfter, this), 30); }, onLayerClose: function (e) { var _target = $(e.currentTarget); if (e.type === 'mousedown') { if (!Util.isDevice) { e.stopPropagation(); this.opts.useCloseFocus = false; } } else if (e.type === 'click' || e.type === 'clickCustom') { e.preventDefault(); if (e.type === 'click') { if (_target.hasClass(this.opts.classAttr.isAsync)) return; } this.layerWrap.trigger('closeLayer'); this.dimmedObj.off('mousedown click clickCustom'); } }, closeLayer: function () { this.closeType = arguments[1]; this.layerViewType = 'close'; this.outCallback('layerCloseBefore'); this.popupOpenPropsControl(); // if (!hasLayer.length) { this.setScrollLock(false); // } if (this.trapfocus) { this.trapfocus.destroy(); } if (document.querySelector('html.load div#header')) { document.querySelector('html.load div#header').style.opacity = 1; document.querySelector('html.load div#header').style.pointerEvents = 'unset'; } this.ariaAccessbility(false, this.layerWrap); win.clearTimeout(this.closeBeforeTimeout); this.closeBeforeTimeout = win.setTimeout($.proxy(this.closeBeforeBugFunc, this), 30); this.bindOutsideEvents(false); }, onEscapeClose: function (e) { var keyCode = e.which || e.keyCode; if (keyCode !== 27) return; this.layerWrap.trigger('closeLayer'); }, onLayerOutsideFunc: function () { this.layerWrap.trigger('closeLayer'); }, closeBeforeBugFunc: function () { if (this.opts.effect === 'default') { if (!this.opts.customToggle) { this.layerWrap.stop(true, true).hide(); } this.closeAfterBugFunc(); } else if (this.opts.effect === 'fade') { var step1 = TweenLite.to(this.layerBody, this.opts.duration / 1000, { overflow: 'hidden', opacity: 0, scale: 1, onComplete: $.proxy(function () { this.layerBody.css('overflow', ''); var step2 = TweenLite.to(this.layerWrap, this.opts.duration / 1000, { opacity: 0, display: 'none', onComplete: $.proxy(this.closeAfterBugFunc, this) }); this.tweens.instance.push(step2); }, this) }); this.tweens.instance.push(step1); } else if (this.opts.effect === 'slide') { var speed = 1; TweenLite.set(this.layerBody, { overflow: 'hidden' }); var step1 = TweenLite.to(this.dimmedObj, speed, { opacity: 0 }); var step2 = TweenLite.to(this.layerObj, speed, { y: -Util.winSize().h, onComplete: $.proxy(function () { this.closeAfterBugFunc(); this.dimmedObj.hide(); this.layerWrap.hide(); this.layerBody.css('overflow', ''); this.layerObj.hide(); }, this) }); this.tweens.instance.push(step1); this.tweens.instance.push(step2); } else if (this.opts.effect === 'slide2') { var speed = 0.5; var step1 = TweenLite.to(this.dimmedObj, speed, { opacity: 0 }); var step2 = TweenLite.to(this.layerObj, speed, { y: Util.winSize().h, onComplete: $.proxy(function () { this.closeAfterBugFunc(); this.dimmedObj.hide(); this.layerWrap.hide(); this.layerBody.css('overflow', ''); this.layerObj.hide(); }, this) }); this.tweens.instance.push(step1); this.tweens.instance.push(step2); } else if (this.opts.effect === 'flip') { var moveDistance = -this.opts.flip.rotateStart - this.opts.flip.rotateEnd, moveOneStep = (moveDistance / this.opts.duration) * (1000 / this.opts.fps), currentStep = 0; this.opts.flip.moveData = { startDistance: this.opts.flip.rotateEnd, endDistance: -this.opts.flip.rotateStart, moveDistance: moveDistance, moveOneStep: moveOneStep, currentStep: currentStep }; this.initStep(this.opts.flip.moveData); this.flipFunc(); } }, closeAfterBugFunc: function () { win.clearTimeout(this.closeAfterTimeout); this.closeAfterTimeout = win.setTimeout($.proxy(this.onLayerCloseAfter, this), 30); }, popupOpenPropsControl: function () { var pluginOpenPropDatas = hasLayer; for (var openPropsMin = 0, openPropsMax = pluginOpenPropDatas.length; openPropsMin < openPropsMax; openPropsMin++) { var pluginOpenPropData = pluginOpenPropDatas[openPropsMin], pluginPopupWrap = pluginOpenPropData['POPUPWRAP'][0]; if (pluginPopupWrap === this.layerWrap[0]) { pluginOpenPropDatas[openPropsMin] = null; } } for (var delPropsMin = 0, delPropsMax = pluginOpenPropDatas.length; delPropsMin < delPropsMax; delPropsMax--) { var pluginDelPropData = pluginOpenPropDatas[delPropsMax - 1]; if (pluginDelPropData === null) { pluginOpenPropDatas.splice(delPropsMax - 1, 1); } } }, onLayerCloseAfter: function () { // const curScroll = window.pageYOffset; if (this.opts.openerTarget !== null) { // if (this.beforeScroll == curScroll) { // this.opts.openerTarget.focus(); // } if (this.closeType !== false) { // if (this.opts.useCloseFocus) { this.opts.openerTarget.focus(); // } } this.opts.openerTarget = null; } this.opts.useCloseFocus = true; this.bindCloseEvents(false); this.outCallback('layerCloseAfter'); }, ariaAccessbility: function (type, layerTarget) { // var layerWrap = layerTarget, // layerParents = layerWrap.parents(), // pluginOpenPropDatas = hasLayer; // if (type) { // layerWrap.removeAttr('aria-hidden').siblings().attr('aria-hidden', 'true'); // for (var i = 0, max = layerParents.length; i < max; i++) { // var _target = layerParents.eq(i); // _target.siblings().attr('aria-hidden', 'true'); // } // } else { // layerWrap.siblings().removeAttr('aria-hidden'); // for (var i = 0, max = layerParents.length; i < max; i++) { // var _target = layerParents.eq(i); // _target.siblings().removeAttr('aria-hidden'); // } // if (pluginOpenPropDatas.length) { // var pluginPopupWrap = pluginOpenPropDatas[pluginOpenPropDatas.length - 1]['POPUPWRAP']; // this.ariaAccessbility(true, pluginPopupWrap); // } // } }, outCallback: function (ing) { var callbackObj = this.opts.on[ing]; if (ing === 'layerMove') { this.layerWrap.trigger(ing, arguments[1], arguments[2], this); } else { this.layerWrap.trigger(ing, this); } if (callbackObj == null) return; if (ing === 'layerMove') { callbackObj(arguments[1], arguments[2], this); } else { callbackObj(this); } }, styleDestroy: function () { this.dimmedObj.attr('style', ''); this.layerWrap.attr('style', ''); this.layerBody.attr('style', ''); this.layerObj.attr('style', ''); }, destroy: function () { this.tweens.kill(); if (this.trapfocus) { this.trapfocus.destroy(); } this.styleDestroy(); this.bindEvents(false); this.bindOutsideEvents(false); this.bindCloseEvents(false); } }; return HiveLayer; })(); return HiveLayer; });// (function () {// 'use strict';// window.WATCH6 = window.WATCH6 || {};// const Util = win.WATCH6.UTILS;// class pageNav {// constructor(el = container, args) {// const defParams = {// el,// subNav: '#subnav',// visSections: '.js-visible',// contentsEl: '#contents',// footerEl: '.footer',// sectionEl: '.feature-section',// pageNav: '.page-nav',// pageNavList: '.page-nav__list',// pageNavItem: '.page-nav__item',// pageNavItemLink: '.page-nav__item-link',// navCurrentButton: '.page-nav__current',// ariaAttr: {// hidden: 'aria-hidden',// expanded: 'aria-expanded',// selected: 'aria-selected'// },// classes: {// isActive: 'is_active',// isOpened: 'is_opened'// },// resizeStart: null// };// this.opts = defParams;// this.classes = defParams.classes;// this.el = document.querySelector(el);// this.init();// }// init() {// if (this.el === null) return;// this.setElements();// this.initOpts();// this.bindEvents();// this.getSectionPos();// }// setElements() {// this.subNavEl = this.el.querySelector(this.opts.subNav);// this.contentsEl = this.el.querySelector(this.opts.contentsEl);// this.footerEl = this.el.querySelector(this.opts.footerEl);// this.bodyChild = document.body.children;// this.sectionEl = this.contentsEl.querySelectorAll(this.opts.sectionEl);// this.pageNavEl = this.contentsEl.querySelector(this.opts.pageNav);// this.pageNavList = this.pageNavEl.querySelector(this.opts.pageNavList);// this.pageNavItem = this.pageNavList.querySelectorAll(this.opts.pageNavItem);// this.pageNavItemLink = this.pageNavList.querySelectorAll(this.opts.pageNavItemLink);// this.navCurrentButton = this.pageNavEl.querySelector(this.opts.navCurrentButton);// }// initOpts() {// this.lastScrollY = 0;// this.oldSectionValue;// this.isClickPageNav = false;// }// bindEvents() {// const _this = this;// window.addEventListener('resize', this.resizeFunc.bind(this));// window.addEventListener('scroll', this.onScrollHandler.bind(this));// window.addEventListener('wheel', this.activeScrollHandler.bind(this));// window.addEventListener('touchmove', this.activeScrollHandler.bind(this));// this.navCurrentButton.addEventListener('click', this.onClickCurrentBtn.bind(this));// this.pageNavItemLink.forEach(el => {// el.addEventListener('click', this.onClickPageNavItem.bind(_this));// });// }// activeScrollHandler() {// if (this.isClickPageNav) {// this.isClickPageNav = false;// }// }// getSectionPos() {// const _this = this;// this.sectionPos = [];// $(this.sectionEl).each(function (index, el) {// var top = el.offsetTop;// var btm = top + el.clientHeight;// if (index == 0) {// top = 0;// btm = _this.subNavEl.clientHeight + el.clientHeight;// }// _this.sectionPos.push({ top, btm });// });// }// onClickCurrentBtn() {// const _this = this;// this.pageNavList.classList.toggle(this.classes.isOpened);// if (this.pageNavList.classList.contains(this.classes.isOpened)) {// _this.pageNavList.setAttribute(this.opts.ariaAttr.expanded, 'true');// } else {// _this.pageNavList.setAttribute(this.opts.ariaAttr.expanded, 'false');// }// }// onClickPageNavItem(e) {// this.isClickPageNav = true;// var target = e.target;// var targetText = target.innerText;// var targetIdx = $(target).parent().index();// this.pageNavItemLink.forEach(el => {// el.classList.remove(this.classes.isActive);// el.setAttribute(this.opts.ariaAttr.selected, 'false');// });// target.setAttribute(this.opts.ariaAttr.selected, 'true');// target.classList.add(this.classes.isActive);// this.navCurrentButton.innerText = targetText;// GALAXY.setSmoothScrollTop(this.sectionPos[targetIdx].top, 1500);// }// onScrollHandler() {// const _this = this;// const scrollY = window.scrollY;// const direction = scrollY > this.lastScrollY ? 'down' : 'up';// this.lastScrollY = scrollY;// if (!this.isClickPageNav) {// if (direction == 'up') {// _this.pageNavEl.classList.add(_this.classes.isActive);// _this.navCurrentButton.setAttribute(this.opts.ariaAttr.hidden, 'false');// } else {// _this.pageNavEl.classList.remove(_this.classes.isActive);// _this.navCurrentButton.setAttribute(this.opts.ariaAttr.hidden, 'true');// if (_this.pageNavList.classList.contains(_this.classes.isOpened)) {// _this.pageNavList.classList.remove(_this.classes.isOpened);// _this.pageNavList.setAttribute(this.opts.ariaAttr.expanded, 'false');// _this.navCurrentButton.setAttribute(this.opts.ariaAttr.expanded, 'false');// }// }// this.sectionPos.forEach(function (el, index) {// if (scrollY >= _this.sectionPos[index].top && scrollY <= _this.sectionPos[index].btm) {// if (_this.sectionEl[index].getAttribute('data-section') == _this.oldSectionValue) return;// _this.pageNavItem.forEach(el => {// el.querySelector(_this.opts.pageNavItemLink).classList.remove(_this.classes.isActive);// el.querySelector(_this.opts.pageNavItemLink).setAttribute(_this.opts.ariaAttr.selected, 'false');// });// _this.pageNavItem[index].querySelector(_this.opts.pageNavItemLink).classList.add(_this.classes.isActive);// _this.pageNavItem[index].querySelector(_this.opts.pageNavItemLink).setAttribute(_this.opts.ariaAttr.selected, 'true');// _this.oldSectionValue = _this.sectionEl[index].getAttribute('data-section');// _this.navCurrentButton.innerText = _this.sectionEl[index].getAttribute('data-section');// }// });// }// }// resizeFunc() {// this.winWidth = Util.winSize().w;// if (this.opts.resizeStart === null) {// this.opts.resizeStart = this.winWidth;// this.resizeAnimateFunc();// }// window.clearTimeout(this.resizeEndTime);// this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150);// }// resizeEndFunc() {// this.opts.resizeStart = null;// Util.cancelAFrame.call(window, this.resizeRequestFrame);// this.getSectionPos();// }// resizeAnimateFunc() {// this.setLayout();// this.resizeRequestFrame = Util.requestAFrame.call(window, this.resizeAnimateFunc.bind(this));// }// setLayout() {// if (this.winWidth > Util.RESPONSIVE.MOBILE.WIDTH) {// if (this.opts.viewType != 'PC') {// this.opts.viewType = 'PC';// }// } else {// if (this.opts.viewType != 'MO') {// this.opts.viewType = 'MO';// }// }// }// }// WATCH6.pageNav = pageNav;// })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class SubNav { constructor(el = container, args) { const defParams = { navItems: 'ul li>a', navDests: '[class*="js-nav-"]', visSections: '.js-visible', resizeStart: null, classes: { isOn: 'on' } }; this.opts = defParams; this.classes = defParams.classes; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null) return; this.setElements(); this.initOpts(); this.bindEvents(); } setElements() { this.navItems = UTILS.convertArray(this.el.querySelectorAll(this.opts.navItems)); this.navDests = document.querySelectorAll(this.opts.navDests); this.visSections = UTILS.convertArray(document.querySelectorAll(this.opts.visSections)); } initOpts() { this.visCount = -1; this.visSections.forEach(visSection => { visSection.dataset.visIndex = visSection.classList.contains('js-count') ? ++this.visCount : this.visCount; }); this.winOffsetTop = window.pageYOffset; } bindEvents() { this.onScrollHandler(); window.addEventListener('resize', this.onResizeHandler.bind(this)); window.addEventListener('scroll', this.onScrollHandler.bind(this)); const locationHash = window.location.hash; this.navItems.forEach((navItem, index) => { if (navItem.getAttribute('href').indexOf('#') > -1) { navItem.dataset.navIndex = index; navItem.addEventListener('click', this.onNavItemClickEvent.bind(this)); } if (!!locationHash && navItem.getAttribute('href').indexOf(locationHash) > -1) { navItem.parentNode.classList.remove(this.classes.isOn); navItem.click(); } }); } onNavItemClickEvent(e) { e.preventDefault(); const currentTarget = e.target; const parent = currentTarget.parentNode; if (!this.el.classList.contains('hold') && !parent.classList.contains(this.classes.isOn)) { this.navItems.forEach(navItem => { navItem.parentNode.classList.remove(this.classes.isOn); }); if (!parent.classList.contains(this.classes.isOn)) parent.classList.add(this.classes.isOn); const navIndex = currentTarget.dataset.navIndex; const navDest = this.navDests[navIndex]; const navDestRect = navDest.getBoundingClientRect(); const paddingTop = parseInt(window.getComputedStyle(navDest).paddingTop); const winOffsetMiddle = (window.innerHeight - (navDestRect.height - paddingTop) + UTILS.getNavHeight()) / 2; let destYPos = 0; if (navDest.classList.contains('js-nav-center')) { const navDestOffsetMiddle = this.winOffsetTop + navDestRect.top + paddingTop; destYPos = navDestOffsetMiddle - winOffsetMiddle; } else { const navDestOffsetTop = this.winOffsetTop + navDestRect.top - UTILS.getNavHeight(); destYPos = navDestOffsetTop; } if (destYPos < 150) destYPos = 0; this.el.classList.add('hold'); GALAXY.setSmoothScrollTop(destYPos, 1500, () => { if (this.el.classList.contains('hold')) this.el.classList.remove('hold'); if (GALAXY.header) GALAXY.header.resetSubNav(); }); } } onScrollHandler() { this.winOffsetTop = window.pageYOffset; var winOffsetMiddle = (window.innerHeight + UTILS.getNavHeight()) / 2; this.visSections.forEach(visSection => { var visibleRect = visSection.getBoundingClientRect(); var visibleTop = this.winOffsetTop + visibleRect.top; var visibleBottom = this.winOffsetTop + visibleRect.bottom; if (this.winOffsetTop + winOffsetMiddle >= visibleTop && this.winOffsetTop + winOffsetMiddle <= visibleBottom) { var visIndex = visSection.dataset.visIndex; this.navItems.forEach((navItem, index) => { if (index != visIndex && navItem.parentNode.classList.contains(this.classes.isOn)) { navItem.parentNode.classList.remove(this.classes.isOn); } }); var parent = this.navItems[visIndex].parentNode; if (!parent.classList.contains(this.classes.isOn)) { parent.classList.add(this.classes.isOn); if (!this.el.classList.contains('hold') && parent.classList.contains(this.classes.isOn)) { if (GALAXY.header) GALAXY.header.resetSubNav(); } } } }); } onResizeHandler() { if (UTILS.winSize().w === this.winWidth) return; this.winWidth = UTILS.winSize().w; if (this.opts.resizeStart == null) { this.opts.resizeStart = this.winWidth; this.resizeAnimateFunc(); } window.clearTimeout(this.resizeEndTime); this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150); } resizeAnimateFunc() { this.onScrollHandler(); this.resizeRequestFrame = UTILS.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)); } resizeEndFunc() { this.opts.resizeStart = null; UTILS.cancelAFrame.call(window, this.resizeRequestFrame); } } WATCH6.SubNav = SubNav; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Band { constructor(el = container, args) { const defParams = { el, videoElement: '.video__container', featureHide: 'is-feature-hide' } this.opts = defParams; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.buildVideoPlayer(); } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement); } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { if (this.videoPlayer.instance !== null) return; this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el }) } }; this.videoPlayer.build(); } } WATCH6.Band = Band; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Battery { constructor(el = container, args) { const defParams = { el, popupEl: '.wearable-watch-battery-processor__popup', processorLayerEl: '.wearable-watch-battery-processor__popup.processor-popup', batteryLayerEl: '.wearable-watch-battery-processor__popup.battery-popup', videoElement: '.video__container', featureHide: 'is-feature-hide', resizeStart: null }; this.opts = defParams; this.classes = defParams.classes; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.buildVideoPlayer(); this.buildLayer(); this.bindEvents(); } setElements() { this.processorLayerEl = this.el.querySelector(this.opts.processorLayerEl); this.batteryLayerEl = this.el.querySelector(this.opts.batteryLayerEl); this.videoElement = this.el.querySelectorAll(this.opts.videoElement); this.processorVideoElement = this.processorLayerEl.querySelector(this.opts.videoElement); this.batteryVideoElement = this.batteryLayerEl.querySelector(this.opts.videoElement); } bindEvents() { window.addEventListener('resize', this.onResizeHandler.bind(this)); } onResizeHandler() { if (UTILS.winSize().w === this.winWidth) return; this.winWidth = UTILS.winSize().w; if (this.opts.resizeStart == null) { this.opts.resizeStart = this.winWidth; this.resizeAnimateFunc(); } window.clearTimeout(this.resizeEndTime); this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150); } resizeAnimateFunc() { this.setLayout(); this.resizeRequestFrame = UTILS.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)); } resizeEndFunc() { this.opts.resizeStart = null; UTILS.cancelAFrame.call(window, this.resizeRequestFrame); } onResponsiveChange() { if (this.processorLayerEl.style.display === 'block') { this.videoPlayer.change(this.processorVideoElement); } if (this.batteryLayerEl.style.display === 'block') { this.videoPlayer.change(this.batteryVideoElement); } } setLayout() { if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; if (this.currentDevice !== this.prevDevice) { this.onResponsiveChange(); } this.prevDevice = this.currentDevice; } buildVideoPlayer() { this.videoPlayer = { instance: [], load: (videoElement) => { if (!this.videoPlayer.instance.length) return; this.videoPlayer.instance.forEach((videoPlayer) => { videoPlayer.onLoad(videoElement); }) }, reset: (videoElement) => { if (!this.videoPlayer.instance.length) return; this.videoPlayer.instance.forEach((videoPlayer) => { videoPlayer.onReset(videoElement); }) }, play: (videoElement) => { if (!this.videoPlayer.instance.length) return; this.videoPlayer.instance.forEach((videoPlayer) => { videoPlayer.onPlay(videoElement); }) }, change: (videoElement) => { if (!this.videoPlayer.instance.length) return; this.videoPlayer.instance.forEach((videoPlayer) => { videoPlayer.onChange(videoElement); }) }, build: () => { if (this.videoPlayer.instance.length) return; this.videoElement.forEach((videoElement, index) => { this.videoPlayer.instance.push(new WATCH6.VideoPlayer(videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.popupEl })); }) } }; this.videoPlayer.build(); } buildLayer() { this.layer = { instance: [], build: () => { if (this.layer.instance.length) return; this.layer.instance.push(new HiveLayer(this.opts.processorLayerEl, { effect: 'default', on: { layerOpenBefore: () => { if (this.processorVideoElement) { this.videoPlayer.load(this.processorVideoElement); } }, layerCloseAfter: () => { this.videoPlayer.reset(this.processorVideoElement); } } })); this.layer.instance.push(new HiveLayer(this.opts.batteryLayerEl, { effect: 'default', on: { layerOpenBefore: () => { if (this.batteryVideoElement) { this.videoPlayer.load(this.batteryVideoElement); } }, layerCloseAfter: () => { this.videoPlayer.reset(this.batteryVideoElement); } } })); } }; this.layer.build(); } } WATCH6.Battery = Battery; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Compare { constructor(el = container, args) { const defParams = { el, trackElement: '.wearable-watch-compare__track', fixedElement: '.wearable-watch-compare__fixed', compareWrapEl: '.wearable-watch-compare__list-wrap', compareListEl: '.wearable-watch-compare__list', compareItemEl: '.wearable-watch-compare__list-item', compareImgEl: '.wearable-watch-compare__product-img', compareInfo: '.wearable-watch-compare__info', compareInfoItem: '.wearable-watch-compare__info-item', navigationEl: '.wearable-watch-compare__navigation', colorChipEl: '.wearable-watch-compare__color-chip', colorList: '.wearable-watch-compare__color', tabPanel: '.wearable-watch-compare__product', tabPanels: '.wearable-watch-compare__product-item', scrollbarEl: '.swiper-scrollbar', viewMoreCta: '.view-more__cta', featureHide: 'is-feature-hide', viewmore: '.viewmore', collapse: '.collapse', matchElements: [ '.wearable-watch-compare__info-item--display', '.wearable-watch-compare__info-item--screen', '.wearable-watch-compare__info-item--charge', '.wearable-watch-compare__info-item--sensor', '.wearable-watch-compare__info-item--material', '.wearable-watch-compare__info-item--battery', '.wearable-watch-compare__info-item--sleep', '.wearable-watch-compare__info-item--cycle', '.wearable-watch-compare__info-item--composition', '.wearable-watch-compare__info-item--route', '.wearable-watch-compare__info-item--durability', '.wearable-watch-compare__info-item--size', '.wearable-watch-compare__info-item--weight', '.wearable-watch-compare__cta', '.wearable-watch-compare__size', '.wearable-watch-compare__color', '.wearable-watch-common__sub-headline' ], matchCommonOpts: { childElement: '.wearable-watch-compare__list-item', useDestroyHeight: false, breakpoints: {} }, classes: { isFixed: 'is-fixed', isCollapse: 'is-collapse', isExpanded: 'is-expanded' }, resizeStart: null, on : { updateImageLoader: null } }; this.opts = UTILS.def(defParams, args || {}); this.classes = defParams.classes; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.initOpts(); this.initLayout(); this.bindEvents(); this.buildHeightMatch(); this.buildSwiper(); this.buildCompareItem(); this.onResizeHandler(); } initOpts() { this.getCurrentDevice(); this.scroller = null; this.prevDevice = null; this.expanded = false; this.scrollMoveState = false; this.firstImageLoad = false; this.viewMoreCtaTagging = this.viewMoreCta.getAttribute('data-omni'); this.viewMoreTagging = this.viewMoreCta.querySelector(this.opts.viewmore).getAttribute('data-tagging'); this.collapseTagging = this.viewMoreCta.querySelector(this.opts.collapse).getAttribute('data-tagging'); } initLayout() { // const buildSlideLength = this.currentDevice === 'mobile' ? 2 : 3; // if (this.el.querySelectorAll('.swiper-slide').length >= buildSlideLength) { // this.navigationEl.style.display = 'block'; // } this.updateViewMoreHeight(); // this.trackElement.style.height = this.compareWrapEl. } setElements() { this.trackElement = this.el.querySelector(this.opts.trackElement); this.fixedElement = this.el.querySelector(this.opts.fixedElement); this.compareWrapEl = this.el.querySelector(this.opts.compareWrapEl); this.compareListEl = this.compareWrapEl.querySelector(this.opts.compareListEl); this.contentsEl = this.el.querySelectorAll(this.opts.colorChipEl); this.compareItemEl = this.compareWrapEl.querySelectorAll(this.opts.compareItemEl); this.compareInfo = this.el.querySelectorAll(this.opts.compareInfo); this.viewMoreCta = this.el.querySelector(this.opts.viewMoreCta); this.navigationEl = this.el.querySelector(this.opts.navigationEl); this.scrollbarEl = this.el.querySelector(this.opts.scrollbarEl); } bindEvents() { window.addEventListener('load', this.onLoadHandler.bind(this)); window.addEventListener('resize', this.onResizeHandler.bind(this)); window.addEventListener('scroll', this.onScrollHandler.bind(this)); this.viewMoreCta.addEventListener('click', this.onClickViewMoreCta.bind(this)); } getCurrentDevice() { this.winWidth = UTILS.winSize().w; if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; this.prevDevice = this.currentDevice; } updateViewMoreHeight() { if (this.expanded) { this.viewMoreCta.classList.add(this.classes.isCollapse); this.el.classList.add(this.classes.isExpanded); this.viewMoreCta.setAttribute('data-omni', this.viewMoreCtaTagging + this.collapseTagging); this.viewMoreCta.setAttribute('ga-la', this.viewMoreCtaTagging + this.collapseTagging); this.heightMatch.reInit(); } else { this.viewMoreCta.classList.remove(this.classes.isCollapse); this.el.classList.remove(this.classes.isExpanded); this.viewMoreCta.setAttribute('data-omni', this.viewMoreCtaTagging + this.viewMoreTagging); this.viewMoreCta.setAttribute('ga-la', this.viewMoreCtaTagging + this.viewMoreTagging); } } updateImageLoader(el) { this.outCallback('updateImageLoader', el); this.firstImageLoad = true; } buildHeightMatch() { this.heightMatch = { instance: [], reInit: () => { if (!this.heightMatch.instance.length) return; this.heightMatch.instance.forEach((instance) => { instance.reInit(); }); }, initLayout: () => { for (let i = 0, max = this.opts.matchElements.length; i < max; i++) { const sTarget = this.opts.matchElements[i]; const sJsClass = 'js-' + sTarget.split('.')[1]; for (let j = 0, jmax = this.compareItemEl.length; j < jmax; j++) { const listTarget = this.compareItemEl[j]; const usedJsClass = listTarget.querySelector('.' + sJsClass); if (usedJsClass === null) { const tag = document.createElement('div'); const targetHTML = listTarget.querySelector(sTarget); tag.innerHTML = targetHTML.innerHTML; tag.classList.add(sJsClass); targetHTML.innerHTML = ''; targetHTML.appendChild(tag); } } } }, build: () => { this.heightMatch.initLayout(); const callbackFunc = { column: this.compareItemEl.length }; UTILS.def(this.opts.matchCommonOpts, callbackFunc); for (let i = 0, max = this.opts.matchElements.length; i < max; i++) { const sTarget = this.opts.matchElements[i]; const personOpts = { pushElement: '.' + sTarget.split('.')[1], childElement: this.opts.compareItemEl, matchElement: '.js-' + sTarget.split('.')[1] }; const matchCommonOpts = JSON.parse(JSON.stringify(this.opts.matchCommonOpts)); UTILS.def(matchCommonOpts, personOpts); this.heightMatch.instance.push(new WATCH6.HeightMatch(this.opts.compareWrapEl, matchCommonOpts)); } } }; this.heightMatch.build(); } buildCompareItem() { this.compareItem = { instance: [], build: () => { if (this.compareItem.instance.length) return; this.compareItemEl.forEach(compareItemEl => { this.compareItem.instance.push(new WATCH6.CompareItem(compareItemEl, { on : { updateImageLoader: (el) => { // if (el.classList.contains('js-start-img-src')) { // this.outCallback('updateImageLoader', new Array(el)); // } } } })); }) } } this.compareItem.build(); } buildSwiper() { this.swiper = { instance: null, options: { freeMode: true, slidesPerView: 'auto', direction: 'horizontal', a11y: false, scrollbar: { el: this.opts.scrollbarEl } }, destroy: () => { if (this.swiper.instance === null) return; this.swiper.instance.destroy(); this.swiper.instance = null; }, updateTranslate: (translate) => { if (this.swiper.instance === null) return; this.swiper.instance.setTranslate(-translate); }, updateLayout: () => { if (this.swiper.instance === null) return; this.swiperWidth = this.compareWrapEl.getBoundingClientRect().width; this.swiperListWidth = this.swiper.instance.virtualSize; }, build: () => { if (this.winWidth < 1024) { if (this.currentDevice !== 'mobile') { if (this.compareItemEl.length <= 3) { this.swiper.destroy(); return; } } if (this.swiper.instance !== null) return; this.swiper.instance = new Swiper(this.compareWrapEl, this.swiper.options); this.swiper.updateLayout(); } else { this.swiper.destroy(); } } }; this.swiper.build(); } onClickViewMoreCta(e) { e.preventDefault(); this.expanded = !this.expanded; this.updateViewMoreHeight(); } onLoadHandler() { this.heightMatch.reInit(); this.onResponsiveChange(); this.onScrollHandler(); window.removeEventListener('load', this.onLoadHandler.bind(this)); } onScrollHandler() { this.scrollY = window.scrollY; const _this = this; const direction = this.scrollY > this.lastScrollY ? 'down' : 'up'; const windowHeight = window.innerHeight; const winScrollTop = UTILS.getScroll().top - windowHeight; const winScrollBottom = UTILS.getScroll().bottom; const compareElOffset = UTILS.getOffset(this.el); const compareWrapWidth = this.swiperWidth; const compareWrapHeight = UTILS.getHeight(this.compareWrapEl); const compareWrapOffset = UTILS.getOffset(this.compareWrapEl); const compareListWidth = this.swiperListWidth; const scrollLeftValue = Math.ceil(compareListWidth - compareWrapWidth); const trackTopOffset = UTILS.getOffset(this.trackElement).top - windowHeight; const trackHeight = Math.abs(this.trackElement.clientHeight); const scrollTop = winScrollTop - trackTopOffset + UTILS.getNavHeight(); const scrollBottom = winScrollBottom - trackTopOffset; const calProgress = scrollTop / trackHeight * 100; if ( ((winScrollBottom > compareElOffset.top && winScrollTop <= compareElOffset.top) || (winScrollTop < compareElOffset.bottom && winScrollBottom > compareElOffset.bottom) || (winScrollTop < compareElOffset.top && winScrollBottom > compareElOffset.bottom) || (winScrollTop > compareElOffset.top && winScrollBottom < compareElOffset.bottom)) ) { if (!this.firstImageLoad) { const el = this.el.querySelectorAll('.js-start-img-src'); this.updateImageLoader(el); } } if (UTILS.getScroll().top + UTILS.getNavHeight() >= compareWrapOffset.top && winScrollBottom <= compareWrapOffset.bottom) { if (!this.el.classList.contains(this.classes.isFixed)) { this.el.classList.add(this.classes.isFixed) } } else { if (this.el.classList.contains(this.classes.isFixed)) { this.el.classList.remove(this.classes.isFixed) } } this.lastScrollY = scrollY; } onResizeHandler() { if (UTILS.winSize().w === this.winWidth) return; this.winWidth = UTILS.winSize().w; if (this.opts.resizeStart == null) { this.opts.resizeStart = this.winWidth; this.resizeAnimateFunc(); } window.clearTimeout(this.resizeEndTime); this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150); } resizeAnimateFunc() { this.setLayout(); this.updateViewMoreHeight(); this.swiper.build(); this.resizeRequestFrame = UTILS.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)); } resizeEndFunc() { this.opts.resizeStart = null; this.updateViewMoreHeight(); this.swiper.build(); UTILS.cancelAFrame.call(window, this.resizeRequestFrame); } setLayout() { if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; if (this.currentDevice !== this.prevDevice) { this.onResponsiveChange(); } this.prevDevice = this.currentDevice; } onResponsiveChange() {} outCallback(ing, param) { var callbackObj = this.opts.on[ing]; if (callbackObj == null) return; callbackObj(param); } } WATCH6.Compare = Compare; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class CompareItem { constructor(el = container, args) { const defParams = { el, productEl: '.wearable-watch-compare__product', productItem: '.wearable-watch-compare__product-item', productImage: '.wearable-watch-compare__product-image', sizeEl: '.wearable-watch-compare__size', sizeCta: '.wearable-watch-compare__size-cta', colorEl: '.wearable-watch-compare__color', colorItem: '.wearable-watch-compare__color-item', colorChip: '.wearable-watch-compare__color-chip', buyNowCta: '.buy__cta', learnMoreCta: '.learn-more__cta', classes: { isActive: 'is-active' }, resizeStart: null }; this.opts = defParams; this.classes = defParams.classes; this.el = el; this.init(); } init() { if (this.el === null) return; this.setElements(); this.initOpts(); this.initLayout(); this.bindEvnts(); } initOpts() { this.currentProduct = this.el.dataset.modelName; this.currentSize = this.el.dataset.defaultSize; this.currentColor = {} this.colorItem.forEach((colorItem) => { let activeColorItem = colorItem.querySelector('.' + this.classes.isActive); if (!activeColorItem) { activeColorItem = colorItem.querySelectorAll(this.opts.colorChip)[0]; activeColorItem.classList.add(this.classes.isActive); } this.currentColor[activeColorItem.dataset.size] = activeColorItem.dataset.color; }); this.colorChip.forEach( colorChip => { colorChip.removeAttribute('aria-selected'); colorChip.removeAttribute('aria-hidden'); }); this.DATA = LOCAL_DATA[this.currentProduct]; } initLayout() { this.updateSizeLayout(); this.updateColorItemlayout(); this.updateColorChip(); this.updateProductItemLayout(); this.updateProductImage(); this.updateLink(); } setElements() { this.productEl = this.el.querySelector(this.opts.productEl); this.productItem = this.productEl.querySelectorAll(this.opts.productItem); this.sizeEl = this.el.querySelector(this.opts.sizeEl); this.sizeCta = this.sizeEl.querySelectorAll(this.opts.sizeCta); this.colorEl = this.el.querySelector(this.opts.colorEl); this.colorItem = this.colorEl.querySelectorAll(this.opts.colorItem); this.colorChip = this.colorEl.querySelectorAll(this.opts.colorChip); this.buyNowCta = this.el.querySelector(this.opts.buyNowCta); this.learnMoreCta = this.el.querySelector(this.opts.learnMoreCta); } bindEvnts() { this.sizeCta.forEach((sizeCta) => { sizeCta.addEventListener('click', this.handlerClickSizeCta.bind(this)); }); this.colorChip.forEach((colorChip) => { colorChip.addEventListener('click', this.handlerClickColorChip.bind(this)); }); } handlerClickColorChip(e) { const currentTarget = e.currentTarget; this.currentColor[this.currentSize] = currentTarget.dataset.color; this.updateColorChip(); this.updateProductImage(); this.updateLink(); } handlerClickSizeCta(e) { const currentTarget = e.currentTarget; this.currentSize = currentTarget.dataset.size; this.updateSizeLayout(); this.updateColorItemlayout(); this.updateProductItemLayout(); this.updateProductImage(); this.updateLink(); } updateLink() { const size = this.currentSize; const color = this.currentColor[size]; const linkData = this.DATA[size][color]; if (this.learnMoreCta) { if (linkData.hasOwnProperty('learnmore')) { this.learnMoreCta.parentElement.style.display = 'block'; this.learnMoreCta.setAttribute('href', linkData.learnmore); } else { this.learnMoreCta.parentElement.style.display = 'none'; } } if (this.buyNowCta) { if (linkData.hasOwnProperty('buynow')) { this.buyNowCta.parentElement.style.display = 'block'; this.buyNowCta.setAttribute('href', linkData.buynow); } else { this.buyNowCta.parentElement.style.display = 'none'; } } } updateSizeLayout() { this.sizeCta.forEach((sizeCta) => { if (this.currentSize === sizeCta.dataset.size) { sizeCta.classList.add(this.classes.isActive); sizeCta.setAttribute('title', 'selected'); } else { sizeCta.classList.remove(this.classes.isActive); sizeCta.removeAttribute('title'); } }); } updateColorItemlayout() { this.currentColorItem = Array.from(this.colorItem).filter((colorItem) => { if (this.currentSize === colorItem.dataset.size) { colorItem.classList.add(this.classes.isActive); return colorItem; } else { colorItem.classList.remove(this.classes.isActive); } })[0]; } updateColorChip() { const colorChip = this.currentColorItem.querySelectorAll(this.opts.colorChip); colorChip.forEach((colorChip) => { if (this.currentColor[this.currentSize] === colorChip.dataset.color) { colorChip.classList.add(this.classes.isActive); colorChip.setAttribute('title', 'selected'); } else { colorChip.classList.remove(this.classes.isActive); colorChip.removeAttribute('title'); } }); } updateProductItemLayout() { this.currentProductItem = Array.from(this.productItem).filter((productItem) => { if (this.currentSize === productItem.dataset.size) { productItem.classList.add(this.classes.isActive); return productItem; } else { productItem.classList.remove(this.classes.isActive); } })[0]; } updateProductImage() { const productImage = this.currentProductItem.querySelectorAll(this.opts.productImage); productImage.forEach((productImage) => { if (this.currentColor[this.currentSize] === productImage.dataset.color) { productImage.classList.add(this.classes.isActive); productImage.removeAttribute('tabindex'); productImage.setAttribute('aria-hidden', false); } else { productImage.classList.remove(this.classes.isActive); productImage.setAttribute('tabindex', -1); productImage.setAttribute('aria-hidden', true); } }); } } WATCH6.CompareItem = CompareItem; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Connectivity { constructor(el = container, args) { const defParams = { el, videoElement: '.video__container', featureHide: 'is-feature-hide' } this.opts = defParams; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.buildVideoPlayer(); } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement); } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { if (this.videoPlayer.instance !== null) return; this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el }) } }; this.videoPlayer.build(); } } WATCH6.Connectivity = Connectivity; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Contrast { constructor(el = container, args) { const defParams = { el, defaultBtn: '.type-default', contrastBtn: '.type-contrast', cookieName: 'highContrastMode', featureHide: 'is-feature-hide' }; this.opts = defParams; this.classes = defParams.classes; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.bindEvents(); } setElements() { this.defaultBtn = this.el.querySelector(this.opts.defaultBtn); this.defaultBtnTitle = this.defaultBtn.getAttribute('title').trim(); this.contrastBtn = this.el.querySelector(this.opts.contrastBtn); this.contrastBtnTitle = this.contrastBtn.getAttribute('title').trim(); this.cookieName = this.opts.cookieName; } bindEvents() { window.addEventListener('load', this.onLoadHandler.bind(this)); if (!!this.defaultBtn) this.defaultBtn.addEventListener('click', this.onClickDefaultBtn.bind(this)); if (!!this.contrastBtn) this.contrastBtn.addEventListener('click', this.onClickContrastBtn.bind(this)); } onLoadHandler() { this.activeContrast(); } onClickDefaultBtn(e) { e.preventDefault(); UTILS.setCookie(this.cookieName, '0', 1); this.activeContrast(); } onClickContrastBtn(e) { e.preventDefault(); UTILS.setCookie(this.cookieName, '1', 1); this.activeContrast(); } activeContrast() { var cookieValue = UTILS.getCookie(this.cookieName); if (cookieValue != null) { if (cookieValue.length && cookieValue == '1') { document.documentElement.classList.add('color_yb'); this.contrastBtn.setAttribute('title', this.contrastBtnTitle + ' selected'); this.defaultBtn.setAttribute('title', this.defaultBtnTitle); } else { document.documentElement.classList.remove('color_yb'); this.contrastBtn.setAttribute('title', this.contrastBtnTitle); this.defaultBtn.setAttribute('title', this.defaultBtnTitle + ' selected'); } } else { document.documentElement.classList.remove('color_yb'); this.contrastBtn.setAttribute('title', this.contrastBtnTitle); this.defaultBtn.setAttribute('title', this.defaultBtnTitle + ' selected'); } } } WATCH6.Contrast = Contrast; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Glass { constructor(el = container, args) { const defParams = { el, videoElement: '.video__container', featureHide: 'is-feature-hide' } this.opts = defParams; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.buildVideoPlayer(); } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement); } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { if (this.videoPlayer.instance !== null) return; this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el }) } }; this.videoPlayer.build(); } } WATCH6.Glass = Glass; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; class KeyVisual { constructor(el = container, args) { const defParams = { el, classes: { isUseBuy: 'is-use-buy', isUseRegist: 'is-use-regist', isUseOrder: 'is-use-order', isUseWhere: 'is-use-where', isUseOff: 'is-use-off' }, featureHide: 'is-feature-hide' }; this.opts = defParams; this.classes = defParams.classes; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.initLayout(); } initLayout() { this.el.classList.remove(this.classes.isUseBuy); this.el.classList.remove(this.classes.isUseRegist); this.el.classList.remove(this.classes.isUseOrder); this.el.classList.remove(this.classes.isUseWhere); this.el.classList.remove(this.classes.isUseOff); if (typeof __WATCH_USE_KV_CTA !== 'undefined' && __WATCH_USE_KV_CTA != null && __WATCH_USE_KV_CTA != undefined && __WATCH_USE_KV_CTA != '') { if (__WATCH_USE_KV_CTA == 'buy-now') { this.el.classList.add(this.classes.isUseBuy); } else if (__WATCH_USE_KV_CTA == 'pre-order') { this.el.classList.add(this.classes.isUseOrder); } else if (__WATCH_USE_KV_CTA == 'pre-registration') { this.el.classList.add(this.classes.isUseRegist); } else if (__WATCH_USE_KV_CTA == 'where-to-buy') { this.el.classList.add(this.classes.isUseWhere); } else if (__WATCH_USE_KV_CTA == 'where-to-buy') { this.el.classList.add(this.classes.isUseOff); } } else { this.el.classList.add(this.classes.isUseBuy); } } } WATCH6.KeyVisual = KeyVisual; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Monitoring { constructor(el = container, args) { const defParams = { el, videoElement: '.video__container', featureHide: 'is-feature-hide' } this.opts = defParams; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.buildVideoPlayer(); } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement); } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { if (this.videoPlayer.instance !== null) return; this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el }) } }; this.videoPlayer.build(); } } WATCH6.Monitoring = Monitoring; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Overview { constructor(el = container, args) { const defParams = { el, rootEl: '.wearable-watch', layerEl: '.wearable-watch-overview__popup', featureList: '.wearable-watch-overview__list', featureItem: '.wearable-watch-overview__list-item', featureCta: '.wearable-watch-overview__list-cta', featureBtn: '.wearable-watch-overview__list-btn', featureContent: '.wearable-watch-overview__popup-content', featurePlayer: '.wearable-watch-overview__player', storyEl: '.wearable-watch-overview__story', storySlide: '.wearable-watch-overview__story-item', indicatorList: '.wearable-watch-overview__indicator-list', indicatorItem: '.wearable-watch-overview__indicator-item', indicatorText: '.indicator__text', controlHiddenEl: '.blind', navigationPrev: '.navigation__cta-prev', navigationNext: '.navigation__cta-next', storyItemController: '.story-item__btn', storyItem: '.story-item__image', storyItemCta: '.story-item__cta', closeBtn: '.cm-layer__btn-close', videoElement: '.video__container', startImage: '.video__start-frame', endImage: '.video__end-frame', featureHide: 'is-feature-hide', initSlide: 0, infiniteRolling: true, transitionDuration: 400, widthResizeStart: null, heightResizeStart: null, classes: { loaded: 'loaded', ended: 'ended', paused: 'paused', playing: 'playing', isHover: 'is-hover', isActive: 'is-active', isPaused: 'is-paused', isHeight: 'is-height' }, thumbnailTagging: { 'sleep-tracking': { play: 'gwatch6:highlights:overview:movi-play:sleep-tracking-video', pause: 'gwatch6:highlights:overview:movi-pause:sleep-tracking-video', }, 'health': { play: 'gwatch6:highlights:overview:movi-play:health-video', pause: 'gwatch6:highlights:overview:movi-pause:health-video' }, 'display': { play: 'gwatch6:highlights:overview:movi-play:display-video', pause: 'gwatch6:highlights:overview:movi-pause:display-video' } }, popupTagging: { 'sleep-tracking': { play: 'gwatch6:highlights:overview^lypu:movi-play:sleep-tracking-video', pause: 'gwatch6:highlights:overview^lypu:movi-pause:sleep-tracking-video', }, 'health': { play: 'gwatch6:highlights:overview^lypu:movi-play:health-video', pause: 'gwatch6:highlights:overview^lypu:movi-pause:health-video' }, 'display': { play: 'gwatch6:highlights:overview^lypu:movi-play:display-video', pause: 'gwatch6:highlights:overview^lypu:movi-pause:display-video' } } }; this.opts = defParams; this.classes = defParams.classes; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.initOpts(); this.initLayout(); this.buildSwiper(); this.buildLayer(); this.buildVideoPlayer(); this.bindEvents(); } initOpts() { this.winWidth = UTILS.winSize().w; this.winHeight = UTILS.winSize().h; this.currentDevice = false; this.prevDevice = null; this.initValues(); } initValues() { this.selectedIndex = -1; } initLayout() { this.storySlide.forEach((storySlide, index) => { storySlide.setAttribute('aria-hidden', 'true'); storySlide.setAttribute('tabindex', '-1'); storySlide.querySelector(this.opts.storyItemCta).setAttribute('aria-hidden', 'true'); storySlide.querySelector(this.opts.storyItemCta).setAttribute('tabindex', '-1'); if (storySlide.querySelector(this.opts.storyItemController)) { storySlide.querySelector(this.opts.storyItemController).setAttribute('aria-hidden', 'true'); storySlide.querySelector(this.opts.storyItemController).setAttribute('tabindex', '-1'); } if (this.opts.initSlide === index) { storySlide.setAttribute('aria-hidden', 'false'); storySlide.removeAttribute('tabindex'); storySlide.querySelector(this.opts.storyItemCta).setAttribute('aria-hidden', 'false'); storySlide.querySelector(this.opts.storyItemCta).removeAttribute('tabindex'); if (storySlide.querySelector(this.opts.storyItemController)) { storySlide.querySelector(this.opts.storyItemController).setAttribute('aria-hidden', 'false'); storySlide.querySelector(this.opts.storyItemController).removeAttribute('tabindex'); } } }); this.indicatorItem.forEach(indicatorItem => { if (this.indicatorList.getAttribute('role') === 'tablist') { indicatorItem.setAttribute('aria-selected', 'false'); } }); if (!this.opts.infiniteRolling) { if (this.opts.initSlide === 0) { this.navigationPrev.style.display = 'none'; } if (this.opts.initSlide === this.storySlide.length - 1) { this.navigationNext.style.display = 'none'; } } } setElements() { this.rootEl = document.querySelector(this.opts.rootEl); this.layerEl = this.el.querySelector(this.opts.layerEl); this.videoElement = this.el.querySelectorAll(this.opts.videoElement); this.featureList = this.el.querySelector(this.opts.featureList); this.featureContent = this.el.querySelector(this.opts.featureContent); this.featureCta = this.featureList.querySelectorAll(this.opts.featureCta); this.featureBtn = this.featureList.querySelectorAll(this.opts.featureBtn); this.featurePlayer = this.featureList.querySelectorAll(this.opts.videoElement); this.storyEl = this.el.querySelector(this.opts.storyEl); this.storyItem = this.el.querySelectorAll(this.opts.storyItem); this.storySlide = this.el.querySelectorAll(this.opts.storySlide); this.storyPlayer = this.storyEl.querySelectorAll(this.opts.videoElement); this.indicatorList = this.el.querySelector(this.opts.indicatorList); this.indicatorItem = this.indicatorList.querySelectorAll(this.opts.indicatorItem); this.navigationPrev = this.el.querySelector(this.opts.navigationPrev); this.navigationNext = this.el.querySelector(this.opts.navigationNext); this.closeBtn = this.el.querySelector(this.opts.closeBtn); this.storyItemController = this.storyEl.querySelectorAll(this.opts.storyItemController); } bindEvents() { window.addEventListener('resize', this.onResizeHandler.bind(this)); this.featureCta.forEach((featureCta, index) => { featureCta.addEventListener('click', this.handleLayerOpen.bind(this, index)); }); this.indicatorItem.forEach((indicatorItem, index) => { indicatorItem.addEventListener('click', this.select.bind(this, index)); }); this.navigationPrev.addEventListener('click', this.handleNavigationPrev.bind(this)); this.navigationNext.addEventListener('click', this.handleNavigationNext.bind(this)); this.storySlide.forEach((storySlide, index) => { if (storySlide.querySelector(this.opts.storyItemCta).getAttribute('href').indexOf('#') > -1) { storySlide.querySelector(this.opts.storyItemCta).addEventListener('click', this.onStoryItemCtaClickEvent.bind(this)); } }); } unBindEvents() { this.indicatorItem.forEach((indicatorItem, index) => { indicatorItem.removeAllEventListeners('click'); }); this.featureBtn.forEach(featureBtn => { featureBtn.removeAllEventListeners('click'); }); this.storyItemController.forEach(storyItemController => { storyItemController.removeAllEventListeners('click'); }); } onStoryItemCtaClickEvent(e) { e.preventDefault(); const currentTarget = e.target; const currentHref = currentTarget.getAttribute('href'); // const bodyTop = Math.abs(JSON.parse(document.querySelector('body').style.top.split('px')[0])); const findSection = this.rootEl.querySelector(currentHref); const findSectionPos = findSection.dataset.rectTop ? findSection.dataset.rectTop : UTILS.getOffset(findSection).top - UTILS.getNavHeight(); $(this.layerEl).trigger('closeLayer', false); $('html, body').animate({ scrollTop: findSectionPos }, { duration: 1000 }); const targetFocusElement = findSection.querySelector('.wearable-watch-common__headline') ? findSection.querySelector('.wearable-watch-common__headline') : findSection.querySelector('.wearable-watch-common__sub-headline'); if (targetFocusElement) { targetFocusElement.setAttribute('tabindex', '0'); targetFocusElement.focus(); targetFocusElement.addEventListener('focusout', () => { targetFocusElement.removeAttribute('tabindex'); }); } } handleNavigationPrev() { let realIndex = this.storySwiper.instance.realIndex - 1; if (realIndex < 0) { realIndex = this.storySlide.length - 1; } this.storySwiper.instance.slideToLoop(realIndex); } handleNavigationNext() { let realIndex = this.storySwiper.instance.realIndex + 1; if (realIndex >= this.storySlide.length) { realIndex = 0; } this.storySwiper.instance.slideToLoop(realIndex); } handleLayerOpen(index, e) { e.preventDefault(); this.opts.initSlide = index; } updateControlText(target, isPlaying) { const textEl = target.querySelector(this.opts.controlHiddenEl); const isText = isPlaying ? this.globalText.play : this.globalText.stop; textEl.innerHTML = isText; } select(selectingIndex, isDelayInit = false, reiterate = false) { const selectedIndex = this.selectedIndex; if (selectedIndex !== selectingIndex || isDelayInit) { if (this.animReqId) { UTILS.cancelAFrame.call(window, this.animReqId); this.animReqId = null; } if (selectedIndex > -1) { if (this.indicatorItem[selectedIndex].classList.contains(this.classes.isActive)) { this.indicatorItem[selectedIndex].classList.remove(this.classes.isActive); this.indicatorItem[selectedIndex].removeAttribute('title'); } if (this.role === 'tablist') { this.indicatorItem[selectedIndex].setAttribute('aria-selected', 'false'); } else { this.indicatorItem[selectedIndex].removeAttribute('title'); } } if (selectingIndex < 0) { this.selectedIndex = selectingIndex; return; } this.selectedIndex = selectingIndex; if (!this.indicatorItem[this.selectedIndex].classList.contains(this.classes.isActive)) { this.indicatorItem[this.selectedIndex].classList.add(this.classes.isActive); } if (this.indicatorList.getAttribute('role') === 'tablist') { this.indicatorItem[this.selectedIndex].setAttribute('aria-selected', 'true'); } else { this.indicatorItem[this.selectedIndex].setAttribute('title', 'selected'); } this.storySwiper.instance.slideToLoop(this.selectedIndex); } } updateImageLayout() { const width = this.featureContent.clientWidth; const height = this.featureContent.clientHeight; if (width / height <= 0.56) { this.layerEl.classList.add(this.classes.isHeight); } else { this.layerEl.classList.remove(this.classes.isHeight); } } onResizeHandler() { if (UTILS.winSize().w !== this.winWidth || UTILS.winSize().h !== this.winHeight) { this.winWidth = UTILS.winSize().w; this.winHeight = UTILS.winSize().h; if (this.opts.widthResizeStart == null || this.opts.heightResizeStart == null) { this.opts.widthResizeStart = this.winWidth; this.opts.heightResizeStart = this.winHeight; this.resizeAnimateFunc(); } } window.clearTimeout(this.resizeEndTime); this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150); } resizeAnimateFunc() { this.setWidthLayout(); this.setHeightLayout(); this.resizeRequestFrame = UTILS.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)); } resizeEndFunc() { this.opts.widthResizeStart = null; this.opts.heightResizeStart = null; UTILS.cancelAFrame.call(window, this.resizeRequestFrame); } onResponsiveChange() { this.select(this.selectedIndex, true); this.featurePlayer.forEach((videoElement) => { this.videoPlayer.change(videoElement); }); if (this.layerEl.style.display === 'block') { this.storyPlayer.forEach((videoElement) => { this.videoPlayer.change(videoElement); }); } } setWidthLayout() { if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; this.updateImageLayout(); if (this.currentDevice !== this.prevDevice) { this.onResponsiveChange(); } this.prevDevice = this.currentDevice; } setHeightLayout() { this.updateImageLayout(); } buildVideoPlayer() { this.videoPlayer = { instance: [], load: (videoElement) => { if (!this.videoPlayer.instance.length) return; this.videoPlayer.instance.forEach((videoPlayer) => { videoPlayer.onLoad(videoElement); }) }, reset: (videoElement) => { if (!this.videoPlayer.instance.length) return; this.videoPlayer.instance.forEach((videoPlayer) => { videoPlayer.onReset(videoElement); }) }, play: (videoElement) => { if (!this.videoPlayer.instance.length) return; this.videoPlayer.instance.forEach((videoPlayer) => { videoPlayer.onPlay(videoElement); }) }, change: (videoElement) => { if (!this.videoPlayer.instance.length) return; this.videoPlayer.instance.forEach((videoPlayer) => { videoPlayer.onChange(videoElement); }) }, build: () => { if (this.videoPlayer.instance.length) return; this.videoElement.forEach((videoElement, index) => { const feature = videoElement.closest(this.opts.featureItem) ? this.opts.featureItem : null; this.videoPlayer.instance.push(new WATCH6.VideoPlayer(videoElement, { sectionElement: this.opts.el, videoParentElement: feature, on: { updateController: (data) => { const controllerEl = data.el; const tagging = controllerEl.dataset.tagging; const playState = data.playState ? 'pause' : 'play'; const targetTagging = controllerEl.classList.contains(this.opts.featureBtn.split('.')[1]) ? this.opts.thumbnailTagging : controllerEl.classList.contains(this.opts.storyItemController.split('.')[1]) ? this.opts.popupTagging : ''; controllerEl.setAttribute('data-omni', targetTagging[tagging][playState]); controllerEl.setAttribute('ga-la', targetTagging[tagging][playState]); } } })); }) } }; this.videoPlayer.build(); } buildSwiper() { this.storySwiper = { instance: null, options: { a11y: false, loop: this.opts.infiniteRolling, speed: this.opts.transitionDuration, effect: 'fade', touchMoveStopPropagation: true, fadeEffect: { crossFade: true }, initialSlide: this.opts.initSlide }, slideChange: () => { const realIndex = this.storySwiper.instance.realIndex; const targetSlide = this.storySlide[realIndex]; const targetVideoElement = targetSlide.querySelector(this.opts.videoElement); this.select(realIndex); if (targetVideoElement) { if (!targetVideoElement.classList.contains(this.classes.loaded)) { this.videoPlayer.load(targetVideoElement); } else { if (!UTILS.isLowNetwork()) { this.videoPlayer.play(targetVideoElement); } } } this.storySlide.forEach((storySlide, index) => { if (index !== realIndex) { const targetVideoElement = storySlide.querySelector(this.opts.videoElement); if (targetVideoElement) { this.videoPlayer.reset(targetVideoElement); } } }); }, slideChangeTransitionStart: () => { if (this.storySwiper.instance === null) return; const swiperSlide = Array.from(this.storySwiper.instance.slides); const realIndex = this.storySwiper.instance.realIndex; const targetSlide = this.storySlide[realIndex]; swiperSlide.forEach((storySlide, index) => { storySlide.setAttribute('aria-hidden', 'true'); storySlide.setAttribute('tabindex', '-1'); storySlide.querySelector(this.opts.storyItemCta).setAttribute('aria-hidden', 'true'); storySlide.querySelector(this.opts.storyItemCta).setAttribute('tabindex', '-1'); if (storySlide.querySelector(this.opts.storyItemController)) { storySlide.querySelector(this.opts.storyItemController).setAttribute('aria-hidden', 'true'); storySlide.querySelector(this.opts.storyItemController).setAttribute('tabindex', '-1'); } if (storySlide.classList.contains('swiper-slide-active')) { storySlide.setAttribute('aria-hidden', 'false'); storySlide.removeAttribute('tabindex'); storySlide.querySelector(this.opts.storyItemCta).setAttribute('aria-hidden', 'false'); storySlide.querySelector(this.opts.storyItemCta).removeAttribute('tabindex'); if (storySlide.querySelector(this.opts.storyItemController)) { storySlide.querySelector(this.opts.storyItemController).setAttribute('aria-hidden', 'false'); storySlide.querySelector(this.opts.storyItemController).removeAttribute('tabindex'); } } }); }, destroy: () => { if (this.storySwiper.instance === null) return; this.storySwiper.instance.destroy(); this.storySwiper.instance = null; }, build: () => { if (this.storySwiper.instance !== null) return; this.storySwiper.options.on = { slideChange: this.storySwiper.slideChange.bind(this), slideChangeTransitionStart: this.storySwiper.slideChangeTransitionStart.bind(this) }; this.storySwiper.options.initialSlide = this.opts.initSlide; this.storySwiper.instance = new Swiper(this.opts.storyEl, this.storySwiper.options); this.storySwiper.slideChangeTransitionStart(); } }; } buildLayer() { this.layer = { instance: null, build: () => { if (this.layer.instance !== null) return; this.layer.instance = new HiveLayer(this.opts.layerEl, { effect: 'default', on: { layerOpenBefore: () => { this.updateImageLayout(); const targetSlide = this.storySlide[this.opts.initSlide]; const targetVideoElement = targetSlide.querySelector(this.opts.videoElement); this.storySwiper.build(); this.select(this.opts.initSlide); if (targetVideoElement) { this.videoPlayer.load(targetVideoElement); } this.featurePlayer.forEach((featurePlayer) => { this.videoPlayer.reset(featurePlayer); }); }, layerOpenAfter: () => { const targetSlide = this.storySlide[this.opts.initSlide]; const targetController = targetSlide.querySelector(this.opts.storyItemController); const targetCta = targetSlide.querySelector(this.opts.storyItemCta); const targetFocus = !!targetController ? targetController : targetCta; window.setTimeout(() => { targetFocus.focus(); }, 50) }, layerCloseBefore: () => { this.featureBtn.forEach(featureBtn => { if (featureBtn.classList.contains(this.classes.isPaused)) { featureBtn.classList.remove(this.classes.isPaused); } }); }, layerCloseAfter: () => { this.storySwiper.destroy(); this.initValues(); this.indicatorItem.forEach(indicatorItem => { indicatorItem.classList.remove(this.classes.isActive); indicatorItem.removeAttribute('title'); }); this.storySlide.forEach((storySlide) => { const videoElement = storySlide.querySelector(this.opts.videoElement); this.videoPlayer.reset(videoElement); }); } } }); } }; this.layer.build(); } } WATCH6.Overview = Overview; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Progress { constructor(el = container, args) { const defParams = { el, videoElement: '.video__container', featureHide: 'is-feature-hide' } this.opts = defParams; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.buildVideoPlayer(); } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement); } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { if (this.videoPlayer.instance !== null) return; this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, visiblePoint: 0.5, videoParentElement: this.opts.el }) } }; this.videoPlayer.build(); } } WATCH6.Progress = Progress; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Screen { constructor(el = container, args) { const defParams = { el, trackElement: '.wearable-watch-screen__track', fixedElement: '.wearable-watch-screen__fixed', textElement: '.wearable-watch-screen__text', videoElement: '.video__container', videoController: '.video__controller', featureHide: 'is-feature-hide', classes: { scene01: 'scene01', scene02: 'scene02', brokenFixedAnimation: 'broken-fixed-animation' }, widthResizeStart: null, heightResizeStart: null }; this.opts = defParams; this.classes = defParams.classes; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.initOpts(); this.bindEvents(); // TODO : 최적화 필요. this.buildVideoPlayer(); this.onLoadHandler(); } setElements() { this.trackElement = this.el.querySelector(this.opts.trackElement); this.fixedElement = this.el.querySelector(this.opts.fixedElement); this.textElement = this.el.querySelector(this.opts.textElement); this.videoElement = this.el.querySelector(this.opts.videoElement); this.videoController = this.el.querySelector(this.opts.videoController); this.video = this.videoElement.querySelector('video'); // NOTE : screen webm 소스만 safari에서 load 되지 않는 이슈 대응하기 위한 직진 코드임...... this.video.querySelectorAll('source').forEach((source) => { if (document.documentElement.classList.contains('safari')) { if (source.getAttribute('type').indexOf('webm') > -1) { source.remove(); } } }) } initOpts() { this.getCurrentDevice(); this.winWidth = UTILS.winSize().w; this.winHeight = UTILS.winSize().h; this.currentAnimation = null; this.prevAnimation = null; this.scroller = null; this.brokenScroller = null; this.lastScrollY = 0; this.animationPlay = false; } initStyle() { ANIUTIL.removeClass({ targetElement: this.el, classList: [this.classes.brokenFixedAnimation, this.classes.scene01, this.classes.scene02] }); } bindEvents() { window.addEventListener('load', this.onLoadHandler.bind(this)); window.addEventListener('resize', this.onResizeHandler.bind(this)); window.addEventListener('scroll', this.onScrollHandler.bind(this)); window.addEventListener('orientationchange', this.onOrientationChange.bind(this)); } getCurrentDevice() { this.winWidth = UTILS.winSize().w; if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; } buildVideoPlayer() { this.videoPlayer = { instance: null, play: () => { if (this.videoPlayer.instance === null) return; this.videoPlayer.instance.onPlay(this.videoElement); }, build: () => { if (this.videoPlayer.instance !== null) return; this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el, on: { updatePlayState: (state) => { // 선 배포된 gro 소스와 글로벌 소스 겹치지 않기 위한 대응 코드. if (!!this.videoController) return; if (this.scroller === null || document.documentElement.classList.contains('is-animation-broken-fixed')) return; if (state) { this.el.classList.add(this.classes.scene02); } // console.log(data) }, updateController: (data) => { // 선 배포된 gro 소스와 글로벌 소스 겹치지 않기 위한 대응 코드. if (!!!this.videoController) return; if (data.playState) { if (this.scroller === null || document.documentElement.classList.contains('is-animation-broken-fixed')) return; if (!UTILS.isLowNetwork()) { this.el.classList.add(this.classes.scene02); } else { if (this.el.classList.contains(this.classes.scene02)) { this.el.classList.remove(this.classes.scene02); } window.setTimeout(() => { this.el.classList.add(this.classes.scene02); }, 10); } } } } }) } }; this.videoPlayer.build(); } onLoadHandler() { this.setWidthLayout(); this.setHeightLayout(); this.onScrollHandler(); window.removeEventListener('load', this.onLoadHandler.bind(this)); } onScrollHandler() { const _this = this; const scrollY = window.scrollY; const direction = scrollY > this.lastScrollY ? 'down' : 'up'; const scrollBottom = UTILS.getScroll().bottom; const targetOffsetTop = UTILS.getOffset(this.el).top; if (this.scroller !== null) { this.scroller.trackAnimation(function () { if (this.progress <= 0) { _this.el.classList.remove(_this.classes.scene02); } // 선 배포된 gro 소스와 글로벌 소스 겹치지 않기 위한 대응 코드. if (!!!_this.videoController && UTILS.isLowNetwork()) { if (this.progress > 40) { _this.videoPlayer.play(); } } }); } if (this.brokenScroller !== null) { this.brokenScroller.activeAnimation(); } this.lastScrollY = scrollY; } onResizeHandler() { if (UTILS.winSize().w !== this.winWidth || UTILS.winSize().h !== this.winHeight) { this.winWidth = UTILS.winSize().w; this.winHeight = UTILS.winSize().h; if (this.opts.widthResizeStart == null || this.opts.heightResizeStart == null) { this.opts.widthResizeStart = this.winWidth; this.opts.heightResizeStart = this.winHeight; this.resizeAnimateFunc(); } } window.clearTimeout(this.resizeEndTime); this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150); } resizeAnimateFunc() { this.setWidthLayout(); this.setHeightLayout(); this.resizeRequestFrame = UTILS.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)); } resizeEndFunc() { this.opts.widthResizeStart = null; this.opts.heightResizeStart = null; UTILS.cancelAFrame.call(window, this.resizeRequestFrame); } onResponsiveChange() { this.destroyScroller(); this.destroyBrokenScroller(); this.initStyle(); if (!UTILS.isFullAnimationBrokenFixed()) { this.setScroller(); } else { this.setBrokenScroller(); } } onOrientationChange() { setTimeout(() => { this.destroyScroller(); this.destroyBrokenScroller(); this.initStyle(); if (!UTILS.isFullAnimationBrokenFixed()) { this.setScroller(); } else { this.setBrokenScroller(); } }, 150); } setWidthLayout() { if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; if (this.currentDevice !== this.prevDevice) { this.onResponsiveChange(); } this.prevDevice = this.currentDevice; } setHeightLayout() { const winWidth = window.innerWidth; const winHeight = window.innerHeight; const mobileLandscapeMode = !!UTILS.isTouchDevice && window.matchMedia('(orientation: landscape)').matches; const mobilePortraitMode = !!UTILS.isTouchDevice && !window.matchMedia('(orientation: landscape)').matches; if (mobilePortraitMode && winHeight / winWidth < 1.5) { this.currentAnimation = 'broken'; } else if (mobileLandscapeMode) { this.currentAnimation = 'broken'; } else if (winHeight < 700) { this.currentAnimation = 'broken'; } else { this.currentAnimation = 'use'; } // web 모드일 경우에만 실행. if (this.currentAnimation !== this.prevAnimation && !!!UTILS.isTouchDevice) { this.onResponsiveChange(); } this.prevAnimation = this.currentAnimation; } setScroller() { this.destroyScroller(); if (this.scroller === null) { this.scroller = SCROLLER({ trackElement: this.trackElement, useFixed: false }); } } setBrokenScroller() { if (this.brokenScroller === null) { this.brokenScroller = SCROLLER({ trackElement: this.trackElement, activeElement: this.el, activeClass: this.classes.brokenFixedAnimation }); } } destroyScroller() { if (this.scroller !== null) { this.scroller.destroy(true); this.scroller = null; } } destroyBrokenScroller() { if (this.brokenScroller != null) { this.brokenScroller.destroy(true); this.brokenScroller = null; } } } WATCH6.Screen = Screen; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Snap { constructor(el = container, args) { const defParams = { el, videoElement: '.video__container', featureHide: 'is-feature-hide' } this.opts = defParams; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.buildVideoPlayer(); } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement); } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { if (this.videoPlayer.instance !== null) return; this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el }) } }; this.videoPlayer.build(); } } WATCH6.Snap = Snap; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Standalone { constructor(el = container, args) { const defParams = { el, tabEl: '.wearable-watch-standalone__tab', tabList: '.wearable-watch-standalone__tab-list', tabButtons: '.wearable-watch-standalone__tab-cta', tabPanel: '.wearable-watch-standalone__tab-panels', tabPanels: '.wearable-watch-standalone__tab-panel', featureHide: 'is-feature-hide' }; this.opts = defParams; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.buildTab(); } setElements() { this.tabEl = this.el.querySelector(this.opts.tabEl); } buildTab() { this.tab = { instance: null, build: () => { if (this.tab.instance !== null) return; this.tab.instance = new WATCH6.Tab(this.tabEl, { tabEl: this.opts.tabEl, tabList: this.opts.tabList, tabButtons: this.opts.tabButtons, tabPanel: this.opts.tabPanel, tabPanels: this.opts.tabPanels }); } }; this.tab.build(); } } WATCH6.Standalone = Standalone; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Tab { constructor(el = container, args) { const defParams = { el, tabEl: '.wearable-watch__tab', tabList: '.wearable-watch__tab-list', tabButtons: '.wearable-watch__tab-cta', tabPanel: '.wearable-watch__tab-panels', tabPanels: '.wearable-watch__tab-panel', classes: { isActive: 'is-active' }, resizeStart: null }; this.opts = UTILS.def(defParams, args || {}); this.classes = defParams.classes; this.el = el; this.init(); } init() { if (this.el === null) return; this.setElements(); this.initOpts(); this.bindEvents(); } setElements() { this.tabEl = this.el; this.tabList = this.tabEl.querySelector(this.opts.tabList); this.tabButtons = UTILS.convertArray(this.tabList.querySelectorAll(this.opts.tabButtons)); this.tabPanel = this.el.querySelector(this.opts.tabPanel); this.tabPanels = UTILS.convertArray(this.tabPanel.querySelectorAll(this.opts.tabPanels)); } initOpts() { this.currentIndex = 0; this.currentDevice = false; this.prevDevice = null; } initLayout() { this.tabButtons.forEach(function (tabButton, index) { const tabPanel = this.tabPanels[index]; if (this.currentIndex == index) { if (!tabButton.classList.contains(this.classes.isActive)) tabButton.classList.add(this.classes.isActive); if (!tabPanel.classList.contains(this.classes.isActive)) tabPanel.classList.add(this.classes.isActive); tabButton.setAttribute('aria-selected', true); UTILS.offAccessibility(tabPanel); } else { if (tabButton.classList.contains(this.classes.isActive)) tabButton.classList.remove(this.classes.isActive); if (tabPanel.classList.contains(this.classes.isActive)) tabPanel.classList.remove(this.classes.isActive); tabButton.setAttribute('aria-selected', false); UTILS.onAccessibility(tabPanel); } }); } bindEvents() { window.addEventListener('resize', this.onResizeHandler.bind(this)); this.tabButtons.forEach(tabButtons => { tabButtons.addEventListener('click', this.onClickTabButton.bind(this)); }); } unBindEvents() {} onClickTabButton(e) { const currentTarget = e.currentTarget; const currentIndex = this.tabButtons.indexOf(currentTarget); if (currentIndex == this.currentIndex) return; this.tabButtons.forEach((tabButton, index) => { const tabPanel = this.tabPanels[index]; if (currentIndex == index) { if (!tabButton.classList.contains(this.classes.isActive)) tabButton.classList.add(this.classes.isActive); if (!tabPanel.classList.contains(this.classes.isActive)) tabPanel.classList.add(this.classes.isActive); tabButton.setAttribute('aria-selected', true); UTILS.offAccessibility(tabPanel); } else { if (tabButton.classList.contains(this.classes.isActive)) tabButton.classList.remove(this.classes.isActive); if (tabPanel.classList.contains(this.classes.isActive)) tabPanel.classList.remove(this.classes.isActive); tabButton.setAttribute('aria-selected', false); UTILS.onAccessibility(tabPanel); } }); this.currentIndex = currentIndex; } onResizeHandler() { if (UTILS.winSize().w === this.winWidth) return; this.winWidth = UTILS.winSize().w; if (this.opts.resizeStart == null) { this.opts.resizeStart = this.winWidth; this.resizeAnimateFunc(); } window.clearTimeout(this.resizeEndTime); this.resizeEndTime = window.setTimeout(this.resizeEndFunc.bind(this), 150); } resizeAnimateFunc() { this.setLayout(); this.resizeRequestFrame = UTILS.requestAFrame.call(window, this.resizeAnimateFunc.bind(this)); } resizeEndFunc() { this.opts.resizeStart = null; UTILS.cancelAFrame.call(window, this.resizeRequestFrame); } onResponsiveChange() { // console.log(this.currentDevice); } setLayout() { if (this.winWidth >= RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'desktop'; else if (this.winWidth > RESPONSIVE.MOBILE.WIDTH && this.winWidth < RESPONSIVE.TABLET.WIDTH) this.currentDevice = 'tablet'; else this.currentDevice = 'mobile'; if (this.currentDevice !== this.prevDevice) { this.onResponsiveChange(); } this.prevDevice = this.currentDevice; } } WATCH6.Tab = Tab; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Train { constructor(el = container, args) { const defParams = { el, videoElement: '.video__container', featureHide: 'is-feature-hide' } this.opts = defParams; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.buildVideoPlayer(); } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement); } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { if (this.videoPlayer.instance !== null) return; this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el, videoParentElement: this.opts.el }) } }; this.videoPlayer.build(); } } WATCH6.Train = Train; })(); (function () { 'use strict'; window.WATCH6 = window.WATCH6 || {}; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class Wellness { constructor(el = container, args) { const defParams = { el, videoElement: '.video__container', featureHide: 'is-feature-hide' } this.opts = defParams; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null || this.el.classList.contains(this.opts.featureHide)) return; this.setElements(); this.buildVideoPlayer(); } setElements() { this.videoElement = this.el.querySelector(this.opts.videoElement); } buildVideoPlayer() { this.videoPlayer = { instance: null, build: () => { if (this.videoPlayer.instance !== null) return; this.videoPlayer.instance = new WATCH6.VideoPlayer(this.videoElement, { sectionElement: this.opts.el }) } }; this.videoPlayer.build(); } } WATCH6.Wellness = Wellness; })(); (function () { 'use strict'; const UTILS = WATCH6.UTILS; const RESPONSIVE = UTILS.RESPONSIVE; class InitComponents { constructor(el = container) { const defParams = { el, wrapEl: '#wrap', keyVisualEl: '.wearable-watch-kv', overviewEl: '.wearable-watch-overview', screenEl: '.wearable-watch-screen', bandEl: '.wearable-watch-band', glassEl: '.wearable-watch-glass', trainEl: '.wearable-watch-train', snapEl: '.wearable-watch-snap-remote', standaloneEl: '.wearable-watch-standalone', monitoringEl: '.wearable-watch-monitoring', wellnessEl: '.wearable-watch-wellness', batteryEl: '.wearable-watch-battery-processor', progressEl: '.wearable-watch-progress', connectivityEl: '.wearable-watch-connectivity', compareEl: '.wearable-watch-compare', contrastEl: '.cp-high-contrast', subNavEl: '#subnav' }; this.opts = defParams; this.el = document.querySelector(el); this.init(); } init() { if (this.el === null) return; this.buildComponents(); initialize.init(); } buildComponents() { this.imageLoader = new WATCH6.ImageLoader(this.opts.el, { loadOption: [ { resolution: 1920, attribute: 'data-src-pc' }, { resolution: 1080, attribute: 'data-src-tablet' }, { resolution: 767, attribute: 'data-src-mobile' } ] }); this.videoLoader = new WATCH6.VideoLoader(this.opts.el, { notLoadElement: ['.cm-layer'], loadOption: [ { resolution: 1920, attribute: 'data-media-pc' }, { resolution: 767, attribute: 'data-media-mo' } ] }); this.keyVisual = new WATCH6.KeyVisual(this.opts.keyVisualEl); this.overview = new WATCH6.Overview(this.opts.overviewEl); this.screen = new WATCH6.Screen(this.opts.screenEl); this.standalone = new WATCH6.Standalone(this.opts.standaloneEl); this.monitoring = new WATCH6.Monitoring(this.opts.monitoringEl); this.wellness = new WATCH6.Wellness(this.opts.wellnessEl); this.band = new WATCH6.Band(this.opts.bandEl); this.glass = new WATCH6.Glass(this.opts.glassEl); this.train = new WATCH6.Train(this.opts.trainEl); this.snap = new WATCH6.Snap(this.opts.snapEl); this.compare = new WATCH6.Compare(this.opts.compareEl, { on: { updateImageLoader: (el) => { this.imageLoader.setResponsiveImage(el); } } }); this.contrast = new WATCH6.Contrast(this.opts.contrastEl); this.batteryEl = new WATCH6.Battery(this.opts.batteryEl); this.progressEl = new WATCH6.Progress(this.opts.progressEl); this.connectivityEl = new WATCH6.Connectivity(this.opts.connectivityEl); window.addEventListener('load', () => { setTimeout(() => { if (window.GALAXY && window.GALAXY.isGalaxy) { this.subNav = new WATCH6.SubNav(this.opts.subNavEl); } }, 5); }); } } const initComponents = new InitComponents('.wearable-watch'); })(); });
Galaxy Watch6 | Features & Display | Samsung Schweiz (2024)
Top Articles
Latest Posts
Article information

Author: Domingo Moore

Last Updated:

Views: 5897

Rating: 4.2 / 5 (53 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Domingo Moore

Birthday: 1997-05-20

Address: 6485 Kohler Route, Antonioton, VT 77375-0299

Phone: +3213869077934

Job: Sales Analyst

Hobby: Kayaking, Roller skating, Cabaret, Rugby, Homebrewing, Creative writing, amateur radio

Introduction: My name is Domingo Moore, I am a attractive, gorgeous, funny, jolly, spotless, nice, fantastic person who loves writing and wants to share my knowledge and understanding with you.