Eine kurze Diskussion über mehrere aufgetretene Browserkompatibilitätsprobleme

Eine kurze Diskussion über mehrere aufgetretene Browserkompatibilitätsprobleme

Hintergrund

Das Lösen von Browserkompatibilitätsproblemen ist eine sehr lästige Angelegenheit. Es sind nicht viele fortgeschrittene Techniken erforderlich, aber es muss für Entwicklungsanforderungen gelöst werden. Vor kurzem bin ich bei dem Entwicklungsprojekt auf einige Kompatibilitätsprobleme gestoßen. Ich hoffe, die Lösungen für diese Probleme aufzuzeichnen und sie beim nächsten Mal direkt zu verwenden, wenn ich auf sie stoße. Ich hoffe auch, dass es für andere hilfreich sein wird.

Kompatibilitätsprobleme und -lösungen

1. Object-fit ist nicht mit IE11 und Edge kompatibel, einige CSS-Hacks können verwendet werden

Verwenden Sie background-size und background-position, um object-fit zu ersetzen und den Bildstil festzulegen

<img Klasse="Bild wird geladen" src="url"/>
.Bild wird geladen {
    Breite: 100 %;
    Höhe: 100%;
    Übergang: alle 1en leicht;
    Objekt-Passung: Abdeckung;
  }

Der obige Code kann wie folgt geändert werden:

<div Klasse="loadingImage"></div>
.Bild wird geladen {
    Breite: 100 %;
    Höhe: 100%;
    Hintergrundgröße: Abdeckung;
    Hintergrundposition: Mitte;
    Hintergrundbild: URL (URL);
}

Bei der Videowiedergabe kann object-fit:cover das Problem lösen, dass das Video nicht mit dem Bildschirm skaliert wird.

<video Klasse="video"></video>
.video {
  Breite: 100 %;
  Höhe: automatisch;
  Position: relativ;
  links: 50%;
  oben: 50 %;
  transformieren: übersetzen(-50 %, -50 %);
  Objekt-Passung: Abdeckung;
}

Sie können das folgende CSS verwenden, um das Video-Tag festzulegen und so das Problem zu lösen, dass Object-Fit mit IE und Edge nicht kompatibel ist.

<video Klasse="video"></video>
.video {
  Breite: 100 %;
  Höhe: automatisch;
  Position: relativ;
  links: 50%;
  oben: 50 %;
  transformieren: übersetzen(-50 %, -50 %);
  Objekt-Fit: Füllen;
}

2. Das Ereignis window.onload führt die Methode aus, nachdem das Bild und andere Ressourcen geladen wurden, erkennt jedoch nicht, ob die Videoressourcen geladen sind. Sie können den folgenden Code verwenden, um festzustellen, ob das Video geladen ist

<video id="video"></video>
let video = document.getElementById('video')
wenn (video.readyState === 4) {
    console.log('fertig!')
}

3. Nachdem der CSS-Übergang ausgeführt wurde, wird das Übergangsereignis ausgelöst, es besteht jedoch Kompatibilität. Sie können den folgenden Code verwenden, um die Kompatibilität zwischen Browsern zu lösen

Funktion checkTransitionEvent() {
  var el = document.createElement('div')
  var Übergänge = {
    'Übergang':'Übergangsende',
    'OÜbergang':'oÜbergangsende',
    'MozTransition':'Übergangsende',
    'WebkitTransition':'webkitTransitionEnd'
  }

  für (t in Übergängen) {
      wenn( el.style[t] !== undefiniert ){
          Rückgabeübergänge[t];
      }
  }
}

4. Onwheel-Event-Kompatibilität

Unterstützung() {
  let support = "onwheel" in document.createElement("div") ? "wheel" : // Moderne Browser unterstützen "wheel"
    document.onmousewheel !== undefiniert ? "mousewheel" : // Webkit und IE unterstützen zumindest "mousewheel"
    "DOMMausScroll";
  Unterstützung bei der Rückgabe
},

5. Die Attribute wheelDelta und detail des Radereignisses haben in verschiedenen Browsern unterschiedliche Werte. Sie können den folgenden Code verwenden, um sie zu normalisieren . Siehe https://stackoverflow.com/questions/5527601/normalizing-mousewheel-speed-across-browsers

var Radabstand = Funktion(evt){
  wenn (!evt) evt = Ereignis;
  var w=evt.wheelDelta, d=evt.detail;
  wenn (d){
    if (w) return w/d/40*d>0?1:-1; // Opera
    sonst return -d/3; // Firefox; TODO: kein /3 für OS X
  } sonst returniere mit 120; // IE/Safari/Chrome TODO: /3 für Chrome OS X
};

var Radrichtung = Funktion (evt) {
  wenn (!evt) evt = Ereignis;
  zurückgeben (evt.detail<0) ? 1 : (evt.wheelDelta>0) ? 1 : -1;
};

6. requestAnimationFrame-Kompatibilität

let cancelAnimationFrame = window.cancelAnimationFrame 
  || window.mozAnimationFrame abbrechen 
  || Funktion(id) { Zeitüberschreitung(id) löschen };
let requestAnimationFrame = window.requestAnimationFrame 
  || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame 
  || window.msRequestAnimationFrame
  || Funktion (Rückruf) { return setTimeout(Rückruf, 1000 / 60) };

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

<<:  Detaillierte Untersuchung des MySQL-Verbundindex

>>:  Tutorial zu XHTML-Webseiten

Artikel empfehlen

Natives js zum Erzielen eines Akkordeoneffekts

Auch bei der tatsächlichen Entwicklung von Websei...

Die Eisernen Gesetze der MySQL-Datenbank (Zusammenfassung)

Gute Datenbankspezifikationen tragen dazu bei, di...

Vue+Flask realisiert Videosynthesefunktion (Drag & Drop-Upload)

Inhaltsverzeichnis Wir haben in einem früheren Ar...

Eine kurze Diskussion über JS-Verpackungsobjekte

Inhaltsverzeichnis Überblick Definition Instanzme...

Beispielcode mit Vue-Router in HTML

Einführung in Vue und Vue-Router <script src=&...

Lichtschalter mit js steuern

Verwenden Sie js, um den Lichtschalter zu Ihrer R...

Mehr als 100 Zeilen Code zur Implementierung von React Drag Hooks

Vorwort Der Quellcode umfasst insgesamt nur mehr ...

Detaillierte Erklärung der Set-Datenstruktur von JavaScript

Inhaltsverzeichnis 1. Was ist Set 2. Konstruktor ...

Vue implementiert rekursiv ein dreistufiges Menü

In diesem Artikelbeispiel wird der spezifische Co...

Verwendung und Szenarioanalyse des npx-Befehls in Node.js

Tutorial zur Verwendung von NPX Heute Abend, als ...

VMware Workstation-Installation unter Linux

Vom Einsteiger bis zum Neueinsteiger ist das Linu...

So kompilieren Sie den Linux-Kernel

1. Laden Sie die erforderliche Kernel-Version her...

MySQL query_cache_type-Parameter und Verwendungsdetails

Der Zweck der Einrichtung eines MySQL-Abfragecach...

Sperrt Mysql ALTER TABLE die Tabelle beim Hinzufügen von Feldern?

Inhaltsverzeichnis Vor MySQL 5.6 Nach MySQL 5.6 Z...