Heim Web-Frontend js-Tutorial So erstellen Sie eine Uhranimation mit Canvas

So erstellen Sie eine Uhranimation mit Canvas

Oct 16, 2017 am 09:51 AM
canvas 时钟

Als ich die Wissenspunkte von Javascript zu Canvas überprüfte, sah ich ein Beispiel einer statischen Uhr, die mit Canvas gezeichnet wurde, und wollte daraus eine Uhrenanimation machen, die die Systemzeit dynamisch anzeigt. Darüber hinaus wurde in Verbindung mit einer Digitalanzeigeuhr ein kleines Uhrenmodul geboren! Die aktuelle Benutzeroberfläche ist noch relativ grob, mit nur einer einfachen Benutzeroberfläche und Animationseffekten.

Diese Uhr besteht aus zwei Teilen, der animierten Scheibenuhr und der Digitaluhr. Die erste besteht darin, das Timeout zu verwenden, um die Methode setTimeout () aufzurufen und einen Schleifenanimationseffekt zur Anzeige der Zeit zu erstellen. Schauen wir uns zunächst den Code der Digitaluhr an. Auch die Scheibenuhr ist so gestaltet, dass sie die Digitaluhr nachahmt.


var ntimeoutId = setTimeout(ntimeOut,0);function ntimeOut() {
    clearTimeout(ntimeoutId);    
    var now = new Date();    
    var hours = now.getHours().toString(),
        minutes = now.getMinutes().toString(),
        seconds = now.getSeconds().toString();    
        var time = hours+" : "+minutes+" : "+seconds;    
        var timep = document.getElementById("time");
    timep.innerHTML = time;
    ntimeoutId = setTimeout(ntimeOut, 1000);
}
Nach dem Login kopieren

  1. Legen Sie zunächst einen Timeout-Aufruf fest, um die Methode zum ersten Mal aufzurufen und die aktuelle Uhrzeit anzuzeigen System. Der Grund, warum die Zeit eingestellt ist. Es ist 0, die Zeit ohne Verzögerung anzuzeigen.

2. Löschen Sie den vorherigen Timeout-Aufruf vor jeder Schleife (warum Sie das tun müssen, weiß ich noch nicht??? Es kann mit der Speicherleistung zusammenhängen, kommentiert Das Programm kann in Zukunft normal ausgeführt werden)

 3. Holen Sie sich die aktuelle Systemzeit und speichern Sie sie in einem bestimmten Zeichenfolgenformat.

 4. Um es dynamisch auf der Seite anzuzeigen, wird auf der HTML-Seite ein leeres p-Element definiert, um die Zeitzeichenfolge zu speichern. Fügen Sie es mithilfe der DOM-Manipulation dem p-Element hinzu, um es dynamisch anzuzeigen.

5. Durch kontinuierliche Schleife des Timeout-Aufrufs kann die Digitaluhr dynamisch angezeigt werden und die dynamischen Änderungen im p-Element können auch über die Entwicklertools gesehen werden.

Der nächste Schritt besteht darin, eine Festplattenuhranimation zu erstellen. Die Charakterisierung der Festplatte und des numerischen Werts ist relativ einfach. arc()-Methode und Kontext Verwenden Sie einfach die .fillText()-Methode. Das Folgende ist der Quellcode:


     context.beginPath();
        context.restore();
        context.translate(0,0);
        context.clearRect(0,0,300,300);        //绘制时钟内外边框
        context.arc(150,150,149,0,2 * Math.PI,false);
        context.moveTo(295,150);
        context.arc(150,150,145,0,2 * Math.PI,false);

        context.font = "bold 18px Arial";
        context.textAlign = "center";        //绘制时钟表盘数值
        context.fillText("12",150,25);
        context.fillText("3",285,150);
        context.fillText("6",150,290);
        context.fillText("9",15,150);
        context.fillText("1",215,45);
        context.fillText("2",265,95);
        context.fillText("4",265,225);
        context.fillText("7",95,275);
        context.fillText("5",215,275);
        context.fillText("8",35,225);
        context.fillText("10",35,95);
        context.fillText("11",75,45);

        context.stroke();
        context.closePath();
Nach dem Login kopieren

 Der nächste Schritt besteht darin, den Zeiger zu zeichnen Wenn Sie die Methode in Elevation verwenden, ist es viel praktischer, die Methode context.translate() der Transformationsoperation zu verwenden, um den Ursprung zu ändern und dann den Pfad als Zeiger zu zeichnen. Eine weitere Schwierigkeit beim Zeichnen von Zeigern ist die Berechnung des Bogenmaßes. Dies ist natürlich ein mathematisches Problem. Schauen wir uns zunächst den Quellcode an:


     //绘制指针        context.save();
        context.translate(150,150);        //时针
        context.moveTo(0,0);
        hour(hours);        function hour(thour) {
            context.save();            
            var newhour = 0;            
            if(thour>12) {
                newhour = thour-12;
            } else {
                newhour = thour;
            }
            context.rotate((2*Math.PI/12)*newhour);
            context.lineTo(0,-80);
            context.restore();
        }        //分针
        context.moveTo(0,0);
        minute(minutes);        function minute(tminute) {
            context.save();
            context.rotate((2*Math.PI/12)*tminute/5);
            context.lineTo(0,-110);
            context.restore();
        }        //秒针
        context.moveTo(0,0);
        second(seconds);        function second(tsecond) {
            context.save();
            context.fillStyle = "#fff";
            context.rotate((2*Math.PI/12)*tsecond/5);
            context.lineTo(0,-120);
            context.restore();
        }
        
        context.stroke();
Nach dem Login kopieren

Beim Zeichnen von Zeigern verwendet jeder Zeigertyp eine Funktion, um den Bogen jedes Zeigers zu ändern Zeichnen. Um den Animationseffekt der Zeigerdrehung zu erzielen. Für den Stundenzeiger wandeln Sie die 24-Stunden-Uhr in die Zwölf-Stunden-Uhr um und drehen Sie sie jeweils um 30°. Der Minutenzeiger und der Sekundenzeiger drehen sich von 0 auf 11. Ich glaube, dass jeder diese einfache Matheaufgabe besser beherrscht als ich. Ich hatte eine Weile damit zu kämpfen. Die context.save()-Methode und die context.restore()-Methode werden in jeder Funktion verwendet, um den Pfad während der Initialisierung zu speichern und wiederherzustellen, andernfalls gerät der Zeiger aus der Spur.

Die ganze Arbeit ist im Grunde genommen fertig. Als nächstes müssen wir nur noch das Zifferblatt und die Zeiger im Timeout-Aufruf platzieren. Es gibt jedoch noch einige Probleme, die Aufmerksamkeit erfordern Die Ursprungseinstellungen sind unterschiedlich. Achten Sie daher darauf, den Pfad während der Initialisierung mit „Speichern und Wiederherstellen“ wiederherzustellen, da sonst das Zifferblatt und die Zeiger aus der Spur geraten. Beachten Sie außerdem, dass bei der Verwendung von Canvas zum Erstellen von Animationen bei jedem Animationszyklus die Leinwand gelöscht und neu gezeichnet werden muss, da sich der Zeiger sonst weiter dreht und sich in eine Blume verwandelt.

Der vollständige Disc-Clock-Code lautet wie folgt:


//显示指针时间var drawing = document.getElementById("drawing");if(drawing.getContext) {    
var context = drawing.getContext("2d");    
var rtimeoutId = setTimeout(roudClock,0);    
function roudClock() {
        clearTimeout(rtimeoutId);

        context.beginPath();
        context.restore();
        context.translate(0,0);
        context.clearRect(0,0,300,300);        //绘制时钟内外边框
                context.arc(150,150,149,0,2 * Math.PI,false);
        context.moveTo(295,150);
        context.arc(150,150,145,0,2 * Math.PI,false);

        context.font = "bold 18px Arial";
        context.textAlign = "center";        //绘制时钟表盘数值
                context.fillText("12",150,25);
        context.fillText("3",285,150);
        context.fillText("6",150,290);
        context.fillText("9",15,150);
        context.fillText("1",215,45);
        context.fillText("2",265,95);
        context.fillText("4",265,225);
        context.fillText("7",95,275);
        context.fillText("5",215,275);
        context.fillText("8",35,225);
        context.fillText("10",35,95);
        context.fillText("11",75,45);

        context.stroke();
        context.closePath();        
        var now = new Date();        
        var hours = now.getHours(),
            minutes = now.getMinutes(),
            seconds = now.getSeconds();        //绘制指针        
            context.save();
        context.translate(150,150);        //时针
                context.moveTo(0,0);
        hour(hours);        
        function hour(thour) {
            context.save();            
            var newhour = 0;            
            if(thour>12) {
                newhour = thour-12;
            } else {
                newhour = thour;
            }
            context.rotate((2*Math.PI/12)*newhour);
                        context.lineTo(0,-80);
            context.restore();
        }        //分针
           context.moveTo(0,0);
        minute(minutes);        
        function minute(tminute) {
            context.save();
            context.rotate((2*Math.PI/12)*tminute/5);
            context.lineTo(0,-110);
            context.restore();
        }        //秒针
                context.moveTo(0,0);
        second(seconds);        
        function second(tsecond) {
            context.save();
            context.fillStyle = "#fff";
            context.rotate((2*Math.PI/12)*tsecond/5);
            context.lineTo(0,-120);
            context.restore();
        }
        
        context.stroke();
        context.restore();
        context.translate(0,0);
        context.save();
        rtimeoutId = setTimeout(roudClock,1000);
    }    
}
Nach dem Login kopieren

Abschließend fasse ich das zusammen Zeit Während der Demo-Übung sind mehrere Probleme aufgetreten:

1. Problem beim Neuzeichnen der Leinwand

Wenn die Zeigeranimation eine Schleife durchläuft, gibt es keine Möglichkeit, den vorherigen Pfad zu löschen, sodass jede Schleife eine Markierung hinterlässt. Ich habe versucht, die Methode „clearRect()“ in einem kleinen Bereich zu verwenden, stellte jedoch fest, dass sie nur den Inhalt des Zifferblatts und die Zahlen innerhalb des Bereichs löschen konnte und der Zeiger immer noch Spuren hinterließ. Später erhielt ich bei der Suche die Antwort, dass bei der Verwendung von Canvas zum Erstellen von Animationen diese neu gezeichnet werden müssen. Der Canvas-Inhalt muss vor dem Zeichnen neuer Inhalte gelöscht werden, und jede Animationsänderung muss gelöscht werden. Informationen zur Neuzeichnungsmethode finden Sie unter dem Link. Ich verwende die Methode „clearRect()“, um die gesamte Leinwand zu löschen.

2. Verwendung der save()-Methode und der restart()-Methode

Da die Ursprungseinstellungen meines Zifferblatts und Zeigers unterschiedlich sind, Daher ändert sich nach dem Neuzeichnen der Ursprung des Zifferblatts zum Ursprung des Zeigers. Daher müssen zum Ändern die Methoden save () und restart () verwendet werden. Zusätzlich zu diesem Ort gibt es auch andere Orte, die verwendet werden müssen. Er eignet sich für Situationen, in denen die Einstellungen nach dem Vorgang geändert werden, die ursprünglichen Einstellungen jedoch für nachfolgende Vorgänge verwendet werden müssen. Beachten Sie, dass diese beiden Methoden nur Einstellungen speichern und wiederherstellen, nicht jedoch Inhalte.

3. Verwendung der Translate()-Methode

Die Translate()-Methode gehört zur Transformationsoperation und kann den Ursprung der Leinwand ändern . Der Standardursprung der Leinwand liegt in der oberen linken Ecke der Leinwand. Die Verwendung dieser Methode erleichtert das Zeichnen des Zeigerpfads. Natürlich gibt es noch einige andere Verwendungsmöglichkeiten, die ich noch nicht berührt habe.

4. Verwendung der setTimeout()-Methode

Die Verwendung von Timeout-Aufrufen ist eine bessere Methode als die Verwendung von Timeout-Aufrufen, um intermittierende Anrufe zu simulieren . Anruf. Eine Schleife kann gut simuliert werden, indem ein Timeout-Aufruf innerhalb der Funktion hinzugefügt wird, an die der Timeout-Aufruf übergeben wird. Sie können die Anzahl und Dauer der Schleifen auch basierend auf einigen Bedingungen in der Funktion begrenzen.

5. Wie man das Bogenmaß entsprechend der aktuellen Zeit verwendet

Das ist ein mathematisches Problem, mit dem ich lange zu kämpfen hatte Zeit, aber ich habe es nicht falsch verstanden. Nach dem Umdrehen ist es kein technisches Problem mehr, das Prinzip zu verstehen.

6. In Bezug auf das Problem der wiederholten Erfassung und Wiederverwendung von Zeitmethoden

In Bezug auf die Situation, in der es wiederholte Codes in der gibt Code ist mir kein besserer Weg zur Reduzierung der Redundanz eingefallen. In Bezug auf die Erfassungszeit gibt es beispielsweise wiederholte Definitionen in den beiden Timeout-Aufrufen. Wenn sie jedoch global platziert werden, gibt es keinen Animationseffekt und es wird nur die statische Zeit nach Abschluss des Ladevorgangs angezeigt. Eine andere Sache ist, dass es in der Funktionseinstellung des Zeigers wiederholte Teile gibt. Kann er zu einer Funktionsmethode kombiniert und dann aufgerufen werden?

Jeder ist willkommen, Ideen einzubringen, Vorschläge für Mängel zu machen und gemeinsam zu kommunizieren.

Das obige ist der detaillierte Inhalt vonSo erstellen Sie eine Uhranimation mit Canvas. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Uhr-App fehlt im iPhone: So beheben Sie das Problem Uhr-App fehlt im iPhone: So beheben Sie das Problem May 03, 2024 pm 09:19 PM

Fehlt die Uhr-App auf Ihrem Telefon? Datum und Uhrzeit werden weiterhin in der Statusleiste Ihres iPhones angezeigt. Ohne die Uhr-App können Sie jedoch die Weltzeituhr, die Stoppuhr, den Wecker und viele andere Funktionen nicht nutzen. Daher sollte die Reparatur der fehlenden Uhr-App ganz oben auf Ihrer To-Do-Liste stehen. Diese Lösungen können Ihnen bei der Lösung dieses Problems helfen. Lösung 1 – Platzieren Sie die Uhr-App. Wenn Sie versehentlich die Uhr-App von Ihrem Startbildschirm entfernt haben, können Sie die Uhr-App wieder an ihrem Platz platzieren. Schritt 1 – Entsperren Sie Ihr iPhone und wischen Sie nach links, bis Sie zur Seite „App-Bibliothek“ gelangen. Schritt 2 – Suchen Sie als Nächstes im Suchfeld nach „Uhr“. Schritt 3 – Wenn Sie unten in den Suchergebnissen „Uhr“ sehen, halten Sie die Taste und gedrückt

iOS 17: So ändern Sie den Uhrstil des iPhone im Standby-Modus iOS 17: So ändern Sie den Uhrstil des iPhone im Standby-Modus Sep 10, 2023 pm 09:21 PM

Standby ist ein Sperrbildschirmmodus, der aktiviert wird, wenn das iPhone an das Ladegerät angeschlossen und horizontal (oder im Querformat) ausgerichtet ist. Es besteht aus drei verschiedenen Bildschirmen, von denen einer im Vollbildmodus angezeigt wird. Lesen Sie weiter, um zu erfahren, wie Sie den Stil Ihrer Uhr ändern können. Auf dem dritten Bildschirm von StandBy werden Uhrzeiten und Daten in verschiedenen Themen angezeigt, die Sie vertikal wischen können. Einige Themes zeigen auch zusätzliche Informationen an, wie z. B. Temperatur oder nächster Alarm. Wenn Sie eine beliebige Uhr gedrückt halten, können Sie zwischen verschiedenen Themen wechseln, darunter Digital, Analog, Welt, Solar und Floating. Float zeigt die Zeit in großen Blasenzahlen in anpassbaren Farben an, Solar verfügt über eine Standardschriftart mit einem Sonneneruptionsdesign in verschiedenen Farben und World zeigt die Welt durch Hervorhebung an

So schalten Sie Alarme auf dem iPhone aus [2023] So schalten Sie Alarme auf dem iPhone aus [2023] Aug 21, 2023 pm 01:25 PM

Seit dem Aufkommen von Smartphones haben sie zweifellos Wecker ersetzt. Wenn Sie ein iPhone besitzen, können Sie mit der Uhr-App ganz einfach beliebig viele Alarme für mehrere Anlässe im Laufe des Tages einstellen. Mit der App können Sie die Weckzeit, den Ton, die Wiederholungshäufigkeit und die Möglichkeit, den Weckruf mit der Snooze-Option zu verzögern, konfigurieren. Wenn Sie den von Ihnen eingestellten Alarm ausschalten möchten, soll Ihnen der folgende Beitrag dabei helfen, regelmäßige Alarme und Weckalarme auf Ihrem iPhone zu deaktivieren und zu löschen. So schalten Sie einen regulären Alarm auf dem iPhone aus Wenn Sie in der Uhr-App einen Alarm hinzufügen oder Siri bitten, einen Alarm für Sie hinzuzufügen, erstellen Sie standardmäßig einen regulären Alarm. Sie können auf Ihrem iPhone beliebig viele Wecker erstellen und platzieren

So passen Sie die Standby-Farbe in iOS 17 an So passen Sie die Standby-Farbe in iOS 17 an Sep 23, 2023 pm 12:53 PM

Apple bietet in iOS 17 einen neuen Sperrbildschirmmodus namens Standby-Modus an, der aktiviert wird, wenn Ihr iPhone an ein Ladegerät (kabelgebunden oder kabellos) angeschlossen und im Querformat auf einen Ständer gestellt wird. Dieser Modus zeigt auf einen Blick mehr Informationen als der Standard-Sperrbildschirm, indem er die Uhr, Wetterdaten, den Kalender und einige Widgets anzeigt. Nachdem Sie diese Funktion in den Einstellungen aktiviert haben, wechselt Ihr iPhone automatisch in den Standby-Modus, wenn es während des Ladevorgangs im Querformat platziert wird. So ändern Sie die Standby-Farben in iOS 17. Der Standby-Modus bietet drei Seiten (Widgets, Fotos und Uhr), die Sie durch Wischen auf dem Bildschirm hin- und herwechseln können. Von diesen Seiten können Sie nur auf dem Uhrbildschirm die auf dem Bildschirm angezeigten Farben individuell anpassen

Was sind die Canvas-Pfeil-Plug-ins? Was sind die Canvas-Pfeil-Plug-ins? Aug 21, 2023 pm 02:14 PM

Zu den Canvas-Pfeil-Plugins gehören: 1. Fabric.js, das über eine einfache und benutzerfreundliche API verfügt und benutzerdefinierte Pfeileffekte erstellen kann. 2. Konva.js, das die Funktion zum Zeichnen von Pfeilen bietet und verschiedene Pfeile erstellen kann 3. Pixi.js, das umfangreiche Grafikverarbeitungsfunktionen bietet und verschiedene Pfeileffekte erzielen kann; 4. Two.js, das auf einfache Weise Pfeilstile und Animationen erstellen und steuern kann; 6. Grobe .js, Sie können handgezeichnete Pfeile usw. erstellen.

Was sind die Details der Leinwanduhr? Was sind die Details der Leinwanduhr? Aug 21, 2023 pm 05:07 PM

Zu den Details der Leinwanduhr gehören das Aussehen der Uhr, Teilstriche, Digitaluhr, Stunden-, Minuten- und Sekundenzeiger, Mittelpunkt, Animationseffekte, andere Stile usw. Ausführliche Einführung: 1. Erscheinungsbild der Uhr: Sie können mit Canvas ein kreisförmiges Zifferblatt als Erscheinungsbild der Uhr zeichnen und die Größe, Farbe, den Rand und andere Stile des Zifferblatts festlegen. 2. Skalenlinien: Zeichnen Sie Skalenlinien ein 3. Digitaluhr: Sie können eine Digitaluhr auf das Zifferblatt zeichnen, um die aktuelle Stunde und Minute anzuzeigen.

Welche Versionen von html2canvas gibt es? Welche Versionen von html2canvas gibt es? Aug 22, 2023 pm 05:58 PM

Zu den Versionen von html2canvas gehören html2canvas v0.x, html2canvas v1.x usw. Detaillierte Einführung: 1. html2canvas v0.x, eine frühe Version von html2canvas. Die neueste stabile Version ist v0.5.0-alpha1. Es handelt sich um eine ausgereifte Version, die in vielen Projekten weit verbreitet und verifiziert wurde. 2. html2canvas v1.x, dies ist eine neue Version von html2canvas.

Lernen Sie das Canvas-Framework kennen und erklären Sie das häufig verwendete Canvas-Framework im Detail Lernen Sie das Canvas-Framework kennen und erklären Sie das häufig verwendete Canvas-Framework im Detail Jan 17, 2024 am 11:03 AM

Entdecken Sie das Canvas-Framework: Um die häufig verwendeten Canvas-Frameworks zu verstehen, sind spezifische Codebeispiele erforderlich. Einführung: Canvas ist eine in HTML5 bereitgestellte Zeichen-API, mit der wir umfangreiche Grafik- und Animationseffekte erzielen können. Um die Effizienz und den Komfort des Zeichnens zu verbessern, haben viele Entwickler verschiedene Canvas-Frameworks entwickelt. In diesem Artikel werden einige häufig verwendete Canvas-Frameworks vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern ein tieferes Verständnis für die Verwendung dieser Frameworks zu vermitteln. 1. EaselJS-Framework Ea

See all articles