一、时钟应用
哈喽~大家知道吗?现在很多人都爱用Vue和Canvas弄个好玩儿的时钟。把它们搭档起来,掌握点儿数据驱动和描图技巧就行了,这样你也能做出自己个性十足的时钟!下面就慢慢给你讲讲方法!
先搞定一个vue实例,然后在data中设定个currentTime,代表当前时刻。页面加载完毕后就能把它拿来看看现在是什么时候。这样我们随时随地都能了解到时间!
网上做钟表?得先用Canvas找个地方画图。那怎么折腾?Canvas API可以帮忙搞定。画小圆就是那个`ctx.arc()`;再画指针的话要记得用`ctx.moveTo()`和`ctx.lineTo()’
<canvas id="clockCanvas">export default { data() { return { currentTime: null }; }, mounted() { this.currentTime = new Date(); this.drawClock(); }, methods: { drawClock() { // 在这里实现绘制时钟的逻辑 } } };
接下来就来动手搞搞时钟的长相比如说指针的颜色,大小,还有上面的字儿用什么颜色。这些小细节可以改善整体视觉效果,想让你的时钟更漂亮、抢眼的话,稍微动点儿脑筋就好了!
const canvas = document.getElementById('clockCanvas'); const ctx = canvas.getContext('2d'); const width = canvas.width; const height = canvas.height;
除了这个,画个好看的钟表还得懂分辨时针、分钟还有秒针它们各自在几点的位置,这个才是决定指针方向的最要紧的地方!只要用点儿简单的数学计算就行了,这样我们就能得到非常准的角度值。
const hour = this.currentTime.getHours(); const minute = this.currentTime.getMinutes(); const second = this.currentTime.getSeconds(); const hourAngle = ((hour % 12) + minute / 60 + second / 3600) * 30 * Math.PI / 180; const minuteAngle = (minute + second / 60) * 6 * Math.PI / 180; const secondAngle = second * 6 * Math.PI / 180;
搞定了所有画图步骤之后,千万记得用` ctx.stroke()`给钟画个红框,这样我们才能看清。想要钟表动起来?那得用上神奇的`requestAnimationFrame()`,不断刷新钟面,看它活蹦乱跳地像真钟表似的!
我们刚刚搞定了一个特炫酷的计时器,还会自己更新!下面咱们就用Vue和Canvas搞个计时器挑战。
二、倒计时应用
// 绘制时钟的外圆 ctx.beginPath(); ctx.arc(width / 2, height / 2, width / 2 - 10, 0, 2 * Math.PI); ctx.lineWidth = 10; ctx.strokeStyle = 'black'; ctx.stroke(); // 绘制时钟的时针 ctx.beginPath(); ctx.moveTo(width / 2, height / 2); ctx.lineTo(width / 2 + Math.sin(hourAngle) * (width / 2 - 50), height / 2 - Math.cos(hourAngle) * (width / 2 - 50)); ctx.lineWidth = 6; ctx.strokeStyle = 'black'; ctx.stroke(); // 绘制时钟的分针 ctx.beginPath(); ctx.moveTo(width / 2, height / 2); ctx.lineTo(width / 2 + Math.sin(minuteAngle) * (width / 2 - 30), height / 2 - Math.cos(minuteAngle) * (width / 2 - 30)); ctx.lineWidth = 4; ctx.strokeStyle = 'black'; ctx.stroke(); // 绘制时钟的秒针 ctx.beginPath(); ctx.moveTo(width / 2, height / 2); ctx.lineTo(width / 2 + Math.sin(secondAngle) * (width / 2 - 20), height / 2 - Math.cos(secondAngle) * (width / 2 - 20)); ctx.lineWidth = 2; ctx.strokeStyle = 'red'; ctx.stroke();
倒计时大家都见过?最拉风的网页动作效果之一!用Vue和Canvas做太轻松了。今天咱说说怎么用这俩大杀器搞个惊艳的倒计时时钟出来。
requestAnimationFrame(this.drawClock);
就是像玩表一样,首先在Vue里创建一个实例,接着在data里面弄个’remainingTime’来表示剩下的时间。搞定了之后,把7天设定成后台运行到期的时间点,然后就可以启动倒计时!
用startCountdown算好剩多少时间后,用setInterval这牛人继续管着倒计时。等时间到,关掉定时器,倒计时代码就搞定。
好,咱们来用Canvas API画个倒计时图片。首先,咱得找Canvas。弄好了之后,用`ctx.fillText()`把剩下的时间给填上颜色。
最开始,为了让倒计时显得更加真实,我们在画图时候得琢磨下这玩意儿咋变。比如说,使用名叫`requestAnimationFrame()`的东西让画面更新,这样倒计分明明会看着减少!
export default { data() { return { remainingTime: null }; }, mounted() { const endTime = new Date(); endTime.setDate(endTime.getDate() + 7); this.startCountdown(endTime); this.drawCountdown(); }, methods: { startCountdown(endTime) { // 在这里实现倒计时的逻辑 }, drawCountdown() { // 在这里实现绘制倒计时的逻辑 } } };
搞定!搞了一款超赞又实在的倒数计时时钟应用,利用Vue和Canvas技术喔,让你上网更带劲儿~
三、总结与展望
const now = new Date(); const remainingTime = Math.floor((endTime - now) / 1000); this.remainingTime = remainingTime;
这篇文章教会了你如何使用Vue和Canvas弄出一个超酷的钟表,还有倒计时!看完之后,你就懂得怎么用这俩前端工具玩点新鲜事儿!
现在搞网站前端开发的人厉害得很~有了Vue和Canvas这类好东西,连炫酷的动画都能随手就来!
this.timer = setInterval(() => { if (this.remainingTime > 0) { this.remainingTime--; } else { clearInterval(this.timer); } }, 1000);
希望你看过这篇文章后能找到灵感,尝试用到你自己的项目中!
快来聊聊你用Vue和Canvas制作炫酷动画的过程,不管是你遇到的难题还是开心事都行!期待听到你们的声音呢~
const canvas = document.getElementById('countdownCanvas'); const ctx = canvas.getContext('2d'); const width = canvas.width; const height = canvas.height;
。
评论0