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

news2024/11/18 20:29: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);  // 毫秒/1000

        var day = parseInt(time/86400); // 天  24*60*60*1000

        var 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.coloradmin.cn/o/95986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

八、Docker 安装Mysql(流程、注意点、实例)

Docker 安装mysql 要不 安装tomcat 稍微复杂些,要配置一些参数,例如mysql密码,配置文件编写等。 1、docker hub上面查找mysql镜像 地址:Docker Hub 可以拉取最新的,也可以按照tag搜索自己想要的版本,拉取 2、从docker hub上拉取mysql5.7镜像到本地 命令:docker pull …

【实时数仓】DWM层设计模式、独立访客(UV)的计算

文章目录一 DWS层与DWM层的设计1 设计思路2 DWS层需求分析二 DWM层-UV计算1 需求分析与思路2 从kafka中读取数据&#xff08;1&#xff09;代码实现&#xff08;2&#xff09;测试&#xff08;3&#xff09;总结3 UV过滤 -- 独立访客计算&#xff08;1&#xff09;实现思路&…

Spring+SpringMVC+MP登录案例(含拦截器)

技术框架 后端&#xff1a;Spring、Spring MVC、Mybatis-Plus 前端&#xff1a;HTML、CSS、Layui、JS、Jquery 功能模块技术 1、用户的每一个请求使用了SpringMVC 拦截器技术&#xff0c;没有登录的用户自动重定向到登录页 2、统一请求模式&#xff0c;使用Restful风格对后端…

贤鱼的刷题日常(数据结构栈学习)-1551:Sumsets--题目详解

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;例题讲解1551:Sumsets ✅创作者&#xff1a;贤鱼 ⏰预计时间&#xff1a;25分钟 &#x1f389;个人主页&#xff1a;贤鱼的个人主页 &#x1f525;专栏系列&#xff1a;c &#x1f341;贤鱼的个人社区&#xff0c;欢迎你的…

学Python的理由有哪些?这四大理由足够了

学Python的理由有哪些&#xff1f;可能有人会说Python是一种计算机语言&#xff0c;具有简洁性、易读性、及可扩展性&#xff0c;相对于其他语言学起来会更加容易&#xff0c;目前应用也非常广泛等等。其实总结起来&#xff0c;学Python的理由不外乎四点&#xff0c;即丰富免费…

Python数据分析主要功能是什么?可以用来做什么?

Python是一种计算机程序设计语言&#xff0c;具有简洁性、易读性以及可扩展性&#xff0c;相较于其他语言学习起来更加容易。随着互联网的发展&#xff0c;Python知识也被越来越多的人所熟知。但还是有很多人不了解它究竟可以用来做什么&#xff0c;接下来就跟随我了解一下吧&a…

【轻量级开源ROS 的机器人设备(5)】--(2)拟议的框架——µROS节点

接上文&#xff1a; 【轻量级开源ROS 的机器人设备&#xff08;5&#xff09;】--&#xff08;1&#xff09;拟议的框架——ROS节点 四、开发工具 为了方便用户应用程序的开发&#xff0c;一个代码生成器&#xff0c;一个 堆栈使用分析器和演示项目包含在框架中包裹。 4.1 代…

截止12.17 bitahub踩坑,mask无数次更改,lama代码的那些痛,羊了个羊

前面那篇跑出了STCN&#xff0c;倒是STCN熟悉了很多了 对bitahub&#xff0c;需要注意一个问题 要进ssh请用debug卡&#xff01;&#xff01;&#xff01;&#xff01; 要进ssh请用debug卡&#xff01;&#xff01;&#xff01;&#xff01; 要进ssh请用debug卡&#xff01;&…

数据库文档展示工具

实用工具&#xff1a;数据库文档展示工具 简介 数据库文档展示工具&#xff08;database doc&#xff09;&#xff0c;又叫数据库注释浏览工具&#xff0c;是一个简单的数据库展示各个字段注释的开源工具。在日常开发工作中&#xff0c;您有否这样的体验&#xff1f; 想给前…

干货 | 数字经济创新创业——数字技术创造新经济

下文整理自清华大学大数据能力提升项目能力提升模块课程“Innovation & Entrepreneurship for Digital Economy”&#xff08;数字经济创新创业课程)的精彩内容。主讲嘉宾&#xff1a;Kris Singh: CEO at SRII, Palo Alto, CaliforniaVisiting Professor of Tsinghua Unive…

Elasticsearch 多索引搜索 多条件筛选 去除重复数据

Elasticsearch 多索引搜索 多条件筛选先看结构 分别是索引media_data_es,live_room_essearch_type :dfs_query_then_fetch 不重复复合查询 复合查询就是把一些简单查询组合在一起实现更复杂的查询需求&#xff0c;除此之外&#xff0c;复合查询还可以控制另外一个查询的行为。 …

Spring MVC介绍

Spring MVC 简介什么是Spring MVC了解 MVCMVC 和Spring MVC的联系如何创建一个Spring Web项目在Spring Web 项目中&#xff0c;如何连接Http请求Controller注解可以用其他类注解代替吗连接其他类型的请求如何获取请求中的数据获取单个请求参数获取多个请求参数获取对象获取表单…

高通平台开发系列讲解(DSI篇)DSI层在拨号中的调用逻辑

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢DSI层在拨号中起到的是承上启下的作用。 拨号初始化: 通过mcm_data_init_srv接口调用dsi_init_ex接口,而dsi_init_ex接口进一步通过依次调用dsi_init_cb_func来初始化注册回调、dsi_init_cb_data来初始化数据回调及dsi…

XXL-Job分布式任务调度框架-- 介绍和服务搭建1

一 xxl-job介绍 1.1 xxl-job介绍 xxl-job是轻量级的分布式任务调度框架&#xff0c;目标是开发迅速、简单、清理、易扩展; 老版本是依赖quartz的定时任务触发&#xff0c;在v2.1.0版本开始 移除quartz依 。 分布式任务调度平台XXL-JOB/ 分布式任务调度平台XXL-JOB 二 xxl-…

Prometheus之集成Flink

目录1. 基本介绍2. 拷贝Flink jar包3. 修改Flink的配置文件flink-conf.yaml4. 重启Flink集群5. 验证是否集成成功1. 基本介绍 Flink提供的Metrics可以在Flink内部收集一些指标&#xff0c;通过这些指标让开发人员更 好地查看作业或集群的状态 2. 拷贝Flink jar包 在Flink集群…

[附源码]Node.js计算机毕业设计互联网在线笔记管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

【C++】list的介绍和使用

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;list 的介…

操作系统原理和接口

这个阶段的课程讲授操作系统的原理和Linux系统给应用层提供的C编程接口。操作系统通过系统调用提供的抽象层是一切中间层和应用软件的根本。 课程建设思路-传统误区 长久以来这个阶段的课程是按照《UNIX环境高级编程》这本书进行讲解的。这个环节的课程甚至曾因此被称为"高…

新能源电动汽车充电桩收费平台

安科瑞 华楠 一、业务模式 平台客户 两种合作方式 1&#xff09;数据托管方式 安科瑞指导用户完成充电桩的安装&#xff0c;用户的充电桩将数据上传至安科瑞充电桩收费运营云平台&#xff0c;委托安科瑞管理&#xff0c;按规定/约定收取托管费用。 2&#xff09;用户自建平…

D-028 DDR3硬件电路设计

DDR3硬件电路设计1 简介2 电路设计3 设计要点1 简介 RAM&#xff08;Random Access Memory&#xff09;是随机存储器&#xff0c;存储单元中的内容可以按需任意去除或者存入&#xff0c;并且存取的速度与存储单元的位置无关。这种存储器在断电时&#xff0c;将丢失其存储的内容…