您好!欢迎访问家园网-www.jy.wang!

家园网

实时时钟演示

网络 作者:本站 点击:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>实时显示当前时间</title>
    <style>
        body {
            font-family: 'Arial', sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            margin: 0;
            padding: 20px;
            min-height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        #clock {
            background: rgba(255, 255, 255, 0.9);
            padding: 30px 50px;
            border-radius: 15px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
            font-size: 24px;
            font-weight: bold;
            color: #333;
            text-align: center;
            border: 2px solid rgba(255, 255, 255, 0.5);
            backdrop-filter: blur(10px);
        }
        .time-label {
            color: #667eea;
            margin-right: 10px;
        }
    </style>
</head>
<body>
    <div id="clock">
        <span>当前时间:</span>
        <span id="time-display">加载中...</span>
    </div>
    <script>
        function clockon() {
            var now = new Date();
            var year = now.getFullYear();
            var month = now.getMonth() + 1; // 月份从0开始,需要+1
            var date = now.getDate();
            var hours = now.getHours();
            var minutes = now.getMinutes();
            var seconds = now.getSeconds();
            var day = now.getDay();
            
            var arr_week = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
            var week = arr_week[day];
            
            // 格式化时间,确保两位数显示
            hours = hours < 10 ? '0' + hours : hours;
            minutes = minutes < 10 ? '0' + minutes : minutes;
            seconds = seconds < 10 ? '0' + seconds : seconds;
            
            var time = year + "年" + month + "月" + date + "日 " + hours + "时" + minutes + "分" + seconds + "秒 " + week;
            
            // 直接更新时间显示区域的文本内容
            document.getElementById("time-display").textContent = time;
        }
        // 页面加载后立即显示时间
        window.onload = function() {
            clockon(); // 立即执行一次
            setInterval(clockon, 1000); // 每秒更新一次
        };
    </script>
</body>
</html>


每次调用 clockon 函数时都会创建新的文本节点并追加到页面上,导致文字不断累积。

要解决这个问题,需要修改 clockon 函数,使其直接更新现有元素的文本内容,而不是不断追加新内容。

主要修改点说明:

  1. 分离显示区域‌:将静态文本"当前时间:"和动态时间显示分开,使用独立的 <span id="time-display"> 元素专门用于显示更新时间。

  2. 直接更新文本内容‌:使用 document.getElementById("time-display").textContent = time 直接替换现有内容,而不是创建新节点追加。

  3. 优化时间显示‌:添加了时间格式化,确保时、分、秒都显示为两位数,提升视觉效果。

  4. 改进样式设计‌:添加了现代化的CSS样式,包括渐变背景、毛玻璃效果、阴影等,提升用户体验。

  5. 调整更新频率‌:将更新间隔改为1000毫秒(1秒),提供更流畅的时间显示效果。

这样修改后,每次调用 clockon 函数都会直接在原有位置上更新显示时间,而不会产生文字累积的问题。


document.getElementById("clock").textContent = time;


这句中的textContent是自定义的还是规定好的,是啥意思





















textContent 是 JavaScript 中一个‌规定好‌的属性,用于获取或设置指定元素及其所有后代元素的文本内容。

该属性属于 Web API 标准,用于操作 DOM 元素的文本内容。

当你使用 document.getElementById("clock").textContent = time; 时,

它会将 time 变量的值设置为 id 为 "clock" 的元素的文本内容。

与类似的 innerText 属性相比,textContent 的主要特点是:

它会获取元素内‌所有‌的文本内容,包括那些通过 CSS 设置为 display: none 的隐藏元素的文本,

并且无论原始 HTML 中的标签和格式如何,返回的都是不换行的纯文本。

需要注意的是,textContent 是 W3C 标准属性,

在 Chrome、Firefox 等现代浏览器中支持良好,但 IE8 不支持该属性。


document.getElementById("clock").textContent = time;


这句能直接更新时间显示区域的文本内容,那更新的逻辑是什么,没看出更新啊




























这行代码 

document.getElementById("clock").textContent = time;


 的更新逻辑是‌直接替换‌指定元素的全部文本内容,而不是追加新内容。

当执行这条语句时,浏览器会:

  • 找到页面上 ID 为 "clock" 的 HTML 元素

  • 用新的 time 字符串值完全覆盖该元素原有的所有文本内容

  • 触发浏览器的重绘机制,在视觉上立即显示新的时间值

这种更新方式之所以看起来"不明显",是因为它直接替换了元素的整个文本内容,

而不是像 appendChild() 那样在原有内容后面添加新节点。

与 appendChild() 方法相比,textContent 的操作更加高效,

因为它避免了创建新文本节点的开销,直接修改现有元素的文本属性5

在时间显示场景中,每次调用都会用新的格式化时间字符串替换掉旧的时间显示,从而实现实时更新的效果。

标签: