通过JavaScript实现限时秒杀(实践)|青训营

230 阅读1分钟

小白通过听掘金课程中老师的讲授,并学习了《JavaScript前端开发案例教程》。用Javascript+html实现了限时秒杀页面功能。

 

首先用html设计页面及布局。


<html>

    <head>

    <meta charset="UTF-8">

    <title>Insert title here</title>

    </head>

    <body>

        <div id="box" >

            <div id="biaoti"><p>距离本次秒杀结束还剩:</p></div>

            <div id="day" ></div> //剩余天数

            <div id="hour"></div> //小时

            <div id="minute"></div> //分钟

            <div id="second"></div> //秒

        </div>

    </body>

这里的文字和功能块全部采用div。因为要实现的是一个比较简单的功能,所以方便进行样式的调节和设置。为了实现居中对齐。所以将父级div的宽度设置成了100%

    <style>

        #box{

            width: 100%;

            height: 20px;

            text-align: center;

        }

 

        #biaoti{

            width: 200px;

            overflow: auto;

            display: inline-block;

            background-color: rgb(229, 146, 11);

        }

 

        #day{

            width: 50px;

            overflow: auto;

            display: inline-block;

            border: 1px solid;

            margin-bottom: 12px;

        }

        #hour{

            width: 50px;

            overflow: auto;

            display: inline-block;

            border: 1px solid;

            margin-bottom: 12px;

        }

        #minute{

            width: 50px;

            overflow: auto;

            display: inline-block;

            border: 1px solid;

            margin-bottom: 12px;

        }

        #second{

            width: 50px;

            overflow: auto;

            display: inline-block;

            border: 1px solid;

            margin-bottom: 12px;

        }

    </style>

</html>
这里就是一些样式的设置。进行宽度和display属性的设置是为了让div组块出现在一行。

JavaScript功能实现:

<script>

    var endTime = new Date('2023-8-20 22:00:00'),endSeconds = endTime.getTime();//设置结束时间

    var day =hour=minute=second = 0;//定义变量保存剩余的时间

    var id = setInterval(seckill,1000);//设置定时器

    function seckill(){

        var nowTime = new Date();//获取当前的时间

        var remaining = parseInt((endSeconds - nowTime.getTime())/1000);

       

        if(remaining>0){

            day= parseInt(remaining/(60*60*24));//通过秒数进行计算的

            hour = parseInt(remaining / (60*60)%24);

            minute = parseInt(remaining / 60%60);

            second = parseInt(remaining %60);

           

             day = day<10 ?'0'+day :day;//用两位数表示剩余的天数。

             hour = hour<10 ?'0'+hour :hour;//用两位数表示剩余的时数。

             minute = minute<10 ?'0'+minute :minute;//用两位数表示剩余的分数。

             second = second<10 ?'0'+second :second;     //用两位数表示剩余的秒数。

        }

        else{

            clearInterval(id);

            day=hour=minute=second='00';//秒杀过期,取消定时器

        }

       

//将剩余的时间通过特定id显示到网页中。

    document.getElementById('day').innerHTML = day + '天';

    document.getElementById('hour').innerHTML = hour + '时';

    document.getElementById('minute').innerHTML = minute + '分';

    document.getElementById('second').innerHTML = second + '秒';

   

    }

</script>

 1.png

1. 秒杀时间endTime是自己设置的。之后设置定时器。

2. 通过Date对象提供的getTime()方法分别获取结束时间和当前时间的毫秒数

3. 将结束时间和当前时间相减获得剩余的秒数。

4. 通过if函数进行判断秒杀时间是否过期,若没有过期,则计算剩余的天数、小时、分钟和秒数;若已过期则停止秒杀的倒计时。

 

 

代码中选用setInterval()设置定时器,而不用setTimeout()。是因为,setInterval可以重复执行代码。而setTimeout只执行一次代码

最终实现效果如下图gif所示:

屏幕录制 2023-08-20 210015.gif