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.rhkb.cn/news/323990.html

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

相关文章

2024.5.10

TCP服务器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置窗口大小和窗口大小固定this->resize(727,879);this->setFixedSize(727,879);//创建…

MySQL——变量的浮点数问题处理

新建链接&#xff0c;自带world数据库&#xff0c;里面自带city表格。 DQL #MySQL变量的浮点数问题处理 set dx3.14,dy3.25; select dxdy;#计算显示异常&#xff0c;会有很多00000的提示set resultdxdy; select result; 查询结果

Kafka分级存储概念(一)

Kafka分级存储及实现原理 概述 Kafka社区在3.6版本引入了一个十分重要的特性: 分级存储,本系列文章主要旨在介绍Kafka分级存储的设计理念、设计细节以及具体的代码实现 背景:为什么要有分级存储? 场景 作为一款具有高吞吐及高性能的消息中间件,Kafka被广泛应用在大数据、…

如何使用jmeter进行接口测试?jmeter接口测试流程是怎样的

前言 我们学习自动化测试都会用到不同的工具&#xff0c;那么今天笔者呢&#xff0c;想给大家聊聊Jmeter接口测试流程详解&#xff0c;废话不多说直接进入正题。 一、jmeter简介 Jmeter是由Apache公司开发的java开源项目&#xff0c;所以想要使用它必须基于java环境才可以&am…

让GPT们成为我们的小助手:使用ChatGPT来生成测试用数据

让GPT们成为我们的小助手 任务&#xff1a;帮忙生成测试数据 今天本来想做一个测试&#xff0c;所以需要一些测试数据。为了让测试显得更真实&#xff0c;所以希望测试数据看上去就是一份真实的数据&#xff0c;所以我就希望ChatGPT&#xff08;这里是代指&#xff0c;我有使…

太阳能无人机的多元化应用

随着新能源技术的不断发展和成熟&#xff0c;太阳能在无人机的应用技术已经成熟。太阳能无人机得到了量产和广泛的应用。传统无人机相比&#xff0c;太阳能无人机无需燃油&#xff0c;运行费用低廉&#xff0c;搭载多种高科技设备&#xff0c;能够高效、多元化地采集和分析各类…

UG NX二次开发(C#)-获取Part中对象创建时的序号(*)

文章目录 1、前言2、UG NX的对象序号讲解3、采用UG NX二次开发或者建模序号4、注意事项1、前言 在UG NX中,我们创建任意一个对象,都会在模型历史中添加一个创建对象的编号,即是对象序号,这个是递增的,当删除中间产生的对象时,其序号会重新按照建模顺序重新排布。今天一个…

宝塔面板如何删除一个站点

我们一般的网站都是PHPMySQL开发的&#xff0c;所以删除站点&#xff0c;就要先删数据库&#xff0c;再删网站目录 注意&#xff1a;一点要确保无用的再删 删除站点目录

布局全球内容生态,酷开科技Coolita AIOS以硬核品质亮相

当前&#xff0c;全球产业链供应链格局持续重构&#xff0c;成为影响中国对外经济发展的重要因素。2024年4月15至5月5日&#xff0c;历史久、规模大、层次高&#xff0c;作为中国外贸风向标的第135届中国进出口商品交易会&#xff08;即广交会&#xff09;在美丽的广州隆重举行…

CTFHUB-技能树-Web题-RCE(远程代码执行)-文件包含

CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09; 文件包含 文章目录 CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09;文件包含解题方法1:![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/71f7355b3c124dfe8cdf1c95e6991553.png#pic_ce…

Linux 麒麟系统安装

国产麒麟系统官网地址&#xff1a; https://www.openkylin.top/downloads/ 下载该镜像后&#xff0c;使用VMware部署一个虚拟机&#xff1a; 完成虚拟机创建。点击&#xff1a;“开启此虚拟机” 选择“试用试用开放麒麟而不安装&#xff08;T&#xff09;”&#xff0c;进入op…

uniapp生成二维码(uQRCode)与自定义绘制样式与内容

二维码生成使用了一款基于Javascript环境开发的插件 uQRCode &#xff0c;它不仅适用于uniapp&#xff0c;也适用于所有Javascript运行环境的前端应用和Node.js。 uQRCode 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id1287 目录 1、npm安装 2、通过import引…

从零开始的软件测试学习之旅(六)测试网络基础知识

测试网络基础知识 HTTP和HTMLURLDNS客户端和服务器请求方法和状态码面试高频Fiddler抓包工具教学弱网 HTTP和HTML 概念 html: HyperText Markup Language 超文本标记语言 http: HyperText Transfer Protocol 超文本传输协议 超文本: 图片, 音频, 视频 关系:http 可以对 html 的…

C++对象的拷贝构造函数

如果一个构造函数的第一个参数是类本身的引用,且没有其它参数(或者其它的参数都有默认值),则该构造函数为拷贝构造函数。 拷贝(复制)构造函数:利用同类对象构造一个新的对象 ●1.函数名和类同名 (构造函数) ●2.没有返回值 (构造函数) ●3.第一个参数必…

Linux基础之git与调试工具gdb

目录 一、git的简单介绍和使用方法 1.1 git的介绍 1.2 git的使用方法 1.2.1 三板斧之git add 1.2.2 三板斧之git commit 1.2.3 三板斧之git push 二、gdb的介绍和一些基本使用方法 2.1 背景介绍 2.2 基本的使用方法 一、git的简单介绍和使用方法 1.1 git的介绍 Git是一…

Kubernetes——基础认识

一、简介 1.Kubernetes是什么 Kubernetes 是一个全新的基于容器技术的分布式架构解决方案&#xff0c;是 Google 开源的一个容器集群管理系统&#xff0c;Kubernetes 简称 K8S。 Kubernetes 是一个一站式的完备的分布式系统开发和支撑平台&#xff0c;更是一个开放平台&#x…

249 基于matlab的MED、OMEDA、MOMEDA、MCKD信号处理方法

基于matlab的MED、OMEDA、MOMEDA、MCKD信号处理方法。最小熵反褶积(MED)&#xff0c;最优最小熵反卷积调整卷积 (OMEDA),多点最优最小熵解卷积调整&#xff08;Multipoint Optimal Minimum Entropy Deconvolution Adjusted&#xff0c;MOMEDA&#xff09;&#xff0c;最大相关峭…

el-select选项框内容过长

利用popper-class实现选项框内容过长&#xff0c;截取显示功能&#xff1a; <el-select popper-class"popper-class" :popper-append-to-body"false" v-model"value" placeholder"请选择"><el-optionv-for"item in opt…

Cocos creator实现《战机长空》关卡本地存储功能

Cocos creator实现《战机长空》关卡本地存储功能 Cocos creator在开放小游戏过程中&#xff0c;经常会出现设置关卡&#xff0c;这里记录一下关卡数据本地存储功能。 一、关卡设置数据 假如我们有关卡数据如下&#xff0c; let settings [ { level: 1, // 第1关 score: 0,…

14_Scala面向对象编程_属性

文章目录 属性1.类中属性声明2.系统默认赋值3.BeanProperty4.整体代码如下 属性 1.类中属性声明 // 1.给Scala声明属性&#xff1b;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值&#xff0c;为了解决此问题可以采…