MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    Clock Clock 24

    Scheduled Pinned Locked Moved Requests
    7 Posts 3 Posters 1.1k Views 4 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • lavolp3L Offline
      lavolp3 Module Developer @cmgp
      last edited by

      @cmgp looks good. Have fun programming it :-D
      Seriously, the mirror has proven not to be very strong with animations. You could think about leaving the animations out.
      I think that would miss the fun part.

      How to troubleshoot modules
      MMM-soccer v2, MMM-AVStock

      C 1 Reply Last reply Reply Quote 0
      • Piranha1605P Offline
        Piranha1605
        last edited by

        Do you mean it

        Unbenannt.jpg

        lavolp3L 1 Reply Last reply Reply Quote 1
        • lavolp3L Offline
          lavolp3 Module Developer @Piranha1605
          last edited by lavolp3

          @Piranha1605 @cmgp LOL!

          How to troubleshoot modules
          MMM-soccer v2, MMM-AVStock

          1 Reply Last reply Reply Quote 0
          • C Offline
            cmgp @lavolp3
            last edited by

            @lavolp3 Actually the programmer posted the code too bad i can’t make a module:

            HTML
            .art

            • var d = 0;
              while d < 4
              .digit
              - var c = 0;
              while c < 6
              svg(class=clock clock--${d * 6 + c} width=“100” height=“100” viewBox=“0 0 100 100”)
              path(class=“clock-smallHand” d=“M50,47 C48.3431458,47 47,48.3431458 47,50 C47,51.6568542 48.3431458,53 50,53 L95,53 L95,47 L50,47 Z” stroke=“none” fill=“#4A4A4A” fill-rule=“evenodd”)
              path(class=“clock-largeHand” d=“M50,47 C48.3431458,47 47,48.3431458 47,50 C47,51.6568542 48.3431458,53 50,53 L100,53 L100,47 L50,47 Z” stroke=“none” fill=“#4A4A4A” fill-rule=“evenodd”)
              - c++
              - d++
              .text
              h1 Clock Clock 24
              p
              small Code
              br
              a(href=“https://manu.ninja/”) Manuel Wieser
              p
              small Design
              br
              a(href=“http://www.humanssince1982.com/”) Humans since 1982
              .trigger.trigger–left
              .trigger.trigger–right

            CSS

            html {
            width: 100%;
            height: 100%;
            }

            body {
            min-height: 100%;

            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;

            font-family: ‘Source Sans Pro’, sans-serif;
            color: #4a4a4a;

            cursor: default;
            }

            .art {
            cursor: zoom-in;
            margin: 5vw 0;
            }

            .art–full {
            cursor: zoom-out;
            }

            .text {
            margin-bottom: 5vw;
            text-align: center;
            }

            a {
            color: lighten(#4a4a4a, 25%);
            text-decoration: none;
            }

            .digit {
            float: left;
            }

            .clock {
            –small-hand: -135deg;
            –large-hand: -45deg;

            margin: .3vw; // 3px
            width: 10vw;
            height: 10vw;

            border-radius: 50%;
            box-shadow: inset 0 1px 3px rgba(0, 0, 0, .25);

            float: left;
            &:nth-of-type(2n+1) {
            clear: left;
            }
            }

            .clock-smallHand,
            .clock-largeHand {
            transform-origin: 50px center;
            transition: transform 10s;
            }

            .clock-smallHand {
            transform: rotateZ(var(–small-hand));
            }

            .clock-largeHand {
            transform: rotateZ(var(–large-hand));
            }

            .s-hidden {
            display: none;
            }

            .trigger {
            position: fixed;
            bottom: 0;
            width: 25%;
            height: 5vw;
            cursor: help;
            }

            .trigger–left {
            left: 0;
            }

            .trigger–right {
            right: 0;
            }

            JS

            const digits = [
            [ // 0
            { hour: 6, minute: 15 },
            { hour: 9, minute: 30 },
            { hour: 6, minute: 0 },
            { hour: 0, minute: 30 },
            { hour: 3, minute: 0 },
            { hour: 0, minute: 45 }
            ], [ // 1
            { hour: 7.5, minute: 37.5 },
            { hour: 6, minute: 30 },
            { hour: 7.5, minute: 37.5 },
            { hour: 6, minute: 0 },
            { hour: 7.5, minute: 37.5 },
            { hour: 0, minute: 0 }
            ], [ // 2
            { hour: 3, minute: 15 },
            { hour: 9, minute: 30 },
            { hour: 6, minute: 15 },
            { hour: 0, minute: 45 },
            { hour: 0, minute: 15 },
            { hour: 9, minute: 45 }
            ], [ // 3
            { hour: 3, minute: 15 },
            { hour: 9, minute: 30 },
            { hour: 3, minute: 15 },
            { hour: 9, minute: 0 },
            { hour: 3, minute: 15 },
            { hour: 9, minute: 0 }
            ], [ // 4
            { hour: 6, minute: 30 },
            { hour: 6, minute: 30 },
            { hour: 0, minute: 15 },
            { hour: 6, minute: 0 },
            { hour: 7.5, minute: 37.5 },
            { hour: 0, minute: 0 }
            ], [ // 5
            { hour: 6, minute: 15 },
            { hour: 9, minute: 45 },
            { hour: 0, minute: 15 },
            { hour: 6, minute: 45 },
            { hour: 3, minute: 15 },
            { hour: 0, minute: 45 }
            ], [ // 6
            { hour: 6, minute: 15 },
            { hour: 9, minute: 45 },
            { hour: 6, minute: 0 },
            { hour: 6, minute: 45 },
            { hour: 0, minute: 15 },
            { hour: 0, minute: 45 }
            ], [ // 7
            { hour: 3, minute: 15 },
            { hour: 6, minute: 45 },
            { hour: 7.5, minute: 37.5 },
            { hour: 6, minute: 0 },
            { hour: 7.5, minute: 37.5 },
            { hour: 0, minute: 0 }
            ], [ // 8
            { hour: 6, minute: 15 },
            { hour: 6, minute: 45 },
            { hour: 0, minute: 15 },
            { hour: 0, minute: 45 },
            { hour: 0, minute: 15 },
            { hour: 0, minute: 45 }
            ], [ // 9
            { hour: 6, minute: 15 },
            { hour: 6, minute: 45 },
            { hour: 3, minute: 0 },
            { hour: 6, minute: 0 },
            { hour: 3, minute: 15 },
            { hour: 0, minute: 45 }
            ]
            ];

            const happyDigit = Array(6).fill({ hour: 22.5, minute: 7.5 });
            const neutralDigit = Array(6).fill({ hour: 7.5, minute: 7.5 });

            function showSpecialState(digit) {
            stopClock();
            for (let x = 0; x < 4; x++) {
            setDigit(x, digit);
            }
            window.setTimeout(() => startClock(), 10000);
            }

            document.querySelector(‘.trigger–left’).addEventListener(‘click’, e => {
            showSpecialState(happyDigit);
            });

            document.querySelector(‘.trigger–right’).addEventListener(‘click’, e => {
            showSpecialState(neutralDigit);
            });

            window.addEventListener(‘keydown’, e => {
            const h = 72;
            const n = 78;
            if (h === e.keyCode) {
            showSpecialState(happyDigit);
            }
            if (n === e.keyCode) {
            showSpecialState(neutralDigit);
            }
            });

            document.querySelector(‘.art’).addEventListener(‘click’, e => {
            document.querySelector(‘.text’).classList.toggle(‘s-hidden’);
            document.querySelector(‘.art’).classList.toggle(‘art–full’);
            })

            function hourToDegrees(hour) {
            return hour * (360 / 12) - 90;
            }

            function minuteToDegrees(minute) {
            return minute * (360 / 60) - 90;
            }

            function setHands(id, hour, minute) {
            const clock = document.querySelector(.clock--${id});
            clock.style.setProperty(--small-hand, ${hourToDegrees(hour) + 360}deg);
            clock.style.setProperty(--large-hand, ${minuteToDegrees(minute) - 360}deg);
            }

            function setDigit(id, values) {
            for (let x = 0; x < 6; x++) {
            setHands(id * 6 + x, values[x].hour, values[x].minute);
            }
            }

            function setTime(time) {
            setDigit(0, digits[time.charAt(0)]);
            setDigit(1, digits[time.charAt(1)]);
            setDigit(2, digits[time.charAt(3)]);
            setDigit(3, digits[time.charAt(4)]);
            }

            let state;
            let interval;

            function startClock() {
            state = ‘----’;
            interval = window.setInterval(() => {
            const time = new Date(Date.now() + 10000).toTimeString();
            if (time !== state) {
            setTime(time);
            state = time;
            }
            }, 1000);
            }

            function stopClock() {
            clearInterval(interval);
            }

            startClock();

            1 Reply Last reply Reply Quote 0
            • Piranha1605P Offline
              Piranha1605
              last edited by

              Download the zip file from codepen and load everything with MMM-iFrame or with my MMM-Watchstore.

              C 1 Reply Last reply Reply Quote 0
              • C Offline
                cmgp @Piranha1605
                last edited by

                @Piranha1605 Thanks for the help works perfectly with watchstore couldn’t get it to work with iframe.

                1 Reply Last reply Reply Quote 0
                • 1 / 1
                • First post
                  Last post
                Enjoying MagicMirror? Please consider a donation!
                MagicMirror created by Michael Teeuw.
                Forum managed by Sam, technical setup by Karsten.
                This forum is using NodeBB as its core | Contributors
                Contact | Privacy Policy