当前位置:首页 > 前端开发 > 正文内容

【D01】Django中完成带进度条的倒计时功用(简易版)

邻居的猫1个月前 (12-09)前端开发1893

首要阐明简易版是只要一个 倒计时 和一个 进度条,页面加载后主动开端计时,下次计时需求手动改写页面。

后续会更新完成完好的倒计时功用的文章

前期预备

  1. 前端结构

    你需求预备一些前端结构:Bootstrap4jQuery
    装置办法请自行查阅官方文档或教程

    • Bootstrap4:https://v4.bootcss.com/docs/getting-started/download/

    • jQuery:https://www.runoob.com/jquery/jquery-install.html

  2. 确保你的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 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官网精选模板中的一些模板有环形进度条,能够导入模板后直接运用。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=428

分享给朋友:

“【D01】Django中完成带进度条的倒计时功用(简易版)” 的相关文章

极致功能优化:前端SSR烘托利器Qwik.js

极致功能优化:前端SSR烘托利器Qwik.js

导言 前端功能已成为网站和运用成功的要害要素之一。用户希望快速加载的页面和流通的交互,而前端结构的挑选关于完结这些方针至关重要。但是,传统的前端结构在某些情况下或许面对功能应战且存在技能壁垒。 在这个充溢应战的布景下,咱们引入了 Qwik.js 结构。Qwik.js 不只是一个前端结构,更是一种前端...

JS校验银行卡号以及经过银行卡号主动带出所属银行信息

JS校验银行卡号以及经过银行卡号主动带出所属银行信息

本文实例叙述了JS完成的获取银行卡号归属地及银行卡类型操作以及Luhn校验算法校验银行卡号算法。共享给我们供我们参阅,详细如下: javascript代码如下 /** * Luhn校验算法校验银行卡号;Luhm校验规矩:16位银行卡号(19位通用):1、将未带校验位的 15(或18)位卡号从右顺次...

css手册中文版下载,CSS手册中文版下载——前端开发者的必备指南

你可以通过以下链接下载CSS手册的中文版:1. CSS中文手册下载、使用技巧(附下载链接,压缩包被禁用了) 链接: 文章提供了CSS中文手册的下载链接和使用方法,以及一些常用的CSS属性和技巧。2. CSS 4.2.7 Chinese manual free download...

css鼠标变小手, 什么是鼠标变小手样式?

css鼠标变小手, 什么是鼠标变小手样式?

要将CSS中的鼠标指针变为小手形状,你可以使用`cursor`属性并设置其值为`pointer`。这样,当用户将鼠标悬停在具有该样式的元素上时,鼠标指针就会变成一个小手形状,表示该元素是可点击的。下面是一个简单的示例:```cssa { cursor: pointer;}```这段代码会将所有``...

vue背景图片,背景图片的基本设置

在 Vue 中设置背景图片有几种常见的方法,下面我将逐一介绍:```vue .backgroundimage { backgroundimage: url; backgroundsize: cover; backgroundposition: center; backgroun...

html如何打开,HTML壅壃控壄嬙墼有墿壂

html如何打开,HTML壅壃控壄嬙墼有墿壂

HTML(超文本标记语言)本身并不是一个程序或应用,而是一种用于创建网页的标准标记语言。因此,您不能“打开”HTML,而是需要将其嵌入到网页中,然后通过浏览器来查看和交互。要查看一个HTML文件,您需要执行以下步骤:1. 创建HTML文件:使用文本编辑器(如Notepad 、Sublime Tex...