2D-时间罗盘(JavaScript)

一个带旋转、很漂亮的时间罗盘

在这里插入图片描述

简单讲下实现思路

1、先在html将所有元素按年、月、日、周、时、分、秒分类,每种类型以div划分,给div指定一个id,每个div下面的元素用 ul 的 li 包含,新建个 css 将所有 li 元素共用一个中心点,设置宽高、水平对齐、行对齐、背景、字段颜色等样式

  • html 中部分代码截图
    在这里插入图片描述

2、写个js文件将日期和html中的元素进行绑定,并设置每秒钟进行旋转

  • 全部js代码如下
$(function () {
    /**
     * 旋转元素
     * @param elementId 元素Id
     * @param currNumber 日期数值
     * @param translateNumber 元素距离中心点的距离
     */
    function rotateElement(elementId, currNumber, translateNumber) {
        const $id = $('#' + elementId + ' ul li');
        // 圆所包含的元素个数
        let circleSize = $id.size();
        // 计算平均每个角的弧度
        let circleDeg = 360 / circleSize;
        // 计算角的弧度偏差
        let offsetDeg = circleDeg * currNumber;
        // 对与当前时间匹配的元素添加样式并去除其它元素的样式
        $id.eq(currNumber).addClass('elementActive').siblings().removeClass('elementActive');
        // 渲染所有元素
        for (let i = 0; i < circleSize; ++i) {
            $id.eq(i).css({
                'transition': currNumber === 0 ? '' : '.8s transform',
                'transform': 'rotate(' + (circleDeg * i - offsetDeg) + 'deg) translate(' + translateNumber + 'px, 0px)'
            })
        }
    }

    function init(callback) {
        let date = new Date();
        $("#yearId ul li").text(date.getFullYear() + "年");
        rotateElement('secondId', date.getSeconds(), 400);
        rotateElement('minusId', date.getMinutes(), 340);
        rotateElement('hourId', date.getHours(), 280);
        rotateElement('weekId', date.getDay() - 1, 220);
        rotateElement('dayId', date.getDate() - 1, 160);
        rotateElement('monthId', date.getMonth(), 100);
        rotateElement('yearId', date.getFullYear(), 0);

        (callback instanceof Function) && callback();
    }

    // 先初始化
    init(function () {
        // 循环调度
        setInterval(function () {
            init();
        }, 1000);
    });

});
  • 完整代码下载地址: 点我
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小天Smile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值