JavaScript >> Javascript 文檔 >  >> Tags >> CSS

如何使用 jQuery 和 CSS3 製作數字時鐘

這一切都始於上週,當時我看到了這個漂亮的運球投籃。我立刻有一種想把它變成一個工作時鐘並與 Tutorialzine 的讀者分享的衝動。如果您想了解我的製作方法,請繼續閱讀!

標記

時鐘不需要大量的 HTML。這是因為它的很大一部分,如工作日的名稱和數字的代碼,是動態生成的。以下是您需要在頁面上使用時鐘的標記:

index.html

<div id="clock" class="light">
    <div class="display">
        <div class="weekdays"></div>
        <div class="ampm"></div>
        <div class="alarm"></div>
        <div class="digits"></div>
    </div>
</div>

主要元素#clock div 包含.display,它又包含工作日列表、AM/PM 標籤、鬧鐘圖標和時間。這是為其中一位數字生成的標記:

<div class="zero">
    <span class="d1"></span>
    <span class="d2"></span>
    <span class="d3"></span>
    <span class="d4"></span>
    <span class="d5"></span>
    <span class="d6"></span>
    <span class="d7"></span>
</div>

.digits 元素將包含 6 個帶跨度的 div,每個數字對應一個時間。從上面的片段可以看出,這些 div 從 zero 獲取類名 到 (稍後會詳細介紹),並包含七個具有唯一類的 span 元素。這些跨度是數字的片段,就像舊的數字時鐘一樣:

它們完全使用 CSS 進行樣式設置,並設置為 opacity:0 默認。分配給其父 div 的類使它們可見。這是零的CSS:

assets/css/styles.css

/* 0 */

#clock .digits div.zero .d1,
#clock .digits div.zero .d3,
#clock .digits div.zero .d4,
#clock .digits div.zero .d5,
#clock .digits div.zero .d6,
#clock .digits div.zero .d7{
    opacity:1;
}

所有段都是可見的,除了中間的段(否則它將是 8)。我為所有這些跨度添加了一個 CSS3 過渡屬性,它可以在數字之間切換時為不透明度設置動畫。

樣式表中還有很多其他的 CSS,但我不會在這裡展示。我認為了解 CSS 工作原理的最佳方法是在 Firebug、Chrome 的 Inspector 或您選擇的瀏覽器的開發人員工具中檢查演示的實時工作代碼。

jQuery 代碼

為了使時鍾正常工作,我們將不得不使用 jQuery 為每個數字生成標記,並設置一個計時器以每秒更新類。為了讓我們的生活更輕鬆,我們將使用 moment.js 庫(快速提示)來彌補 JavaScript 原生日期和時間函數的不足。

assets/js/script.js

$(function(){

    // Cache some selectors

    var clock = $('#clock'),
        alarm = clock.find('.alarm'),
        ampm = clock.find('.ampm');

    // Map digits to their names (this will be an array)
    var digit_to_name = 'zero one two three four five six seven eight nine'.split(' ');

    // This object will hold the digit elements
    var digits = {};

    // Positions for the hours, minutes, and seconds
    var positions = [
        'h1', 'h2', ':', 'm1', 'm2', ':', 's1', 's2'
    ];

    // Generate the digits with the needed markup,
    // and add them to the clock

    var digit_holder = clock.find('.digits');

    $.each(positions, function(){

        if(this == ':'){
            digit_holder.append('<div class="dots">');
        }
        else{

            var pos = $('<div>');

            for(var i=1; i<8; i++){
                pos.append('<span class="d' + i + '">');
            }

            // Set the digits as key:value pairs in the digits object
            digits[this] = pos;

            // Add the digit elements to the page
            digit_holder.append(pos);
        }

    });

    // Add the weekday names

    var weekday_names = 'MON TUE WED THU FRI SAT SUN'.split(' '),
        weekday_holder = clock.find('.weekdays');

    $.each(weekday_names, function(){
        weekday_holder.append('<span>' + this + '</span>');
    });

    var weekdays = clock.find('.weekdays span');

    // Run a timer every second and update the clock

    (function update_time(){

        // Use moment.js to output the current time as a string
        // hh is for the hours in 12-hour format,
        // mm - minutes, ss-seconds (all with leading zeroes),
        // d is for day of week and A is for AM/PM

        var now = moment().format("hhmmssdA");

        digits.h1.attr('class', digit_to_name[now[0]]);
        digits.h2.attr('class', digit_to_name[now[1]]);
        digits.m1.attr('class', digit_to_name[now[2]]);
        digits.m2.attr('class', digit_to_name[now[3]]);
        digits.s1.attr('class', digit_to_name[now[4]]);
        digits.s2.attr('class', digit_to_name[now[5]]);

        // The library returns Sunday as the first day of the week.
        // Stupid, I know. Lets shift all the days one position down, 
        // and make Sunday last

        var dow = now[6];
        dow--;

        // Sunday!
        if(dow < 0){
            // Make it last
            dow = 6;
        }

        // Mark the active day of the week
        weekdays.removeClass('active').eq(dow).addClass('active');

        // Set the am/pm text:
        ampm.text(now[7]+now[8]);

        // Schedule this function to be run again in 1 sec
        setTimeout(update_time, 1000);

    })();

    // Switch the theme

    $('a.button').click(function(){
        clock.toggleClass('light dark');
    });

});

這裡最重要的一段代碼是 update_time 功能。在其中,我們以字符串的形式獲取當前時間,並使用它來填充時鐘的元素並將正確的類設置為數字。

有了這個,我們的數字時鐘就準備好了! 檢查下一部分,我們添加了對設置警報和使用 HTML5 音頻播放它們的支持。


Tutorial JavaScript 教程
  1. 簡單的位操作

  2. Mint 🍃:處理 HTTP 請求

  3. 更改按鍵

  4. React hooks 是否已經取代了類生命週期方法🤔?

  5. 什麼是 JavaScript 中的正無窮和負無窮?

  6. NodeJS 上的 Telegram 機器人。幫助創作

  7. Project 35 of 100 - React 電子商務 PWA

  1. 🚀 帶有 ESLint、Material、Transloco、Jest、TestCafe、Docker 和 Prettier 的 Angular 13 Starter 🚀

  2. 我該選擇 635000 個 npm 模塊中的哪一個?

  3. 如何使用本地策略實現 NestJS 護照身份驗證?

  4. 如何使用Javascript將簡單數組轉換為二維數組(矩陣)

  5. 如何更改 CSS 和 JS 中的 CSS 樣式表?

  6. 反應鉤子:useContext

  7. 複製原型進行繼承?

  1. 為微服務創建健康檢查

  2. 通知面板

  3. VS Code 中的文件嵌套

  4. 如何在 Chrome 開發工具中設置 console.logs 的樣式