Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用HTML复选框和JavaScript在标准时间和军用时间之间切换_Javascript - Fatal编程技术网

使用HTML复选框和JavaScript在标准时间和军用时间之间切换

使用HTML复选框和JavaScript在标准时间和军用时间之间切换,javascript,Javascript,我一直在开发一个小的时钟应用程序,它可以显示加载时的标准时间,并且有一个切换按钮,可以将显示更改为军用时间。然而,我想使用拨动开关能够在标准时间和军用时间之间来回切换。现在我只能点击切换按钮一次,它会切换到军事时间,但不能点击多次 我将包括一个codepin和github链接。任何资源或建议都将非常有用 谢谢 ''' ''' ''' ''”解决方案 为您提供了一个示例解决方案。这并不理想,但很有效。正如您所看到的,您可以使用一个间隔并在调用的函数内部获取特定时间的数据。这样可以避免内存泄漏

我一直在开发一个小的时钟应用程序,它可以显示加载时的标准时间,并且有一个切换按钮,可以将显示更改为军用时间。然而,我想使用拨动开关能够在标准时间和军用时间之间来回切换。现在我只能点击切换按钮一次,它会切换到军事时间,但不能点击多次

我将包括一个codepin和github链接。任何资源或建议都将非常有用

谢谢

'''

'''

'''

''”

解决方案 为您提供了一个示例解决方案。这并不理想,但很有效。正如您所看到的,您可以使用一个间隔并在调用的函数内部获取特定时间的数据。这样可以避免内存泄漏


注 我在CSS开头的
.clock
中添加了样式,以便它在代码段中正确显示


let clock=setInterval(显示时间,500);
函数getBaseTime(){
设hms=新日期();
返回hms.toLocaleTimeString();
}
设setWeekday=新日期();
设weekday=新数组(7);
工作日[0]=“周日”;
工作日[1]=“周一”;
工作日[2]=“星期二”;
工作日[3]=“星期三”;
工作日[4]=“周四”;
工作日[5]=“周五”;
工作日[6]=“周六”;
设n=weekday[setWeekday.getDay()];
document.getElementById(“工作日”).innerHTML=n+“-”
设d=新日期();
让几个月=
[“一月”,
“二月”,
“三月”,
“四月”,
“五月”,
“六月”,
“七月”,
“八月”,
“9月”,
“十月”,
“11月”,
“12月”];
document.getElementById(“month”).innerHTML=months[d.getMonth()];
让getTodaysDate=新日期();
document.getElementById(“日期”).innerHTML=getTodaysDate.getDate()+“,”;
让getFullYear=新日期();
document.getElementById(“年”).innerHTML=getFullYear.getFullYear();
函数getMilitaryTime(){
var militaryHours=新日期();
var newMilitaryHours=militaryHours.getHours();
var militaryMinutes=新日期();
var newMilitaryMinutes=militaryMinutes.getMinutes();
var militarySeconds=新日期();
var newMilitarySeconds=militarySeconds.getSeconds();
返回newMilitaryHours+”:“+newMilitaryMinutes+”:“+newMilitarySeconds;
}
函数displayTime(){
if(document.querySelector(“#军事切换器输入:选中”)){
document.getElementById(“时间”).innerHTML=getMilitaryTime()
}
否则{
document.getElementById(“time”).innerHTML=getBaseTime()
}
}
/*********************
仅为代码段添加
*********************/
.钟{
高度:未设置!重要
}
/*********************
时间/日期样式
*********************/
.mdy h1{
显示:内联块;
字体大小:粗体;
}
mdy先生{
}
.钟{
文本对齐:居中;
位置:绝对位置;
保证金:自动;
排名:0;
右:0;
底部:0;
左:0;
宽度:450px;
高度:300px;
}
/*********************
切换器样式
*********************/
/*开关-滑块周围的框*/
.开关{
位置:相对位置;
显示:内联块;
宽度:60px;
高度:34px;
}
/*隐藏默认HTML复选框*/
.开关输入{
不透明度:0;
宽度:0;
身高:0;
}
/*滑块*/
.滑块{
位置:绝对位置;
光标:指针;
排名:0;
左:0;
右:0;
底部:0;
背景色:#ccc;
-webkit转换:.4s;
过渡:.4s;
}
.滑块:之前{
位置:绝对位置;
内容:“;
高度:26px;
宽度:26px;
左:4px;
底部:4px;
背景色:白色;
-webkit转换:.4s;
过渡:.4s;
}
输入:选中+滑块{
背景色:#2196F3;
}
输入:焦点+.滑块{
盒影:0 0 1px#2196F3;
}
输入:选中+。滑块:之前{
-webkit转换:translateX(26px);
-ms变换:translateX(26px);
转化:translateX(26px);
}
/*圆形滑块*/
.圆滑{
边界半径:34px;
}
.滑块.圆形:之前{
边界半径:50%;
}

数字钟
切换时间

发生这种情况是因为您遇到了一个无限循环。在该函数内部创建的时间间隔内调用函数
militarytime()
。意味着每次调用函数时,都会创建一个新的间隔并再次调用它自己。您只能单击该按钮一次,因为所有内存都用于处理该操作。此外,如果你只更新时钟每1秒,我想你可以很容易地通过500作为一个时间参数的间隔。它仍然有大约2次机会更新时间,但将大大提高性能。谢谢!这是奇怪的,但这一行;document.querySelector(“#军事开关输入:选中”)是真正解决问题的方法。这就是我所缺少的。再次感谢您抽出时间!
<html lang="en">
<head>
    <meta charset="utf-8">

    <title>Digital Clock</title>
    <meta name="Sam Kautz" content="Digital Clock">

    <link rel="stylesheet" href="styles.css">

</head>

<body>

    <div class="clock">
        <div>
            <h1 id="time"></h1>
            <h3>Toggle Time</h3>
            <label class="switch" id="millitary-toggler">
                <input type="checkbox" >
                <span class="slider round"></span>
            </label>
        </div>

        <div class="mdy">
            <h1 id="weekday"></h1>
            <h1 id="month"></h1>
            <h1 id="date"></h1>
            <h1 id="year"></h1>
        </div>
    </div>

    <script src="scripts.js"></script>
</body>
</html>
/*********************
    Time/Date Styling
*********************/

.mdy h1 {
    display: inline-block;
    font-weight: bold;
}

.mdy {

}

.clock {
    text-align: center;
    position: absolute;
    margin: auto;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    width: 450px;
    height: 300px;
}

/*********************
    Toggler Styling
*********************/

/* The switch - the box around the slider */
.switch {
    position: relative;
    display: inline-block;
    width: 60px;
    height: 34px;
}

    /* Hide default HTML checkbox */
    .switch input {
        opacity: 0;
        width: 0;
        height: 0;
    }

/* The slider */
.slider {
    position: absolute;
    cursor: pointer;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: #ccc;
    -webkit-transition: .4s;
    transition: .4s;
}

    .slider:before {
        position: absolute;
        content: "";
        height: 26px;
        width: 26px;
        left: 4px;
        bottom: 4px;
        background-color: white;
        -webkit-transition: .4s;
        transition: .4s;
    }

input:checked + .slider {
    background-color: #2196F3;
}

input:focus + .slider {
    box-shadow: 0 0 1px #2196F3;
}

input:checked + .slider:before {
    -webkit-transform: translateX(26px);
    -ms-transform: translateX(26px);
    transform: translateX(26px);
}

/* Rounded sliders */
.slider.round {
    border-radius: 34px;
}

    .slider.round:before {
        border-radius: 50%;
    }
let time = setInterval(timer, 0);

function timer() {
    let hms = new Date();
    document.getElementById("time").innerHTML = hms.toLocaleTimeString();
}

let setWeekday = new Date();
let weekday = new Array(7);
weekday[0] = "Sunday";
weekday[1] = "Monday";
weekday[2] = "Tuesday";
weekday[3] = "Wednesday";
weekday[4] = "Thursday";
weekday[5] = "Friday";
weekday[6] = "Saturday";

let n = weekday[setWeekday.getDay()];
document.getElementById("weekday").innerHTML = n + " - "

let d = new Date();
let months =
    ["January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December"];
document.getElementById("month").innerHTML = months[d.getMonth()];

let getTodaysDate = new Date();
document.getElementById("date").innerHTML = getTodaysDate.getDate() + ",";

    let getFullYear = new Date();
    document.getElementById("year").innerHTML = getFullYear.getFullYear();


document.getElementById("millitary-toggler").addEventListener("click", millitaryTime);

function millitaryTime() {
    clearTimeout(time);

    var millitaryHours = new Date();
    var newMillitaryHours = millitaryHours.getHours();

    var millitaryMinutes = new Date();
    var newMillitaryMinutes = millitaryMinutes.getMinutes();

    var millitarySeconds = new Date();
    var newMillitarySeconds = millitarySeconds.getSeconds();

    let millitaryTimer = setInterval(millitaryTime, 0);
    document.getElementById("time").innerHTML = newMillitaryHours + ":" + newMillitaryMinutes + ":" + newMillitarySeconds;
}


function millitaryTime() {

    if (getElementById(millitary-toggler))
    clearTimeout(time);

    var millitaryHours = new Date();
    var newMillitaryHours = millitaryHours.getHours();

    var millitaryMinutes = new Date();
    var newMillitaryMinutes = millitaryMinutes.getMinutes();

    var millitarySeconds = new Date();
    var newMillitarySeconds = millitarySeconds.getSeconds();

    let millitaryTimer = setInterval(millitaryTime, 0);
    document.getElementById("time").innerHTML = newMillitaryHours + ":" + newMillitaryMinutes + ":" + newMillitarySeconds;
}