Bringen Sie Ihnen Schritt für Schritt bei, wie Sie mit einem Miniprogramm eine Leinwanduhr erstellen (Beispiel)

青灯夜游
Freigeben: 2021-09-24 20:05:27
nach vorne
4457 Leute haben es durchsucht

Dieser Artikel führt Sie Schritt für Schritt durch die Erstellung einer Leinwanduhr mit dem WeChat-Applet. Ich hoffe, er wird Ihnen helfen!

Bringen Sie Ihnen Schritt für Schritt bei, wie Sie mit einem Miniprogramm eine Leinwanduhr erstellen (Beispiel)

Was ich heute mache, ist eine WeChat-Applet-Canvas-Uhr, eine traditionelle Digitaluhr. [Verwandte Lernempfehlungen: Mini-Tutorial zur Programmentwicklung]

Bringen Sie Ihnen Schritt für Schritt bei, wie Sie mit einem Miniprogramm eine Leinwanduhr erstellen (Beispiel)

Direkt über dem Bild ist der Effekt wie gezeigt.

onLoad: function(){
		//将全局变量Index保存在that中,里面函数调用
		var that = this
		//获取系统信息
		wx.getSystemInfo({
			//获取系统信息成功,将系统窗口的宽高赋给页面的宽高
			success: function(res) {
				that.width = res.windowWidth
				that.height = res.windowHeight
			}
		})
	},
Nach dem Login kopieren

Als erstes müssen Sie die Breite und Höhe des Bildschirms ablesen. Dies dient dazu, später die Position der Uhr zu berechnen, damit sie in der Mitte platziert werden kann.

onReady: function(){
		//调用canvasApp函数
		this.canvasClock()
		//对canvasAPP函数循环调用
		this.interval = setInterval(this.canvasClock,1000)
	},
Nach dem Login kopieren

onReady Lebenszyklusfunktion, überwacht den Abschluss des ersten Renderns der Seite. Fügen Sie dann einen Timer hinzu, um die Funktion this.canvasClock jede Sekunde auszuführen.

//重置画布函数
		function reSet(){
			context.height = context.height;//每次清除画布,然后变化后的时间补上
            context.translate(width/2, height/2);//设置坐标轴原点
            context.save();//保存中点坐标1
		}
		//绘制中心圆和外面大圆
		function circle(){
			//外面大圆
			context.setLineWidth(2);
            context.beginPath();
            context.arc(0, 0, width/2-30, 0, 2 * Math.PI,true);
            context.closePath();
            context.stroke();
            //中心圆
            context.beginPath();
            context.arc(0, 0, 8, 0, 2 * Math.PI, true);
            context.closePath();
            context.stroke();
		}
		//绘制字体
		function num(){
			// var R = width/2-60;//设置文字距离时钟中心点距离
			context.setFontSize(20)//设置字体样式
            context.textBaseline = "middle";//字体上下居中,绘制时间
            for(var i = 1; i < 13; i++) {
                //利用三角函数计算字体坐标表达式
                var x = R * Math.cos(i * Math.PI / 6 - Math.PI / 2);
                var y = R * Math.sin(i * Math.PI / 6 - Math.PI / 2);
                if(i==11||i==12){//调整数字11和12的位置
                    context.fillText(i, x-12, y+9);
                }else {
                    context.fillText(i, x-6, y+9);
                }
            }
		}
		//绘制小格
		function smallGrid(){
				context.setLineWidth(1);
                context.rotate(-Math.PI/2);//时间从3点开始,倒转90度
                for(var i = 0; i < 60; i++) {
                    context.beginPath();
                    context.rotate(Math.PI / 30);
                    context.moveTo(width/2-30, 0);
                    context.lineTo(width/2-40, 0);
                    context.stroke();
                }
         }
         //绘制大格
         function bigGrid(){
         	context.setLineWidth(5);
            for(var i = 0; i < 12; i++) {
                context.beginPath();
                context.rotate(Math.PI / 6);
                context.moveTo(width/2-30, 0);
                context.lineTo(width/2-45, 0);
                context.stroke();
            }
         }
Nach dem Login kopieren

Der obige Teil ist relativ fest, d. h. die Kreise, Skalen, Zahlen usw. bewegen sich nicht. Da die Leinwand jedoch bei jedem Zeichnen gereinigt werden muss, muss auch dieser Teil recycelt werden.

function move(){
            var t = new Date();//获取当前时间
            var h = t.getHours();//获取小时
            h = h>12?(h-12):h;//将24小时制转化为12小时制
            var m = t.getMinutes();//获取分针
            var s = t.getSeconds();//获取秒针
            context.save();//再次保存2
            context.setLineWidth(7);
            //旋转角度=30度*(h+m/60+s/3600)
            //分针旋转角度=6度*(m+s/60)
            //秒针旋转角度=6度*s
            context.beginPath();
            //绘制时针
            context.rotate((Math.PI/6)*(h+m/60+s/3600));
            context.moveTo(-20,0);
            context.lineTo(width/4.5-20,0);
            context.stroke();
            context.restore();//恢复到2,(最初未旋转状态)避免旋转叠加
            context.save();//3
            //画分针
            context.setLineWidth(5);
            context.beginPath();
            context.rotate((Math.PI/30)*(m+s/60));
            context.moveTo(-20,0);
            context.lineTo(width/3.5-20,0);
            context.stroke();
            context.restore();//恢复到3,(最初未旋转状态)避免旋转叠加
            context.save();
            //绘制秒针
            context.setLineWidth(2);
            context.beginPath();
            context.rotate((Math.PI/30)*s);
            context.moveTo(-20,0);
            context.lineTo(width/3-20,0);
            context.stroke();
        }
Nach dem Login kopieren

Der letzte Schritt ist der schwierigste. Die Schwierigkeit liegt in der Berechnung des Verhältnisses zwischen Stundenzeiger, Minutenzeiger und Sekundenzeiger. Aber das sind alles mathematische Formeln. Solange die Winkel berechnet sind, ist der Rest einfach zu handhaben.

Originaladresse: https://juejin.cn/post/7008355969600061447

Autor: Code Like Poetry

Weitere Programmierkenntnisse finden Sie unter: Programmiervideo! !

Das obige ist der detaillierte Inhalt vonBringen Sie Ihnen Schritt für Schritt bei, wie Sie mit einem Miniprogramm eine Leinwanduhr erstellen (Beispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:掘金--诗一样的代码
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!