马上跨年了,如何用代码写一个“跨年倒计时”呢?

news/2024/11/18 0:47:11/

前言

大家好,我是陈橘又青,再过两周就是新的一年了,作为一名有仪式感的程序员,今天我们就来制作一个简单的跨年倒计时小网页,祝看到的所有人新年快乐!(附上完整源码,需要的小伙伴自取即可)

文章目录

  • 前言
  • 效果展示
  • 代码展示
  • 倒计时讲解
  • 背景音乐

效果展示

在这里插入图片描述


代码展示

<!doctype html><html><head><meta charset="utf-8"><title>新年快乐</title><style>body{overflow: hidden;margin: 0;}h1{position: fixed;top: 30%;left: 0;width: 100%;text-align: center;transform:translateY(-50%);font-family: 'Love Ya Like A Sister', cursive;font-size: 60px;color: ff64d9;padding: 0 20px;}h1 span{position: fixed;left: 0;width: 100%;text-align: center;margin-top:30px;font-size:40px;}</style></head><body><h1 id="h1"></h1><canvas></canvas> <script>var canvas = document.querySelector("canvas"),ctx = canvas.getContext("2d");var ww,wh;function onResize(){ww = canvas.width = window.innerWidth;wh = canvas.height = window.innerHeight;}ctx.strokeStyle = "red";ctx.shadowBlur = 25;ctx.shadowColor = "hsla(0, 100%, 60%,0.5)";var precision = 100;var hearts = [];var mouseMoved = false;function onMove(e){mouseMoved = true;if(e.type === "touchmove"){hearts.push(new Heart(e.touches[0].clientX, e.touches[0].clientY));hearts.push(new Heart(e.touches[0].clientX, e.touches[0].clientY));}else{hearts.push(new Heart(e.clientX, e.clientY));hearts.push(new Heart(e.clientX, e.clientY));}}var Heart = function(x,y){this.x = x || Math.random()*ww;this.y = y || Math.random()*wh;this.size = Math.random()*2 + 1;this.shadowBlur = Math.random() * 10;this.speedX = (Math.random()+0.2-0.6) * 8;this.speedY = (Math.random()+0.2-0.6) * 8;this.speedSize = Math.random()*0.05 + 0.01;this.opacity = 1;this.vertices = [];for (var i = 0; i < precision; i++) {var step = (i / precision - 0.5) * (Math.PI * 2);var vector = {x : (15 * Math.pow(Math.sin(step), 3)),y : -(13 * Math.cos(step) - 5 * Math.cos(2 * step) - 2 * Math.cos(3 * step) - Math.cos(4 * step))}this.vertices.push(vector);}}Heart.prototype.draw = function(){this.size -= this.speedSize;this.x += this.speedX;this.y += this.speedY;ctx.save();ctx.translate(-1000,this.y);ctx.scale(this.size, this.size);ctx.beginPath();for (var i = 0; i < precision; i++) {var vector = this.vertices[i];ctx.lineTo(vector.x, vector.y);}ctx.globalAlpha = this.size;ctx.shadowBlur = Math.round((3 - this.size) * 10);ctx.shadowColor = "hsla(0, 100%, 60%,0.5)";ctx.shadowOffsetX = this.x + 1000;ctx.globalCompositeOperation = "screen"ctx.closePath();ctx.fill()ctx.restore();};function render(a){requestAnimationFrame(render);hearts.push(new Heart())ctx.clearRect(0,0,ww,wh);for (var i = 0; i < hearts.length; i++) {hearts[i].draw();if(hearts[i].size <= 0){hearts.splice(i,1);i--;}}}onResize();window.addEventListener("mousemove", onMove);window.addEventListener("touchmove", onMove);window.addEventListener("resize", onResize);requestAnimationFrame(render);window.onload=function starttime(){time(h1,'2023,01,01');    // 2023年元旦时间ptimer = setTimeout(starttime,1000); // 添加计时器}function time(obj,futimg){var nowtime = new Date().getTime(); // 现在时间转换为时间戳var futruetime =  new Date(futimg).getTime(); // 未来时间转换为时间戳var msec = futruetime-nowtime; // 毫秒 未来时间-现在时间var time = (msec/1000);  // 毫秒/1000var day = parseInt(time/86400); // 天  24*60*60*1000var hour = parseInt(time/3600)-24*day;    // 小时 60*60 总小时数-过去的小时数=现在的小时数var minute = parseInt(time%3600/60); // 分 -(day*24) 以60秒为一整份 取余 剩下秒数 秒数/60 就是分钟数var second = parseInt(time%60);  // 以60秒为一整份 取余 剩下秒数obj.innerHTML="<br>距离2023年还有:<br>"+day+"天"+hour+"小时"+minute+"分"+second+"秒"+"<br><span>平安喜乐<br>万事顺遂</span>"return true;}</script></body></html> 

倒计时讲解

新年倒计时才是本页面的灵魂,很多小伙伴可能会好奇,如何设置倒计时呢?

其实只需要用当前window的事件来设置一个开始的事件。【倒计时时间=过年时间-当前时间】

设置time为2023年1月1日,添加计时器从当前时间开始, 设置作用时间,将时间进行一个转换为当前的时间,并设置未来的一个时间戳随后定义一个变量来获取倒计时时间是多少。【未来时间-现在的时间】

再将获取到的时间毫秒为单位/1000来计算,小时数用总小时数-过去的小时数为现在的小时数,再以60秒为一整份,取余计算得到的就是分钟数在用当前的时间%60就是秒数,最后我们插入想要的信息将上述设置的变量插入进去即可!


背景音乐

src给一个背景的音乐链接(非本地音频需联网),使用下方代码即可。

 <audio id="bgmusic" src="https://y.qq.com/n/ryqq/player"></audio><script type="text/javascript">document.addEventListener('DOMContentLoaded', function () {function audioAutoPlay() {var audio = document.getElementById('bgmusic');audio.play();document.addEventListener("WeixinJSBridgeReady", function () {audio.play();}, false);}audioAutoPlay();});

在这里插入图片描述


http://www.ppmy.cn/news/4200.html

相关文章

【生信算法】利用HMM纠正测序错误(Viterbi算法的python实现)

利用HMM纠正测序错误&#xff08;Viterbi算法的python实现&#xff09; 问题背景 对两个纯系个体M和Z的二倍体后代进行约~0.05x的低覆盖度测序&#xff0c;以期获得后代个体的基因型&#xff0c;即后代中哪些片段分别来源于M和Z。已知&#xff1a; 后代中基因型为MM、MZ&…

华为机试真题 Java 实现【开放日活动】【2022.11 Q4 新题】

目录 题目 思路 考点 Code 题目 题目描述 某部门开展Family Day开放日活动,其中有个从桶里取球的游戏,游戏规则如下:有N个容量一样的小桶等距排开,且每个小桶都默认装了数量不等的小球, 每个小桶装的小球数量记录在数组 bucketBallNums 中,游戏开始时,要求所有桶的小球…

【10秒在圣诞节做出温馨的圣诞树】

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

MySQL表的约束

为防止数据表中插入错误的数据&#xff0c;MySQL定义了一些维护数据库完整性的规则&#xff0c;即表的约束。常用的约束分为五种&#xff1a;默认约束、非空约束、主键约束、唯一约束和外键约束 目录 默认约束 非空约束 唯一约束 主键约束 自动增长 默认约束 默认约束用…

Linux文件权限概念

目录 前言 1、Linux 文件属性 1.1、档案类型权限 1.2、连结数 1.3、档案拥有者 1.4、档案所属群组 1.5、档案容量 1.6、档案最后被修改的时间 1.7、档名&#xff08;文件名&#xff09; 2、如何改变文件属性和权限 2.1、改变所属群组, chgrp 2.2、改变档案拥有者, c…

DockerCompose部署系列:搭建Graylog日志环境

# 拉取镜像 docker pull elasticsearch:7.12.0 docker pull graylog/graylog:4.3.6 docker pull mongo:4.2# 创建网络 docker network create mynetwork# 配置三个文件&#xff0c;es,mogo,graylog vi dockercompose-es.yml version: 3 services:elasticsearch:image: elastics…

【数据结构Note6】-图-知识总结(图存储+BFS+DFS+最小生成树+最短路径+拓扑+逆拓扑)

文章目录6.1 图的定义及性质6.1.1 无向图和有向图6.1.2 简单图和多重图6.1.3 图的相关概念6.1.3.1 顶点的度6.1.3.2 顶点和顶点的关系6.1.3.3 子图6.1.3.4 连通分量6.1.3.5 强连通分量6.1.3.6 生成树6.1.3.7 生成森林6.1.3.8 边的权、带权图/网6.1.3.9 几种特殊的图6.2 图的存储…

leetcode1785:构成特定和需要添加的最少元素(12.16每日一题)

题目表述&#xff1a; 给你一个整数数组 nums &#xff0c;和两个整数 limit 与 goal 。数组 nums 有一条重要属性&#xff1a;abs(nums[i]) < limit 。 返回使数组元素总和等于 goal 所需要向数组中添加的 最少元素数量 &#xff0c;添加元素 不应改变 数组中 abs(nums[i…