我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Django实现带进度条的倒计时功能详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Django实现带进度条的倒计时功能详解

前期准备

前端框架

你需要准备一些前端框架:Bootstrap4 和 jQuery安装方法请自行查阅官方文档或教程

  • Bootstrap4:https://v4.bootcss.com/docs/getting-started/download/
  • jQuery:https://www.runoob.com/jquery/jquery-install.html

保证你的Django项目已经配置完毕,包括路由

倒计时部分

先上效果图

(emm...不好意思有点丑...至于这个进度条为什么会跳,是因为我当时忘记把另一个方法注释掉,导致两个计时方法同时进行,后面的代码不会出现这个错误)

以下代码由ChatGPT生成

ChatGPT第一次给的代码是在视图函数里处理时间,每秒返回一次请求给浏览器变更数字。这导致了浏览器反应不过来,无法每秒都接受请求并响应,因此实现倒计时动态更新需要在JavaScript实现

views.py:

import time
from django.shortcuts import render

def countdown(request):
    start_time = int(time.time())
    end_time = start_time + 1500  # 25 minutes in seconds
    while int(time.time()) < end_time:
        time_left = end_time - int(time.time())
        minutes = time_left // 60
        seconds = time_left % 60
        context = {'minutes': minutes, 'seconds': seconds}
        time.sleep(1)
    context = {'minutes': 0, 'seconds': 0}
    return render(request, 'countdown.html', context)

纠正后给的代码:

完整代码

views.py:

from django.shortcuts import render
import datetime

def countdown(request):
    now = datetime.datetime.now()
    # 设置倒计时结束时间(25分钟)
    end_time = now + datetime.timedelta(minutes=25)
    context = {'end_time': end_time}
    return render(request, 'countdown.html', context)

countdown.html:

JavaScript使用jQuery

<!DOCTYPE html>
<html>
  <head>
    <title>Pomodoro Timer</title>
    <meta charset="utf-8">
    <script type="text/javascript">
      function updateTimer() {
  		var now = new Date();
      	var endTime = new Date('{{ end_time|date:"c" }}');
      	var diff = endTime - now;
      	var minutes = Math.floor(diff / 60000);
      	var seconds = Math.floor((diff % 60000) / 1000);

      	$('#minutes').text(('0' + minutes).slice(-2));
      	$('#seconds').text(('0' + seconds).slice(-2));

      	if (diff > 0) {
        	setTimeout(updateTimer, 1000);
  		}
      }

	$(document).ready(function() {
  		updateTimer();
	});

    </script>
  </head>
  <body>
    <h1>Pomodoro Timer</h1>
    <p>Time remaining: <span id="minutes">25</span>:<span id="seconds">00</span></p>
  </body>
</html>

配置好就可以看到数字时钟在计时了。

嵌入式倒计时器

另外,ChatGPT提供了嵌入式倒计时器组件方法

在任何模板中都可以使用以下代码来加载你写的倒计时器:

HTML:

{% url 'countdown' as countdown_url %}
<iframe class="lazy" data-src="{{ countdown_url }}" width="400" height="200"></iframe>

这将在模板中嵌入一个iframe元素,并使用countdown视图函数的URL作为其源。当用户加载页面时,iframe将显示倒计时器,并开始倒计时。

进度条部分

HTML:

ChatGPT在html中重写了CSS以及添加了JS部分代码,效果十分抽象这很难评

原本想实现一个环形进度条的倒计时组件,因为涉及复杂的CSS样式编写,所以在找到合适的插件之前先用Bootstrap初始的进度条样式

ChatGPT给的代码只有这部分有用,表示进度条的即时更新

html:

<div class="progress">
	<div class="progress-bar" role="progressbar"></div>
</div>

JavaScript:

var progress = 100 - ((timeRemaining / 60) * 100) / 60;
$(".progress-bar").css("width", progress + "%");

稍作修改,将进度条JS代码整合到计时方法里:

JavaScript:

  function updateTimer() {
    // 获取当前时间和倒计时结束时间
    var now = new Date();
    var startTime = new Date('{{ start_time|date:"c" }}');
    var endTime = new Date('{{ end_time|date:"c" }}');
    // 计算时间差
    var interval = endTime - startTime;
    var diff = endTime - now;

    // 将时间差转换为分钟和秒数
    // 一分钟等于60000毫秒,Math.floor函数向下取整
    var minutes = Math.floor(diff / 60000);
    var seconds = Math.floor((diff % 60000) / 1000);
    // 更新页面中的时间显示
    $('#minutes').text(('0' + minutes).slice(-2));
    $('#seconds').text(('0' + seconds).slice(-2));

    var progress = diff/interval*100;
    $(".progress-bar").css("width", progress + "%");

    // 在倒计时结束之前,每100毫秒更新一次时间
    if (diff > 0) {
      setTimeout(updateTimer, 100);
    }
  }

  $(function () {
    // 开始写 jQuery 代码...
    // 页面加载完成后开始倒计时
    updateTimer();
  });

views.py里也要修改countdown函数

views.py:

def countdown(request):
	# 设置倒计时结束时间(25分钟)
	start_time = datetime.datetime.now()
	end_time = start_time + datetime.timedelta(minutes=0.2)
	context = {
		'start_time': start_time,
		'end_time': end_time
	}
	return render(request, 'countdown.html', context)

环形进度条插件

circle-progress-bar.js 是一款利用canvas绘制圆环进度条的插件,不依赖任何库。

效果:放大失真、丑

Bootstrap官网精选模板中的一些模板有环形进度条,可以导入模板后直接使用。

到此这篇关于Django实现带进度条的倒计时功能详解的文章就介绍到这了,更多相关Django带进度条的倒计时内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Django实现带进度条的倒计时功能详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Django实现带进度条的倒计时功能详解

这篇文章主要为大家详细介绍了如何利用Django实现简单的带进度条的倒计时功能,可以在页面加载后自动开始计时,下次计时需要手动刷新页面,需要的可以参考一下
2023-05-15

Django怎么实现带进度条的倒计时功能

这篇文章主要介绍“Django怎么实现带进度条的倒计时功能”,在日常操作中,相信很多人在Django怎么实现带进度条的倒计时功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Django怎么实现带进度条的倒计
2023-07-06

如何使用Android实现文件解压带进度条功能

这篇文章给大家分享的是有关如何使用Android实现文件解压带进度条功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。解压的工具类package com.example.videodemo.zip; public
2023-05-30

Android开屏页倒计时功能实现的详细教程

最近我司产品提出了一个很常见的需求:App 在开屏页(Splash 界面) 需要加上一个 3s 倒计时按钮,可以选择看 3s 的广告,或者点击按钮跳过广告。一、布局实现(使用 FrameLayout 悬浮在广告的右上角,显示倒计时的 Tex
2023-05-31

怎么用vue实现页面加载时的进度条功能

这篇“怎么用vue实现页面加载时的进度条功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用vue实现页面加载时的进度条
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录