JS闹钟需要调整
JS Alarmclock needs adjustment
我正在尝试为我使用 Django 创建的网络应用程序设置闹钟。为此,我遵循了一些教程并根据我的需要和所有调整了代码。有用。
我的问题是,我想使用从 Django 视图中获取的变量手动设置时间和日期(我将小时和分钟变量传递到我的 HTML 文件中)。
这是我的 alarm.html 文件:
{% extends 'mainapp_hf/base.html' %}
{% block content %}
{{ js_hour }}
<div style="width: 100%; display: flex; justify-content: center; ">
<div id="clock"></div>
<script>
const display = document.getElementById('clock');
const audio = new Audio('https://assets.mixkit.co/sfx/preview/mixkit-alarm-digital-clock-beep-989.mp3');
audio.loop = true;
let alarmTime = null;
let alarmTimeout = null;
function updateTime() {
const date = new Date();
const hour = formatTime(date.getHours());
const minutes = formatTime(date.getMinutes());
const seconds = formatTime(date.getSeconds());
display.innerText=`${hour} : ${minutes} : ${seconds}`
}
function formatTime(time) {
if ( time < 10 ) {
return '0' + time;
}
return time;
}
function setAlarmTime(value) {
alarmTime = value;
}
function setAlarm() {
if(alarmTime) {
const current = new Date();
const timeToAlarm = new Date(alarmTime);
if (timeToAlarm > current) {
const timeout = timeToAlarm.getTime() - current.getTime();
alarmTimeout = setTimeout(() => audio.play(), timeout);
setTimeout(clearAlarm, timeout + 5000);
alert( value );
}
}
}
function clearAlarm() {
audio.pause();
if (alarmTimeout) {
clearTimeout(alarmTimeout);
alert("value");
}
}
setAlarmTime
setAlarm
alert( value )
setInterval(updateTime, 1000);
</script>
</div>
{% endblock %}
我是 JS 初学者。我不知道在这一点上如何走得更远,只是为了理解和调整当前代码花了我几个小时。
首先,我可以忽略所有其他变量(如日期、分钟、秒)。谁能指导我获取实时时间,然后将其与我的 django 变量 {{ js_hour }}(数据类型为数字,假设它等于 15)进行比较,如果它们匹配,则发出声音(无论日期或分钟)。
setAlarmTime 中的变量“value”是通过表单提交的用户输入,但由于我不再需要该表单(相反,我想使用我的 django 变量),所以我没有包含它部分代码在这里。
用户通常提交的表单,具有 HTML 类型为“datetime-local”的输入字段。我尝试以这种格式编写 js_hour python 变量,如下面的
views.py
js_hour = "2022-03-29T11:00"
然后调整了以下部分:
alarm.html
function setAlarmTime(value) {
alarmTime = {{ js_hour }};
}
认为这应该可以解决问题。
当我不玩游戏而只是获取用户输入时,alarmTime 的类型是 [object HTMLInputElement],当我将其替换为 {{ js_hour }} 时,数据类型变成了一个对象。
并且没有闹钟响起,代码停止工作。
有什么建议吗?
随便做
setAlarmTime("{{ js_time }}");
setAlarm()
并删除警报 - 您没有名为 value
的变量
const display = document.getElementById('clock');
const audio = new Audio('https://assets.mixkit.co/sfx/preview/mixkit-alarm-digital-clock-beep-989.mp3');
audio.loop = true;
let alarmTime = null;
let alarmTimeout = null;
function updateTime() {
const date = new Date();
const hour = formatTime(date.getHours());
const minutes = formatTime(date.getMinutes());
const seconds = formatTime(date.getSeconds());
display.innerText = `${hour} : ${minutes} : ${seconds}`
}
function formatTime(time) {
if (time < 10) {
return '0' + time;
}
return time;
}
function setAlarmTime(value) {
alarmTime = value;
}
function setAlarm() {
if (alarmTime) {
const current = new Date();
const timeToAlarm = new Date(alarmTime);
console.log(timeToAlarm)
if (timeToAlarm > current) {
const timeout = timeToAlarm.getTime() - current.getTime();
alarmTimeout = setTimeout(() => audio.play(), timeout);
setTimeout(clearAlarm, timeout + 5000);
}
else { console.log("time has passed") }
}
}
function clearAlarm() {
audio.pause();
if (alarmTimeout) {
clearTimeout(alarmTimeout);
console.log("Cleared");
}
}
setAlarmTime("2022-03-29T12:23"); // "{{ js_time }}";
// debug
let d = new Date()
d.setSeconds(d.getSeconds() + 10)
setAlarmTime(d.toString())
// end debug
setAlarm()
setInterval(updateTime, 1000);
<div style="width: 100%; display: flex; justify-content: center; ">
<div id="clock"></div>
</div>
我正在尝试为我使用 Django 创建的网络应用程序设置闹钟。为此,我遵循了一些教程并根据我的需要和所有调整了代码。有用。 我的问题是,我想使用从 Django 视图中获取的变量手动设置时间和日期(我将小时和分钟变量传递到我的 HTML 文件中)。 这是我的 alarm.html 文件:
{% extends 'mainapp_hf/base.html' %}
{% block content %}
{{ js_hour }}
<div style="width: 100%; display: flex; justify-content: center; ">
<div id="clock"></div>
<script>
const display = document.getElementById('clock');
const audio = new Audio('https://assets.mixkit.co/sfx/preview/mixkit-alarm-digital-clock-beep-989.mp3');
audio.loop = true;
let alarmTime = null;
let alarmTimeout = null;
function updateTime() {
const date = new Date();
const hour = formatTime(date.getHours());
const minutes = formatTime(date.getMinutes());
const seconds = formatTime(date.getSeconds());
display.innerText=`${hour} : ${minutes} : ${seconds}`
}
function formatTime(time) {
if ( time < 10 ) {
return '0' + time;
}
return time;
}
function setAlarmTime(value) {
alarmTime = value;
}
function setAlarm() {
if(alarmTime) {
const current = new Date();
const timeToAlarm = new Date(alarmTime);
if (timeToAlarm > current) {
const timeout = timeToAlarm.getTime() - current.getTime();
alarmTimeout = setTimeout(() => audio.play(), timeout);
setTimeout(clearAlarm, timeout + 5000);
alert( value );
}
}
}
function clearAlarm() {
audio.pause();
if (alarmTimeout) {
clearTimeout(alarmTimeout);
alert("value");
}
}
setAlarmTime
setAlarm
alert( value )
setInterval(updateTime, 1000);
</script>
</div>
{% endblock %}
我是 JS 初学者。我不知道在这一点上如何走得更远,只是为了理解和调整当前代码花了我几个小时。 首先,我可以忽略所有其他变量(如日期、分钟、秒)。谁能指导我获取实时时间,然后将其与我的 django 变量 {{ js_hour }}(数据类型为数字,假设它等于 15)进行比较,如果它们匹配,则发出声音(无论日期或分钟)。
setAlarmTime 中的变量“value”是通过表单提交的用户输入,但由于我不再需要该表单(相反,我想使用我的 django 变量),所以我没有包含它部分代码在这里。
用户通常提交的表单,具有 HTML 类型为“datetime-local”的输入字段。我尝试以这种格式编写 js_hour python 变量,如下面的
views.py
js_hour = "2022-03-29T11:00"
然后调整了以下部分:
alarm.html
function setAlarmTime(value) {
alarmTime = {{ js_hour }};
}
认为这应该可以解决问题。 当我不玩游戏而只是获取用户输入时,alarmTime 的类型是 [object HTMLInputElement],当我将其替换为 {{ js_hour }} 时,数据类型变成了一个对象。 并且没有闹钟响起,代码停止工作。
有什么建议吗?
随便做
setAlarmTime("{{ js_time }}");
setAlarm()
并删除警报 - 您没有名为 value
的变量const display = document.getElementById('clock');
const audio = new Audio('https://assets.mixkit.co/sfx/preview/mixkit-alarm-digital-clock-beep-989.mp3');
audio.loop = true;
let alarmTime = null;
let alarmTimeout = null;
function updateTime() {
const date = new Date();
const hour = formatTime(date.getHours());
const minutes = formatTime(date.getMinutes());
const seconds = formatTime(date.getSeconds());
display.innerText = `${hour} : ${minutes} : ${seconds}`
}
function formatTime(time) {
if (time < 10) {
return '0' + time;
}
return time;
}
function setAlarmTime(value) {
alarmTime = value;
}
function setAlarm() {
if (alarmTime) {
const current = new Date();
const timeToAlarm = new Date(alarmTime);
console.log(timeToAlarm)
if (timeToAlarm > current) {
const timeout = timeToAlarm.getTime() - current.getTime();
alarmTimeout = setTimeout(() => audio.play(), timeout);
setTimeout(clearAlarm, timeout + 5000);
}
else { console.log("time has passed") }
}
}
function clearAlarm() {
audio.pause();
if (alarmTimeout) {
clearTimeout(alarmTimeout);
console.log("Cleared");
}
}
setAlarmTime("2022-03-29T12:23"); // "{{ js_time }}";
// debug
let d = new Date()
d.setSeconds(d.getSeconds() + 10)
setAlarmTime(d.toString())
// end debug
setAlarm()
setInterval(updateTime, 1000);
<div style="width: 100%; display: flex; justify-content: center; ">
<div id="clock"></div>
</div>