Web前端开发 小实训(三) 商品秒杀小练习

学生能够在本次实训中完成商品秒杀页面的基本逻辑

任务要求

能够实现某一个商品的秒杀,在倒计时结束后不再进行秒杀。

操作步骤

1、打开预设好的页面

<html><head><meta charset="utf-8"><title>秒杀</title><link rel="stylesheet" href="css/ms.css"></head><body><div class="container"><div class="item ms"><h2 class="title">商品秒杀</h2><h3 class="subtitle">FLASH DEALS</h3><i class="icon"></i><p class="desc">本场距离结束时间</p><div class="clock"><span id="hours" class="hour">00</span><span class="point">:</span><span id="minutes" class="minute">00</span><span class="point">:</span><span id="seconds" class="second">59</span></div></div><div class="item"><a href="#" class="product-link"><img src="https://img20.360buyimg.com/seckillcms/s280x280_jfs/t28882/109/582315249/52026/e4ff99b9/5bf7cb37N98f8ac82.jpg.webp"alt="商品" height="130"><p class="product-desc">3M 节气门清洗剂【不伤镀层|多功能除油泥除积碳|8866升级】汽车金属件润滑节流阀去油污非化清剂PN18066</p><div class="price"><span class="price-new">134.00</span><span class="price-old">208.00</span><button class="button_allow">抢购 </button></div></a></div><div class="item"><a href="#" class="product-link"><img src="https:///img12.360buyimg.com/seckillcms/s280x280_jfs/t1/116581/22/13747/111761/5f2373f5E2f543b8f/8a64bb1f2303930b.jpg.webp"alt="商品" height="130"><p class="product-desc">华为nova7 SE 5G手机【12期免息可选/送碎屏险】 全网通 幻夜黑 8G+128G</p><div class="price"><span class="price-new">1324.00</span><span class="price-old">4208.00</span><button class="button_allow">抢购 </button></div></a></div><div class="item"><a href="#" class="product-link"><img src="https:///img12.360buyimg.com/seckillcms/s280x280_jfs/t1/144957/21/3917/192269/5f1fcf99E314ac8a7/75a2d6a7cabc3d72.jpg.webp"alt="商品" height="130"><p class="product-desc">雷公馆 毛呢大衣女秋冬新品毛呢外套羊毛呢宽松显瘦呢子大衣中长款单排扣品牌上衣 米白色 M</p><div class="price"><span class="price-new">324.00</span><span class="price-old">908.00</span><button class="button_allow">抢购 </button></div></a></div></div>
</body>
</html>

css

/*位置在css目录下,名字为 ms.css*/
*{margin: 0px;padding: 0px;font: 12px/1.5 Tahoma, Arial, Harrington, "微软雅黑" /*给标签一个初始大小 12像素 1.5倍行距 管理字体*/
}
a{text-decoration: none;/*去掉默认链接的下划线*/color: black;
}
a:hover{color: red;/*实现鼠标上去变色*/
}
.container{/*border: red solid 1px;*/overflow: hidden;	
}
.item{float: left;width: 190px;height: 260px;border: #877D7D solid 1px;			
}
.ms{/*秒杀模块拥有单独的背景色 且模块的字体是白色*/background-color: #D90D0D;color: white;text-align: center;/*表示里面所有的模块是居中的*/
}
.ms .title{/*秒杀模块的字体*/font-size: 30px;margin: 15px;/*距头顶*/
}
.ms .subtitle{font-size: 20px;color: rgba(255,255,255,0.5);/*含有透明色*/margin-bottom: 10px;/*和下一个模块保持距离*/
}
.ms .icon{/*那个闪电描述 这个盒子*/width: 30px;height:57px;/*此时没有显示 */display: block;/*i元素通过这个显示属性*/background-image: url(../images/3.jpg);/*此时只显示了一小部分 需要移动*/background-position: -130px -102px;margin:0 auto 15px;/*块状模块的居中*/ /*和下一个模块保持距离*/}
.ms .desc{font-size: 16px;margin: 5px;}
/*后代选择器*/
.ms .clock span.second,span.hour,span.minute{display: inline-block;/*并排显示 更是为了可以人为指定宽度*/width: 40px;height: 40px;background-color: black;font-size: 20px;line-height: 40px;/*让字体的显示在中间按*/	
}
.ms .clock span.point{display: inline-block;/*并排显示 更是为了可以人为指定宽度*/width: 10px;height: 40px;font-size: 20px;line-height: 40px;/*让字体的显示在中间按*/
}
.product-link{display: block;height: 100%;text-align: center;padding-top: 39px;
}
.product-desc{/*文字显示在一行并且没显示的用...代替*/white-space: nowrap;/*文字不换行*/width: 160px;overflow: hidden;text-overflow: ellipsis;/*超出部分使用..代替*/margin: 0 auto 20px;	}
.price{width: 160px;height: 20px;background-color: red;margin: 0 auto;padding:1px;
}
.price span{width: 78px;height: 20px;font-size: 14px;display: inline-block;
}
.price .price-new{line-height: 20px;color: antiquewhite;}
.price .price-old{color: white;background-color: #766364;}.price .button_allow{width: 160px;height: 20px;font-size: 14px;margin-top: 5px;color: white;display: inline-block;background-color: red;}.price .button_forbid{width: 160px;height: 20px;font-size: 14px;margin-top: 5px;color: white;display: inline-block;background-color:  #766364;
}

2、设置秒杀结束时间

//单独设置一个结束时间,人为定义
let endTime = new Date("2024-5-5 10:00:00").getTime();

3、声明变量保存剩余的时间

// 2、声明变量保存剩余的时间
let hours, minutes, seconds = 0;

4、 设置定时器,实现限时秒杀效果

 function ms() {alert("秒杀开始了!")//4、设置定时器let interval =  window.setInterval(function () {//实际业务}, 1000);}//调用该方法ms();

5、 获取时间差(单位秒),并判断秒杀是否过期

 let now = new Date();//获取当前时间//获取设置的时间差 remaining 差距let remaining = endTime - now.getTime();//只要时间差大于0 就可以进行倒计时 if (remaining > 0) {//简易版:转化为还差多少秒let seconds = parseInt(remaining / 1000);//还差多少秒 转化为整数秒seconds = seconds < 10 ? "0"+seconds:seconds; //小于 0 则为0+秒数document.getElementById("seconds").innerText = seconds;} else {//结束了alert("秒杀结束了!");//复位document.getElementById("seconds").innerText = "00";}

6、取消定时器

 } else {//结束了alert("秒杀结束了!");//6、在停止后结束取消定时器window.clearInterval(interval);
}

7、设置演示当前效果(将 倒计时时间设置为大于 当前时间)

8、倒计时结束前可以点击抢购获取商品(补充:onclick事件)

<button class="button_allow" onclick="alert('恭喜你抢到了清洁剂!')">抢购 </button>
<button class="button_allow" onclick="alert('恭喜你抢到了nova7SE!')">抢购 </button>
<button class="button_allow" onclick="alert('恭喜你抢到了毛呢大衣!')">抢购 </button>

9、倒计时结束后修改按钮样式,并使其不再进行点击

//结束了
alert("秒杀结束了!");
document.getElementById("seconds").innerText = "00";//6、在停止后结束取消定时器
window.clearInterval(interval);//8、让所有按钮修改弹出样式
let buttonList = document.getElementsByTagName("button");
for(let index = 0 ; index < buttonList.length; index ++){   buttonList[index].setAttribute("disabled","true");//不再进行点击buttonList[index].removeAttribute("onclick");//移除点击事件buttonList[index].classList.replace("button_allow","button_forbid");

10、查看最终效果

完整代码:

<html><head><meta charset="utf-8"><title>秒杀</title><link rel="stylesheet" href="css/ms.css"></head><body><div class="container"><div class="item ms"><h2 class="title">商品秒杀</h2><h3 class="subtitle">FLASH DEALS</h3><i class="icon"></i><p class="desc">本场距离结束时间</p><div class="clock"><span id="hours" class="hour">00</span><span class="point">:</span><span id="minutes" class="minute">00</span><span class="point">:</span><span id="seconds" class="second">59</span></div></div><div class="item"><a href="#" class="product-link"><img src="https://img20.360buyimg.com/seckillcms/s280x280_jfs/t28882/109/582315249/52026/e4ff99b9/5bf7cb37N98f8ac82.jpg.webp"alt="商品" height="130"><p class="product-desc">3M 节气门清洗剂【不伤镀层|多功能除油泥除积碳|8866升级】汽车金属件润滑节流阀去油污非化清剂PN18066</p><div class="price"><span class="price-new">134.00</span><span class="price-old">208.00</span><button class="button_allow" onclick="alert('恭喜你抢到了3M清洁剂!')">抢购 </button></div></a></div><div class="item"><a href="#" class="product-link"><img src="//img12.360buyimg.com/seckillcms/s280x280_jfs/t1/116581/22/13747/111761/5f2373f5E2f543b8f/8a64bb1f2303930b.jpg.webp"alt="商品" height="130"><p class="product-desc">华为nova7 SE 5G手机【12期免息可选/送碎屏险】 全网通 幻夜黑 8G+128G</p><div class="price"><span class="price-new">1324.00</span><span class="price-old">4208.00</span><button class="button_allow" onclick="alert('恭喜你抢到了华为nova7 SE!')">抢购 </button></div></a></div><div class="item"><a href="#" class="product-link"><img src="//img12.360buyimg.com/seckillcms/s280x280_jfs/t1/144957/21/3917/192269/5f1fcf99E314ac8a7/75a2d6a7cabc3d72.jpg.webp"alt="商品" height="130"><p class="product-desc">雷公馆 毛呢大衣女秋冬新品毛呢外套羊毛呢宽松显瘦呢子大衣中长款单排扣品牌上衣 米白色 M</p><div class="price"><span class="price-new">324.00</span><span class="price-old">908.00</span><button class="button_allow" onclick="alert('恭喜你抢到了毛呢大衣!')">抢购 </button></div></a></div></div><script>//  1、设置秒杀结束时间 转化为 time类型let endTime = new Date("2024-5-5 10:46:20").getTime(); //将时间转化为 毫秒,用于后续计算// 2、声明变量保存剩余的时间let hours, minutes, seconds = 0;//3、设置方法 用于计算是否到时间了function ms() {alert("秒杀开始了!")//4、设置定时器let interval =  window.setInterval(function () {let now = new Date();//获取当前时间//获取设置的时间差 remaining 差距let remaining = endTime - now.getTime();//只要时间差大于0 就可以进行倒计时 if (remaining > 0) {//简易版:转化为还差多少秒let seconds = parseInt(remaining / 1000);//还差多少秒 转化为整数秒seconds = seconds < 10 ? "0"+seconds:seconds; //小于 0 则为0+秒数document.getElementById("seconds").innerText = seconds;} else {//结束了alert("秒杀结束了!");document.getElementById("seconds").innerText = "00";//6、在停止后结束取消定时器window.clearInterval(interval);//让所有按钮修改弹出样式let buttonList = document.getElementsByTagName("button");for(let index = 0 ; index < buttonList.length; index ++){   buttonList[index].setAttribute("disabled","true");//不再进行点击buttonList[index].removeAttribute("onclick");//移除点击事件buttonList[index].classList.replace("button_allow","button_forbid");}}}, 1000);}//调用该方法ms();</script>
</body></html>

11、思考,如何实现小时,分钟,秒数的显示?

//参考代码
<!doctype html>
<html><head><meta charset="utf-8"><title>秒杀</title><link rel="stylesheet" href="css/ms.css"></head><body><div class="container"><div class="item ms"><h2 class="title">商品秒杀</h2><h3 class="subtitle">FLASH DEALS</h3><i class="icon"></i><p class="desc">本场距离结束时间</p><div class="clock"><span id="hours" class="hour">00</span><span class="point">:</span><span id="minutes" class="minute">00</span><span class="point">:</span><span id="seconds" class="second">59</span></div></div><div class="item"><a href="#" class="product-link"><img src="https://img20.360buyimg.com/seckillcms/s280x280_jfs/t28882/109/582315249/52026/e4ff99b9/5bf7cb37N98f8ac82.jpg.webp"alt="商品" height="130"><p class="product-desc">3M 节气门清洗剂【不伤镀层|多功能除油泥除积碳|8866升级】汽车金属件润滑节流阀去油污非化清剂PN18066</p><div class="price"><span class="price-new">134.00</span><span class="price-old">208.00</span><button class="button_allow" onclick="alert('恭喜你抢到了3M清洁剂!')">抢购 </button></div></a></div><div class="item"><a href="#" class="product-link"><img src="//img12.360buyimg.com/seckillcms/s280x280_jfs/t1/116581/22/13747/111761/5f2373f5E2f543b8f/8a64bb1f2303930b.jpg.webp"alt="商品" height="130"><p class="product-desc">华为nova7 SE 5G手机【12期免息可选/送碎屏险】 全网通 幻夜黑 8G+128G</p><div class="price"><span class="price-new">1324.00</span><span class="price-old">4208.00</span><button class="button_allow" onclick="alert('恭喜你抢到了华为nova7 SE!')">抢购 </button></div></a></div><div class="item"><a href="#" class="product-link"><img src="//img12.360buyimg.com/seckillcms/s280x280_jfs/t1/144957/21/3917/192269/5f1fcf99E314ac8a7/75a2d6a7cabc3d72.jpg.webp"alt="商品" height="130"><p class="product-desc">雷公馆 毛呢大衣女秋冬新品毛呢外套羊毛呢宽松显瘦呢子大衣中长款单排扣品牌上衣 米白色 M</p><div class="price"><span class="price-new">324.00</span><span class="price-old">908.00</span><button class="button_allow" onclick="alert('恭喜你抢到了毛呢大衣!')">抢购 </button></div></a></div></div><script>//  1、设置秒杀结束时间 转化为 time类型let endTime = new Date("2024-5-11 11:26:20").getTime(); //将时间转化为 毫秒,用于后续计算// 2、声明变量保存剩余的时间let hours, minutes, seconds = 0;//3、设置方法 用于计算是否到时间了function ms() {alert("秒杀开始了!")//4、设置定时器let interval =  window.setInterval(function () {let now = new Date();//获取当前时间//获取设置的时间差 remaining 差距let remaining = endTime - now.getTime();//只要时间差大于0 就可以进行倒计时 if (remaining > 0) {//简易版:转化为还差多少秒hours = parseInt((remaining /1000/3600));  // 计算剩余小时(除以60*60转换为小时,获取剩余的小时)minutes = parseInt((remaining /1000 / 60) % 60);    // 计算剩余分钟(除以60转为分钟,与60取模,获取剩余的分钟)seconds = parseInt(remaining /1000 % 60 ); //计算60秒内还有几秒hours = hours < 10 ? '0' + hours : hours;minutes = minutes < 10 ? '0' + minutes : minutes;seconds = seconds < 10 ? '0' + seconds : seconds;console.log(hours + ","+minutes+","+seconds)document.getElementById("hours").innerText = hours;document.getElementById("minutes").innerText = minutes;document.getElementById("seconds").innerText = seconds;} else {//结束了alert("秒杀结束了!");document.getElementById("hours").innerText = "00";document.getElementById("minutes").innerText = "00";document.getElementById("seconds").innerText = "00";//6、在停止后结束取消定时器window.clearInterval(interval);//让所有按钮修改弹出样式let buttonList = document.getElementsByTagName("button");for(let index = 0 ; index < buttonList.length; index ++){   buttonList[index].setAttribute("disabled","true");//不再进行点击buttonList[index].removeAttribute("onclick");//移除点击事件buttonList[index].classList.replace("button_allow","button_forbid");}}}, 1000);}//调用该方法ms();</script>
</body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835365.shtml

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

相关文章

python中如何把list变成字符串

python中如何把list变成字符串&#xff1f;方法如下&#xff1a; python中list可以直接转字符串&#xff0c;例如&#xff1a; data ["hello", "world"] print(data1:,str(data)) 得到结果&#xff1a; (data1:, "[hello, world]") 这里将整个…

视频号小店究竟有什么秘密,值得商家疯狂入驻,商家必看!

大家好&#xff0c;我是电商花花。 我们都知道视频号和抖音本身都是一个短视频平台&#xff0c;但是随着直播电商的发展&#xff0c;背后的流量推动逐步显露出强大的红利市场和变现机会。 视频号小店流量大和赚钱之外&#xff0c;还非常适合普通人创业。 这也使得越来越多的…

easypoi动态表头导出数据

需求&#xff1a;动态导出某年某月用户和用户评分数据信息&#xff0c;表头(序号、姓名、用户姓名)&#xff0c;数据(所有用户对应的评分以及平均分)&#xff1b; 分析&#xff1a;1、表头除过序号、姓名&#xff0c;用户姓名要动态生成&#xff1b; 2、用户评分信息要和表头中…

【赠书活动第4期】《Rust编程与项目实战》

赠书活动 《Rust编程与项目实战》免费赠书 3 本&#xff0c; 收到赠书之后&#xff0c;写一篇 本书某一节内容 的学习博客文章。 可在本帖评论中表示参加&#xff0c;即可获得赠书&#xff0c;先到先得。学习心得博客链接&#xff0c;后面有空发上来。 赠书截止日期为送出3…

无人播剧直播收益在哪里!快手无人播剧新秘籍:版权无忧,日入四位数攻略

无人播剧顾名思义就是通过短视频平台直播不需要真人出镜受众群体通过网络短视频平台看到的经典影视剧集可以实现24小时不停断的播放利用多种途径变现的一种直播形式 1、操作简单、不露脸、不出镜2、手机、电脑都可以操作3、可以矩阵操作4、0粉丝、0作品、0保证金就可以开播5、…

2010-2030年GHS-POP数据集下载

扫描文末二维码&#xff0c;关注微信公众号&#xff1a;ThsPool 后台回复 g008&#xff0c;领取 2010-2030年100m分辨率GHS-POP 数据集 &#x1f4ca; GHS Population Grid (R2023)&#xff1a;全球人口分布的精准视图与深度应用 &#x1f310; 在全球化和快速城市化的今天&am…

[嵌入式系统-73]:RT-Thread-快速上手:如何选择RT Thread的版本?

目录 如何选择合适的 RT-Thread 版本进行开发&#xff1f; RT-Thread 分支与版本介绍 如何选择 发布版本&#xff08;GitHub releases&#xff09; 开发分支&#xff08;GitHub master 主分支&#xff09; 长期支持分支&#xff08;GitHub lts-v3.1.x 分支&#xff09; …

10.轮转数组

文章目录 题目简介题目解答解法一&#xff1a;使用额外的数组代码&#xff1a;复杂度分析&#xff1a; 解法二&#xff1a;数组反转代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 轮转数组 相关的讲解&#xff01;&#…

STM32:EXTI—外部中断的初始化

文章目录 1、中断1.2 中断系统1.3 中断执行流程 2、STM32中断2.2EXTI&#xff08;外部中断&#xff09;2.3 EXTI 的基本结构2.4 AFIO复用IO口 3、NVIC基本结构3.2 NVIC优先级分组 4、配置EXTI4.2 AFIO 库函数4.3 EXTI 库函数4.4 NVIC 库函数4.5 配置EXTI的步骤4.6 初始化EXTI 1…

Python运维之协程

目录 一、定义协程 二、并发 三、异步请求 协程是一种轻量级的线程&#xff0c;它通过保存和恢复寄存器上下文和栈来实现调度切换&#xff0c;从而保留函数执行的状态。 这种机制使得协程在处理I/O密集型任务时效率较高&#xff0c;因为它们可以在I/O操作期间让出CPU&#…

QT——tableWidget-跳变之舞V1.0-记录学习【1】

QT——tableWidget-跳变之舞V1.0-记录学习【1】 文章目录 QT——tableWidget-跳变之舞V1.0-记录学习【1】前言一、利用QT创建项目文件1.1 完整项目文件如下图所示:1.2 演示&#xff1a; 二、声明文件&#xff1a;2.1 主界面声明文件:mainwindow.h&#xff1b;2.2 控制窗口声明文…

科技查新中医学科研项目查新点如何确立与提炼?案例讲解

一、前言 医学科技查新包括立项查新和成果查新两个部分&#xff0c;其中医学立项查新&#xff0c;它是指在医学科研项目申报开题之前&#xff0c;通过在一定范围内进行该课题的相关文献检索 ( 可以根据项目委托人的具体要求&#xff0c;进行国内检索或者进行国外检索 ) &#x…

区块链(打新)如何被割韭菜

看上去&#xff0c;像我只要去每个都买一遍新发行的代币&#xff0c;一定可以成功的 但是好像没有想象中这么简单&#xff0c;因为这些山寨币&#xff0c;庄家可以自己控盘的&#xff0c;看上去好像有跌宕起伏的买卖&#xff0c;但是一单掀桌子&#xff0c;庄家他自己都不玩了…

Python之数据分析基础

导言&#xff1a; “21世纪的竞争是数据的竞争&#xff0c;谁掌握数据&#xff0c;谁就掌握未来”。如何将大量看似杂乱无章的数据进行聚合&#xff0c;并发现潜在的规律也变得越来越重要。本文将先说明数据分析的步骤&#xff0c;再通过python完成实例数据的处理、分析最终展…

TDM(BPM)-MIMO-FMCW雷达MATLAB仿真

本文通过对车载毫米波雷达信号流程和链路的仿真&#xff0c;建立基本的算法框架&#xff0c;可用于算法性能的验证。并提供基础MATLAB仿真代码&#xff0c;作为分享和参考。 一、信号的产生 车载毫米波雷达广泛使用线性调频连续波雷达&#xff0c;也即发射信号频率随时间线性变…

日本OTC机械手维修需要注意哪些问题呢?

随着工业4.0时代的到来&#xff0c;机器人在制造业中的应用越来越广泛。OTC&#xff08;Over The Counter&#xff09;机器人作为工业机器人的一种&#xff0c;以其高效、精准、稳定的特点受到众多企业的青睐。然而&#xff0c;在实际使用过程中&#xff0c;可能会出现一些OTC机…

如何在路由器上做端口映射

假设现在外网有一台ADSL直接拨号上网的电脑&#xff0c;所获得的是公网IP。然后它想访问局域网内的电脑上面的网站&#xff0c;那么就需要在路由器上做端口映射。在路由器上做端口映射的具体规则是&#xff1a;将所有发向自己端口的数据&#xff0c;都转发到内网的计算机。 访…

github删除自己的仓库

测试Github的时候新建了很多仓库&#xff0c;但是后来想删除&#xff0c;找了半天居然没有找到按钮。 我就推测这个删除的功能肯定藏起来了&#xff0c;后来度娘了一下&#xff0c;发现果然在一个比较隐蔽的位置&#xff0c;不知道以后这个功能会不会改到一个比较明显的位置吧…

c++ 归并排序

归并排序是一种遵循分而治之方法的排序算法。它的工作原理是递归地将输入数组划分为较小的子数组并对这些子数组进行排序&#xff0c;然后将它们合并在一起以获得排序后的数组。 简单来说&#xff0c;归并排序的过程就是将数组分成两半&#xff0c;对每一半进行排序&#xff0c…

原子学习笔记5——点亮 LED

一、应用层操控设备的两种方式 应用层如何操控底层硬件&#xff0c;同样也是通过文件 I/O 的方式来实现&#xff0c;设备文件便是各种硬件设备向应用层提供的一个接口&#xff0c;应用层通过对设备文件的 I/O 操作来操控硬件设备&#xff0c;譬如 LCD 显示屏、串口、按键、摄像…