【发布时间】:2017-11-12 15:32:04
【问题描述】:
我的朋友有一个“日出闹钟”,当该醒来时它会变得更亮,以模拟日出以方便起床。
我以为我可以用我的笔记本电脑做同样的事情,但是我一直在努力让 Javascript 有时间工作。我将不胜感激任何帮助让这件事发挥作用。
我一直在尝试添加分钟值 (wakeupM),无论我想睡多久,这都会延迟 setTimeout 函数并且仅在我要醒来时运行。不过,我希望能够在时间输入框中设置时间,并让“日出”功能仅在到达该时间时运行。
提前感谢您的帮助!
var countTime;
function mySleep() {
var now = new Date();
var nowM = now.getMinutes();
var wakeup = new Date();
var wakeupM = wakeup.getMinutes() + 3;
var timeDif = wakeupM - nowM;
countTime = 6000 * timeDif;
document.getElementById("settime").innerHTML = countTime;
}
function mySunrise() {
var colors = ['orange', 'yellow', 'white'];
var active = 0;
setInterval(function() {
document.querySelector('body').style.background = colors[active];
active++;
if (active == colors.length) active = 0;
}, 3000);;
}
body {
background: green;
/* initial color */
transition: background 5s;
/* .5s how long transition should take */
}
<input type="time" id="myTime" value="22:15:00">
<button onclick="setTimeout(mySunrise, countTime); mySleep();">Wake me up</button>
<h1>waking you up at:</h1>
<p id="settime"></p>
【问题讨论】:
-
您的
countTime变量在初始化之前使用.. -
@ammarx 如何在 mySleep 运行后调用 countTime 变量但仍将其包含在 setTimeout 函数中?
-
你应该在使用之前计算
countTime。也许您应该在 sleep 函数之外通过添加一个事件侦听器来执行此操作,该事件侦听器在每次输入字段更改时计算countTime。此外,您在 sleep 函数中对countTime的计算不是基于用户使用输入字段设置的值。 -
@ammarx 我将 onclick 的顺序反转为 "mySleep(); setTimeout(mySunrise, countTime); 现在延迟部分起作用了 - 我正在努力使用输入框,因为我不知道如何将框中的小时和分钟转换为时间戳,以允许 mySleep 函数计算延迟工作的毫秒差
标签: javascript html css web