当青训营遇上马上掘金,在2023年的寒假专场正好遇上了字节跳动的青训营活动,这是新的开始、新的旅途,遇见字节、遇见志同道合的“码友”,2022年末和2023年初的相遇会让人生也多了一些奇妙。
当看到这个活动的时候想到了快年末以及活动的截止时间也是2022年12月30日,由此想写一个新年的倒计时,当然也是因为想要锻炼一下自己,看看自己是不是手生疏了(我是个新手,学了前端没有多久哦,写的没那么好),主要是想练习一下自己的js的知识点,所以html部分和css部分就不过多的介绍啦,对了还有一点,我写的是PC端的样式嗷,没有写mobile端的样式。
下面是做出来的效果:
> <div class="container">
> <h2><span id="title">跨年倒计时</span>2023</h2>
> <div class="content">
> <div id="day">--</div>
> <div id="hour">--</div>
> <div id="minute">--</div>
> <div id="second">--</div>
> </div>
> </div>
> <button type="button" class="btn1" onclick="fun1()">恭喜发财</button>
> <button type="button" class="btn2" onclick="fun2()">发个红包</button>
> <button type="button" class="btn3" onclick="fun3()">我不要</button>
> <button type="button" class="btn4" onclick="fun4()">再考虑一下嘛</button>
> <button type="button" class="btn5" onclick="fun5()">发一个</button>
> <img src="#" alt="" class="imgs1">
> </body>
CSS部分
padding: 0;
margin: 0;
font-family: 'Poppins', sans-serif;
}
html,
body {
width: 100%;
height: 100%;
background-image: url('https://img.win3000.com/m00/0c/9f/15a450593485a315ed88ece9c9fe0852.jpg');
background-attachment: fixed;
background-repeat: no-repeat;
background-size: cover;
transition: .5s;
overflow: hidden;
}
.container {
position: absolute;
display: flex;
top: 80px;
left: 100px;
right: 100px;
bottom: 80px;
background-size: cover;
/*铺满整个容器*/
justify-content: center;
align-items: center;
flex-direction: column;
box-shadow: 0 50px 50px rgba(0, 0, 0, 0.8),
0 0 0 100px rgba(0, 0, 0, 0.3);
}
.container h2 {
text-align: center;
font-size: 10em;
line-height: 0.7em;
color: #ffffff;
margin-top: -250px;
}
.container h2 span {
display: block;
font-weight: 300;
letter-spacing: 6px;
font-size: 20px;
}
.content {
display: flex;
margin-top: 50px;
}
.content div {
position: relative;
margin: 0px 15px;
text-align: center;
background: #333;
width: 100px;
height: 100px;
line-height: 100px;
/*居中*/
color: #ffffff;
font: 500 35px/100px '微软雅黑';
border-radius: 10px 10px 0 0;
}
.content div:before {
content: '';
position: absolute;
bottom: -30px;
left: 0px;
background: rgb(177, 42, 42);
width: 100%;
height: 35px;
font: 300 0.35em/35px '微软雅黑';
border-radius: 0 0 10px 10px;
}
.content #day:before {
content: '天';
}
.content #hour:before {
content: '时';
}
.content #minute:before {
content: '分';
}
.content #second:before {
content: '秒';
}
canvas {
/*准备画布*/
width: 100%;
height: 100%;
}
.imgs1 {
display: none;
height: 400px;
width: 400px;
opacity: .5;
position: relative;
left: 40%;
top:20%;
}
button {
display: none;
border: 1px #e5e5e5 solid;
border-radius: 5px;
height: 50px;
background: rgb(234, 79, 79);
font-size: 18px;
position: relative;
}
button:hover{
color: #ffffff;
}
.btnBlock {
/* 显示按钮 */
display: block;
}
.btn1 {
top: 70%;
left: 30%;
display: block;
}
.btn2 {
top: 64.1%;
left: 66%;
display: block;
}
.btn3 {
top: 40%;
left: 20%;
}
.btn4 {
top: 30%;
left: 70%;
}
.btn5 {
top: 500px;
left: 50%;
}
JS部分
这一部分主要完成三个模块,①计时器;②背景图片的轮播效果;③雪花效果;④皮一下
首先计时器部分使用js中的new Date()函数标准化时间,然后getTime()获取当前的时间,依次将对应数据位置进行计算的即可(向下取整数floor)再设置一个setInterval()函数一秒钟(1000ms)更新一次。
然后背景图片轮播部分,写完之后才发现原来不能上传源文件,后来就在网上直接用网站链接的图片,定义几个变量将几张图片的链接保存其起来,然后用数组的形式去存储变量(方便后续的图片的调用)setInterval()函数去依次进行轮播即可,效果是差不多的。 其次雪花效果,这个效果部分首先就新建div,将雪花在新建的div中显示,三个计时器完成雪花的效果。First,雪花的初始化,定义雪花的初始结位置、初始和结束的透明度、初始和结束的大小、持续时间。
Second,克隆一片雪花,使用setTimeout()函数去反复的克隆随机的一片雪花,并将克隆好的雪花添加到页面中。
Third,有雪花落下后将其删除,结束啦。
function show_runtime() {
var countDay = new Date('2023/1/1 00:00:00:00');
var now = new Date().getTime();//获取当前时间
cha = countDay - now;
var second = 1000;
var minute = second * 60;
var hour = minute * 60;
var day = hour * 24;
var d = Math.floor(cha / day);
var h = Math.floor((cha % day) / hour);
var m = Math.floor((cha % hour) / minute);
var s = Math.floor((cha % minute) / second);
if ((d, h, m, s) < 0) {
f = true;
} else {
$('#day').text(d);
$('#hour').text(h);
$("#minute").text(m);
$("#second").text(s);
}
}
//每秒显示一次
var time = setInterval(() => {
show_runtime();
if (f == true) {
clearInterval(time);
}
}, 1000)
// time();
//添加背景图轮播
function rollImgs() {
var items1 = "https://img.win3000.com/m00/0c/9f/15a450593485a315ed88ece9c9fe0852.jpg";//初始化
var items2 = "https://imgo.68h5.com/img2021/12/23/11/2021122302522150.jpg";
var items3 = "https://bpic.588ku.com/back_list_pic/22/08/23/3e86a71ca03166a7a4acae5fb388a4e4.jpg!/fh/300/quality/90/unsharp/true/compress/true";
var items4 = " https://img.redocn.com/sheji/20221117/qingyuandanyingxinnian2022yuandanwanhuiwutaibeijingzhanban_12761895.jpg";
let arr = [items1, items2, items3, items4];
var i = 0;
setInterval(() => {
i++;
if (i == 4) {
i = 0;
}
document.body.style.backgroundImage = 'url(' + arr[i] + ')';
}, 3000)
}
window.onload = rollImgs();
//添加雪花
function snow() {
var flake = document.createElement('div');
flake.innerHTML = '❄';
flake.style.cssText = 'position:absolute;color:#fff;';
//获取页面的高度 相当于雪花下落结束时Y轴的位置
var documentHieght = window.innerHeight;
//获取页面的宽度,利用这个数来算出,雪花开始时left的值
var documentWidth = window.innerWidth;
//生成一片雪花的时间
var millisec = 10;
//递归生成一片雪花
setInterval(function () {
//初始化雪花、大小、位置、透明度、持续时间及其变化
var startLeft = Math.random() * documentWidth;
var endLeft = Math.random() * documentWidth;
var flakeSize = 3 + 20 * Math.random();
var durationTime = 5000 + 5000 * Math.random();
var startOpacity = 0.7 + 0.3 * Math.random();
var endOpacity = 0.2 + 0.2 * Math.random();
var cloneFlake = flake.cloneNode(true);//克隆一份
//定义克隆出来的雪花的样式
cloneFlake.style.cssText += `
left: ${startLeft}px;
opacity: ${startOpacity};
font-size:${flakeSize}px;
top:-25px;
transition:${durationTime}ms;`;
//加载到页面中
document.body.appendChild(cloneFlake);
//让雪花动起来;
setTimeout(function () {
cloneFlake.style.cssText += `
left: ${endLeft}px;
top:${documentHieght}px;
opacity:${endOpacity};`;
//雪花落下后,删除雪花。
setTimeout(function () {
cloneFlake.remove();
}, durationTime);
}, 0);
}, millisec);
}
snow();
//皮一下
function fun1() {
// $('.btn3').toggle('btnBlock');
// $('.btn4').toggle('btnBlock');
$('.btn1').css('display', 'none');
$('.btn2').addClass('btnBlock');
}
function fun2() {
$('.btn3').addClass('btnBlock');
$('.btn4').addClass('btnBlock');
$('.btn2').css('display', 'none');
}
function fun3() {
$('.btn3').css('display', 'none');
$('.btn4').addClass('btnBlock');
}
function fun4() {
$('.btn4').css('display', 'none');
$('.btn5').css('display', 'block');
}
function fun5() {
$('.btn5').css('display', 'none');
$('.imgs1').css('display', 'block');
}
当然我也是仿写友友们写的效果, 相关参考链接[(blog.csdn.net/geyaoisnice…)] [(22条消息) JavaScript 实现雪花效果_搬砖小浩浩的博客-CSDN博客_js雪花]