AJAX核心基础知识之倒计时抢购案例

2023-11-17

 倒计时

分析:两个时间 目标时间 ,当前时间

目标时间-当前时间(计算时间差中包含多少小时,多少分钟,多少秒)

每间隔一秒钟重新获取当前时间(定时器),重算时间

核心问题:

1当前时间不可以获取客户端本地的(本地的时间客户可以肆意修改,获取服务器的时间 响应头Date)

2.获取服务器时间有 时间差问题

缩短时间差 :当ajax码为2的时候响应头信息就返回了 head请求:只要请求头

 在页面不刷新的情况下,每间隔一秒,不是再从服务器获取,而是基于第一次获取的结果之上手动累加1000ms即可(如果不这样服务器会崩溃,用户得到的时间误差也会越来越大)

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="box">
        距离抢购还剩下
        <span class="text">00:00:00</span>
    </div>

</body>
<!-- 两个时间 目标时间
当前时间
目标时间-当前时间(计算时间差中包含多少小时,多少分钟,多少秒)
每间隔一秒钟重新获取当前时间(定时器),重算时间

核心问题:当前时间不可以获取客户端本地的(本地的时间客户可以肆意修改,获取服务器的时间 响应头Date)
        获取服务器时间有 时间差问题
缩短时间差 :当ajax码为2的时候响应头信息就返回了 head请求:只要请求头
            在页面不刷新的情况下,每间隔一秒,不是再从服务器获取,而是基于第一次获取的结果之上手动累加1000ms即可
-->

<script>
    let countdownModule = (function () {
        let textBox = document.querySelector('.text'),
            serverTime = 0,
            //指定时间字符串,转为标准时间格式
            targetTime = + new Date("2022 / 01 / 17 18:00:00"),
            time = null
        // 获取服务器时间
        const queryServerTime = function () {
            return new Promise(resolve => {
                let xhr = new XMLHttpRequest;
                xhr.open('HEAD', '/');
                xhr.onreadystatechange = () => {
                    if (xhr.status == 200 && xhr.readyState == 2) {
                        //获取的为格林尼治时间-->变为北京时间
                        let time = xhr.getResponseHeader('date')
                        resolve(+new Date(time))
                    }
                }
                xhr.send(null)
            })
        }
        // 倒计时计算
        const supplyZero = function (val) {
            val = +val || 0
            return val < 10 ? `0${val}` : val
        }
        const computed = function computed() {
            let diff = targetTime - serverTime,
                hours,
                minutes,
                seconds
            if (diff <= 0) {
                // 到达抢购时间了
                textBox.innerHTML = "00: 00: 00"
                clearTimeout(time)
            }
            //没到时间
            hours = Math.floor(diff / (1000 * 60 * 60))
            diff = diff - hours * 1000 * 60 * 60
            minutes = Math.floor(diff / (1000 * 60))
            diff = diff - minutes * 1000 * 60
            seconds = Math.floor(diff / 1000);
            textBox.innerHTML = `${(supplyZero(hours))}: ${(supplyZero(minutes))}: ${(supplyZero(seconds))}`
        }
        return {
            async init() {
                serverTime = await queryServerTime()
                computed()
                // 设置定时器
                timer = setInterval(() => {
                    serverTime += 1000
                    computed()
                }, 1000)
            }
        }
    })()
    countdownModule.init()
</script>

</html>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AJAX核心基础知识之倒计时抢购案例 的相关文章

随机推荐

  • GoogLeNet网络系列解读

    一 Inception V1 Inception Module是GoogLeNet的核心组成单元 结构如下图 Inception Module基本组成结构有四个成分 11卷积 33卷积 55卷积 33最大池化 最后对四个成分运算结果进行通道
  • 《React后台管理系统实战:七》用户管理:获取/添加/修改/删除用户、菜单权限管理

    一 基础页面 1 请求数据 数据 http localhost 5000 manage user list status 0 data users id 5e7d7953d4a98d1a1c1cf00a username jim passw
  • 好爽啊

    爽你妹 转载于 https www cnblogs com zhangxiangning p 10303124 html
  • Python手册(Machine Learning)--statsmodels(多变量统计)

    MultivariateStatistics 多变量统计 主成分分析 Principal Component Analysis 因子分析 Factor Analysis 典型相关 Canonical Correlation 多元方差分析 M
  • Muduo库源码剖析(十)——总结

    Muduo网络库的核心代码模块 Channel 封装fd的对应事件变化情况 和关注事件 fd events revents callbacks 两种channel listenfd acceptorChannel connfd connec
  • 和平精英体验服显示服务器未影响,《和平精英》体验服申请条件是什么?一定要注意这两点!...

    和平精英 体验服是很多玩家了解游戏新版本内容的一个重要窗口 很多新玩法和新地图都会现在体验服中上线测试以后才会在正式服务器中上线 不过很多玩家对于如何才能进入体验服游戏 还根本一无所知 那这次小编就来和大家好好聊聊这个问题 如果感兴趣的话
  • VS报错E1696 无法打开类似于stdio.h等头文件的解决办法

    VS报错E1696 无法打开类似于stdio h等头文件的解决办法 我的VS版本是2022的 然后我今天把同事在VS2017上的code 一个完整的解决方案 从svn上拿过来 结果发现 一大堆E1696的错误 主要表现就是项目中includ
  • Working mode of block password

    本文授权自 MagicBoy Working mode of block password Network security 1 电子密码本ECB electronic codebook mode 3 密码反馈CFB cipher feed
  • Weex实现富文本展示

    Weex默认不支持富文本展示 需要我们手动实现 已知的方式有两种 第一种方式 使用Weex Ui中的wxc rich text组件 它提供了丰富的功能样式 但是其局限性也是显而易见的 不能直接识别h5样式 第二种方式 第一步 自定义组件 请
  • 幼儿园html网页代码,html幼儿园网站页面div+css

    实例简介 幼儿园网站全站代码 使用div css技术 可参考下载 实例截图 核心代码 schoolyr schoolyr baojian html css alixixi css baojian css css css jiaoxue cs
  • python 注解, 装饰器@ 详解

    目录 1 组合数据类型注解方式 2 自定义类注解 3 参数是函数的注解 4 变量注解 5 装饰器 python注解包含 组合数据类型注解 自定义类注解 变量注解 参数是函数的注解等 python的注解 能够让python 像java C语言
  • qt creator debug无法调试 进入 qt源码

    qt creator无法调试qt源码的问题 如果自己写的代码无法调试请移步这里 qt下载地址 https download qt io archive qt https download qt io new archive qt 正常来讲
  • .net 5 开发 linux 桌面应用_Electron跨平台桌面应用开发工具

    一 简介 Electron是github发布的跨平台桌面应用开发工具 支持Web技术开发桌面应用 其本身是基于C 开发的 GUI核心来自于Chrome 而JavaScript引擎使用v8 简单来说 Electron相当于一个浏览器的外壳 可
  • Jupyter-02-numpy:创建ndarray 数组

    创建ndarray 数组的方法 import numpy as np 创建ndarray 数组需要调用numpy库 用列表创建 创建一维数组 arr1 np array 1 2 3 4 arr1 s a b c np array s 用元组
  • Scala中的元祖Tuple

    Scala中元祖是一组任意数据类型的集合 与列表一样 元组也是不可变的 但与列表不同的是元组可以包含不同类型的元素 数组 元祖 定义 元素中数据类型相同 元素不同数据类型 声明 val arr Array 1 2 3 var tuple 1
  • 华为服务器系统故障,服务器系统故障

    服务器系统故障 内容精选 换一换 需在所有云服务器上安装Data Provider软件 SAP技术支持人员通过该软件收集云服务器所在的平台信息 以便在SAP系统故障 性能下降时进行定位和分析 SAP NetWeaver所在的服务器上 在创建
  • 导致java.lang.UnsatisfiedLinkError错误的一种解决办法

    欢迎转载请注明出处http blog csdn net ning gg article details 53641254 在程序中加入so文件导致java lang UnsatisfiedLinkError错误的一种解决办法 可能这个解决办
  • 学Java需要的英语水平以及关键词汇总

    还是需要英语的 但是是编程英语 和从小到大学的 英语 不是一回事 Java语言的输出语句 System out print 你好 此处的 System表示 系统 out表示 在 外面 print表示 打印 每一个单词之间使用 英文输入法的点
  • streamlit——搭建学生评分网站(告别问卷星)

    streamlit搭建多人评分网站 文章目录 streamlit搭建多人评分网站 一 引言 二 数据准备 三 streamlit代码 四 数据合并代码 一 引言 当需要对班级内多人进行打分时 为了不使用问卷星等平台进行评分 使用pandas
  • AJAX核心基础知识之倒计时抢购案例

    倒计时 分析 两个时间 目标时间 当前时间 目标时间 当前时间 计算时间差中包含多少小时 多少分钟 多少秒 每间隔一秒钟重新获取当前时间 定时器 重算时间 核心问题 1当前时间不可以获取客户端本地的 本地的时间客户可以肆意修改 获取服务器的