Native JS-Kapselung, nahtlose Karussellfunktion

Native JS-Kapselung, nahtlose Karussellfunktion

Natives js-gekapseltes nahtloses Karussell-Plug-In. Zu Ihrer Information lautet der spezifische Inhalt wie folgt

veranschaulichen:

Dies ist ein nahtloses Karussellprogramm, das in nativer JS- und ES5-Syntax geschrieben ist. Die relevanten APIs sind im Code gekapselt, sodass Sie nach der Einführung der Karussell-JS-Datei nur zwei Codezeilen in Ihre eigene JS-Datei einfügen müssen, um einen grundlegenden nahtlosen Karusselleffekt auf der Webseite zu erzielen.

Die grundlegenden Verwendungsschritte sind: Holen Sie sich das DOM-Element-Array, übergeben Sie Parameter an das Karussellobjekt und das Karussellobjekt ruft die automatische Karussellmethode auf.

Zusätzlich zur grundlegenden automatischen Karussell-Timerfunktion unterstützt das Programm auch das Einstellen der Übergangsanimationszeit, das Einstellen eines automatischen Karussellstopps, wenn die Maus in das Element bewegt wird, das Einstellen des Karussells beim Klicken auf die linken und rechten Seitentasten und das Einstellen des Karussells beim Klicken auf die untere Taste.

Das Programm ist nicht auf CSS- oder HTML-Dateien angewiesen, erfordert jedoch, dass Ihre CSS- und HTML-Layouts bestimmten Regeln folgen.

Bitte beachten Sie, dass dieses Programm keine Kurvenübergangsgeschwindigkeit unterstützt und es manchmal zu einem Fehler kommt, bei dem das Karussellbild nach dem Wechseln des Browserfensters durcheinander gerät. Das Problem kann derzeit nicht gefunden werden.

Dieses Programm ist lediglich eine einfache Kapselung der nahtlosen Karussellfunktion durch einen Anfänger wie mich und kann nur zum Lernen und als Referenz verwendet werden.

Zusätzlich zum Karussellcode werde ich unten auch ein Beispielprogramm angeben.

Wirkung der Operation:

Ideen:

Die Anordnungsreihenfolge aller Diashow-Elemente richtet sich nach der Richtung der Diashow. Wenn die aktuelle Diashow die Grenze aller Diashows erreicht hat, wird die letzte Diashow in der relativen Richtung sofort an die entsprechende Position verschoben.
Die Mindestanzahl an Karussellbildern, die zur Implementierung des Karussellbilds mit dieser Methode erforderlich ist, beträgt 3. Die Fälle, in denen ein oder zwei Karussellbilder vorhanden sind, müssen separat behandelt werden. Im Fall von einem Karussellbild kopieren und fügen Sie zwei Karussellbildelemente hinzu, die mit dem aktuellen Karussellbild identisch sind. Im Fall von zwei Karussellbildern kopieren und fügen Sie das aktuelle Karussellbild nacheinander hinzu.

Kompilierungsumgebung:

Chrom 86.0.4240.183

Code:

slide.js kapselt den Diashow-Code

(Funktion(Fenster, undefiniert) {
 
 // Den CSS-Attributwert des Elements abrufen function getCss(elem, attr) {
  elem.currentStyle zurückgeben? 
   elem.currentStyle[attr] : 
   window.getComputedStyle(elem, null)[attr];
 }
 
 //Entferne Nicht-Ziffern aus dem String, ausgenommen negative Vorzeichen function toInt(str) {
  var rex = /[^0-9]/ig;
  return Zahl((str[0] === '-' && str[1] !== '=') ? '-' + str.replace(rex, '') : str.replace(rex, ''));
 }
 
 // Kapsele die Animationsfunktion, Parameter: Dom-Objekt, CSS-Attributwert-Objekt, Ausführungszeit der Animation, Rückruf nach Abschluss der Animation Funktion Animation (Element, Parameter, Geschwindigkeit, Rückruf) {
  für (var param in params) {
   (Funktion(Parameter) {
    
    var elemValue = toInt(getCss(elem, param)),
     Zielwert = toInt(Params[Param]),
     currentDis = Elementwert,
     Einheit = Params[Param].substr(Params[Param].indexOf('[A-Za-z]+') - 1);
    
    wenn (Params[Param].Länge > 2) {
     var Präfix = Params[Param].substr(0, 2);
     
     wenn (Präfix === '+=')
      Zielwert = Elementwert + Zielwert;
     sonst wenn (Präfix === '-=')
      Zielwert = Elementwert – Zielwert;
    }
    
    var dis = (Zielwert - Elementwert) / Geschwindigkeit,
     Größenflagge = Zielwert < Elementwert;
    
    var Timer = Intervall setzen(Funktion() {
     
     elemValue = toInt(getCss(elem, param));
     
     if (GrößeFlag) {
      wenn (aktuellerDis <= Zielwert) {
       Intervall löschen(Timer);
       elem.style[param] = Zielwert + Einheit;
      } anders {
       aktuelleDis += dis;
       elem.style[param] = currentDis + unit;
      }
     }
     anders {
      wenn (aktuellerWert >= Zielwert) {
       Intervall löschen(Timer);
       elem.style[param] = Zielwert + Einheit;
      } anders {
       aktuelleDis += dis;
       elem.style[param] = currentDis + unit;
      }
     }
    }, 1);
    
   })(Parameter);
  }
  
  wenn (Typ des Rückrufs === 'Funktion')
   Rückruf();
 };
 
 
 // Verschiebe das Karussell-Array nach rechts Funktion rightRoundArrayMove() {
  
  var winsLen = wins.Länge;
  var letzterGewinn = Gewinne[Gewinnlänge - 1];
  
  für (var i = winsLen - 1; i > 0; i--) 
   Siege[i] = Siege[i - 1];
  
  wins[0] = letzterSieg;
 }
 
 // Nach links drehen Funktion rightRound(time) {
  
  rightRoundArrayMove();
  
  wins.forEach(Funktion(win, Index) {
   (Index === 0)? 
    win.style.left = Index * Fensterbreite - Fensterbreite + 'px':
    Animation (Gewinn, {links: '+=' + Gewinnbreite + 'px'}, Zeit? Zeit: Animationszeit);
  });
 }
 
 //Nach rechts drehen Funktion leftRound(time) {
  
  var winsLen = wins.Länge;
  var firstWin = gewinnt[0];
  
  für (var i = 0; i < winsLen - 1; i++)
   Siege[i] = Siege[i + 1];
   
  gewinnt[Gewinnlänge - 1] = ersterGewinn;
  
  wins.forEach(Funktion(win, Index) {
   (Index === Gewinne.Länge - 1)? 
    win.style.left = Index * Fensterbreite - Fensterbreite + 'px':
    Animation (Gewinn, {links: '-=' + Gewinnbreite + 'px'}, Zeit? Zeit: Animationszeit);
  });
 }
 
 
 var 
  // wins, btns, sbtns werden verwendet, um den Konstruktorparameter wins zu speichern, 
  btns, 
  sbtns, 
  // Fensterbreite winWidth,
  // Übergangsanimationszeit (Millisekunden), Standard ist 100
  Animationszeit = 100,
  // Klicken Sie auf die Schaltfläche, um das Intervall zu drehen clickInterval = animationTime << 2,
  // Speichert den Auto-Rotationstimer, das Timerintervall und ob nach rechts gedreht werden soll autoRoundTimer,
  qIntervall,
  qisRichtig,
  //Folienkonstruktor, Parameter: Fensterarray, Schaltflächenarray, seitliches Schaltflächenarray Folie = Funktion (gewinnt, btns, sbtns) {
   gib eine neue Folie zurück.prototype.init(wins, btns, sbtns);
  };
  
 
 Folie.Prototyp = {
  
  // Fensterelemente initialisieren init: function(awins, abtns, asbtns) {
   
   wenn (!awins)
    throw new Error('Das Fenster-Array darf nicht leer sein.');
   
   Gewinne = Objekt.Werte(awins), btns = abtns, sbtns = asbtns;
   
   // Behandeln Sie die Situation, in der weniger als 3 Fenster vorhanden sind, if (wins.length === 1) {
    var winParent = wins[0].parentNode;
    var winHTML = wins[0].outerHTML;
    winParent.innerHTML += winHTML + winHTML;
    gewinnt = Objekt.Werte(winParent.children);
   }
   sonst wenn (gewinnt.Länge === 2) {
    var winParent = wins[0].parentNode;
    winParent.innerHTML += gewinnt[0].outerHTML + gewinnt[1].outerHTML;
    gewinnt = Objekt.Werte(winParent.children);
   }
   
   Gewinnbreite = Gewinne[0].Offsetbreite;
   
   wins.forEach(Funktion(win, Index) {
    win.style.position = "absolut";
    win.index = index;
   });
   
   rightRoundArrayMove();
   
   wins.forEach(Funktion(win, Index) {
    win.style.left = Index * Fensterbreite – Fensterbreite + „px“;
   });
  },
  
  // Stelle die Übergangsanimationszeit ein setAnimationTime: function(time) {
   Animationszeit = Zeit;
   Klickintervall = Animationszeit << 2;
  },
  
  // Automatische Rotation, Parameter: Rotationszeitintervall, ob nach rechts gedreht werden soll autoRound: function(interval, isRight) {
   autoRoundTimer = setzeIntervall(Funktion() {
        istRechts? RechtsRund() : LinksRund();
       }, Intervall);
   qinterval = Intervall;
   qisRight = istRechts;
  },
  
  // Klick mit seitlicher Taste, der Parameter ist das Array mit den Elementen der seitlichen Taste, das im Konstruktor übergeben werden kann oder jetzt übergeben werden kann sideBtnClickRound: function(sabtns) {
   
   var leftBtn = sabtns ? sabtns[0] : sbtns[0],
    rightBtn = sabtns ? sabtns[1] : sbtns[1];
   
   var isclick = true;
   leftBtn.onclick = Funktion () {
    wenn(istklick) {
     istclick=false;
     rechtsRund();
     setzeTimeout(Funktion() { 
      istklick = wahr;
     }, Klickintervall);
    }
   };
   
   rightBtn.onclick = Funktion () {
    wenn(istklick) {
     istclick=false;
     linkeRunde();
     setzeTimeout(Funktion() {
      istklick = wahr;
     }, Klickintervall);
    }
   };
  },
  
  // Normaler Schaltflächenklick, Parameter: normales Schaltflächenarray, Rückruf btnsClickRound: Funktion (abtns, Rückruf) {
   
   var ibtns = abtns? abtns: btns;
   
   var isclick = true;
   
   ibtns.forEach(Funktion(btn, Index) {
    btn.onclick = Funktion() {
     wenn(istklick) {
      istclick=false;
      
      wenn (Typ des Rückrufs === 'Funktion')
       Rückruf (ibtns, btn, Index);
      
      var schlecht = index - gewinnt[1].index;
      var Anzahl = Math.abs(schlecht);
      wenn (schlecht < 0) {
       var absPoor = Anzahl;
       var Timer = Intervall setzen(Funktion() {
        console.log((absPoor + 1))
           rightRound(Animationszeit / (absPoor + 2));
           wenn ((--count) === 0) 
            Intervall löschen(Timer);
          }, Animationszeit);
      }
      sonst wenn (schlecht > 0) {
       var Timer = Intervall setzen(Funktion() {
           linkeRunde(Animationszeit / (schlecht + 2));
           wenn ((--count) === 0) 
            Intervall löschen(Timer);
          }, Animationszeit);
      }
      
      setzeTimeout(Funktion() {
       istklick = wahr;
      }, Klickintervall << 1);
     }
    }
   });
  },
  
  //Maus auf Einfahren einstellen und automatische Drehung abbrechen, Parameter: das einzufahrende Element, der Callback des einzufahrenden Elements, der Callback des auszufahrenden Elements setOverStop: function(box, overCallback, outCallback) {
   box.onmouseover = Funktion(e) {
    : ClearInterval(autoRoundTimer);
    
    wenn (Typ von overCallback === 'Funktion')
     überCallback(e);
   }
   box.onmouseout = Funktion(e) {
    Folie.Prototype.AutoRound(qinterval, qisRight);
    
    wenn (Typ von outCallback === 'Funktion')
     outCallback(e);
   }
  }
 }
 
 Folie.prototype.init.prototype = Folie.prototype;
 Fenster.Slide = _Slide = Folie;
 
})(Fenster);

test.js Testbeispiel für JS-Code:

onload = Funktion() {
 
 var wins = document.querySelectorAll('.wins > li');
 var btns = document.querySelectorAll('.btns > li');
 var sideBtns = document.querySelectorAll('.side-btns > div');
 var box = document.querySelector('.box');
 
 var s = slide(wins, btns, sideBtns); // Ein Karussellobjekt erstellen, Parameter: Fenster-Dom-Array, unteres Button-Dom-Array (optional),
 s.autoRound(2000); // Automatische Rotation einstellen s.setAnimationTime(200); // Übergangsanimationszeit einstellen s.setOverStop(box); // Automatischen Rotationsstopp einstellen, wenn die Maus in das Element hineinbewegt wird, Parameter: hineinbewegtes DOM-Element, Rückruf des hineinbewegten Elements, Rückruf des herausbewegten Elements s.sideBtnClickRound(); // Rotation einstellen, wenn auf die Seitentaste geklickt wird, Parameter: Button-DOM-Array (optional)
 s.btnsClickRound(); // Legt die Drehung fest, wenn auf die Schaltfläche unten geklickt wird, Parameter: Button-Dom-Array (optional), Rückruf}

HTML- und CSS-Beispielcode

<!DOCTYPE html>
<html>
 <Kopf>
  <meta charset="utf-8" />
  <Titel></Titel>
  <style type="text/css">
   * {
    Rand: 0;
    Polsterung: 0;
   }
   
   li {
    Listenstil: keiner;
   }
   
   .Kasten {
    Breite: 1000px;
    Höhe: 400px;
    Rand: 20px automatisch;
    Anzeige: Flex;
    Elemente ausrichten: zentrieren;
    Position: relativ;
    Überlauf: versteckt;
   }
   
   .box > * {
    Position: absolut;
   }
   
   .side-btns {
    Breite: erben;
    Höhe: 100px;
    Anzeige: Flex;
    Inhalt ausrichten: Abstand dazwischen;
    Z-Index: 2;
   }
   
   .side-btns > div {
    Breite: 50px;
    Höhe: erben;
    Textausrichtung: zentriert;
    Zeilenhöhe: 100px;
    Schriftgröße: 18px;
    Hintergrundfarbe: rgba(0, 0, 0, .3);
    Farbe: weiß;
    Cursor: Zeiger;
    Benutzerauswahl: keine;
   }
   
   .btns {
    Breite: erben;
    Höhe: 20px;
    Anzeige: Flex;
    Inhalt ausrichten: Flex-Ende;
    Z-Index: 2;
    Position: absolut;
    unten: 20px;
   }
   
   .btns > li {
    Breite: 16px;
    Höhe: 16px;
    Randradius: 50 %;
    Rand rechts: 12px;
    Cursor: Zeiger;
    Hintergrundfarbe: rgba(0, 0, 0, .2);
   }
   
   .gewinnt {
    Breite: erben;
    Höhe: erben;
    Anzeige: Flex;
   }
   
   .wins > li {
    Breite: erben;
    Höhe: erben;
    Flex-Wachstum: 0;
    Flex-Schrumpfen: 0;
   }
  </Stil>
  <script src="js/slide.js"></script>
  <script src="js/test.js"></script>
 </Kopf>
 
 <Text>
  <div Klasse="Box">
   <div Klasse="side-btns">
    <div class="left-btn">&lt;</div>
    <div class="right-btn">&gt;</div>
   </div>
   
   <ul Klasse="btns">
    <li></li>
    <li></li>
    <li></li>
    <li></li>
   </ul>
   
   <ul Klasse="gewinnt">
    <li style="Hintergrundfarbe: Antikweiß;">a</li>
    <li style="Hintergrundfarbe: Aquamarin;">b</li>
    <li style="Hintergrundfarbe: grün;">c</li>
    <li style="Hintergrundfarbe: braun;">d</li>
   </ul>
  </div>
 </body>
</html>

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.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Installations- und Verpackungsfalls von JavaScript Axios
  • Detaillierte Analyse von Homologie und Domänenübergreifendkeit, JSONP (Funktionskapselung), CORS-Prinzip
  • Vue.js verwaltet die Kapselung von Hintergrundtabellenkomponenten
  • Detaillierte Erläuterung der objektorientierten Praxis von JavaScript: Kapselung und Ziehen von Objekten
  • Native JS-Kapselung vue Tab-Umschalteffekt
  • js implementiert eine einfache Methode zur Kapselung von jQuery und eine detaillierte Erklärung der Kettenoperationen
  • js implementiert einige Funktionen der Eingabekomponente in Element und kapselt sie in eine Komponente (Beispielcode)
  • JavaScript implementiert ein Prototyp-Kapselungskarussell
  • Kapselungsmethode der JavaScript-Zeitlupenanimationsfunktion
  • JavaScript Canvas-Kapselung dynamische Uhr
  • Über Jacksons JSON-Tool-Klassenkapselung JsonUtils-Nutzung
  • Beispielcode für die JavaScript-Kapselung einer einfach verketteten Liste
  • Allgemeine Front-End-JavaScript-Methodenkapselung

<<:  Django-Online-Bereitstellungsmethode von Apache

>>:  MySQL 8.0.12 Installationskonfigurationsmethode und Kennwortänderung

Artikel empfehlen

So konfigurieren Sie den Tomcat-Server für Eclipse und IDEA

Tomcat-Serverkonfiguration Jeder, der das Web ken...

Der neueste Linux-Installationsprozess von Tomcat8

Herunterladen https://tomcat.apache.org/download-...

9 Tipps zur MySQL-Datenbankoptimierung

Inhaltsverzeichnis 1. Wählen Sie die am besten ge...

Ein paar Dinge, die Sie über responsives Layout wissen müssen

1. Einleitung Responsive Webdesign ermöglicht die...

Lösung für den Fehler bei der Installation von Docker auf der CentOS-Version

1. Versionsinformationen # Katze /etc/system-rele...

Implementierung eines einfachen Whack-a-Mole-Spiels in JavaScript

In diesem Artikel finden Sie den spezifischen Cod...

So autorisieren Sie Remoteverbindungen in MySQL unter Linux

Hinweis: Andere Maschinen (IP) können ohne Autori...

Detaillierte Erklärung der grundlegenden Typen von TypeScript

Inhaltsverzeichnis Boolescher Typ Nummerntypen Ze...

So starten und starten Sie nginx unter Linux neu

Nginx (Engine x) ist ein leistungsstarker HTTP- u...

Detaillierte Erläuterung der bidirektionalen Docker-Netzwerkverbindung

Docker-Netzwerk anzeigen Docker-Netzwerk ls [root...

Beispielanalyse der Listen-Direktive in Nginx

Handlungsüberblick Im vorherigen Artikel haben wi...

JSONP-domänenübergreifende Simulation der Baidu-Suche

Inhaltsverzeichnis 1. Was ist JSONP 2. JSONP-Cros...

Vue nutzt Baidu Maps zur Realisierung der Stadtpositionierung

In diesem Artikel wird der spezifische Code von V...

Kurze Analyse der geplanten MySQL-Sicherungsaufgaben

Einführung Um Datenverlust in einer Produktionsum...