美文网首页
动态时钟

动态时钟

作者: 鹿白_tz | 来源:发表于2020-03-20 22:55 被阅读0次

    动态时钟展示

    CSS
    body {
      display: -webkit-box;
      display: -ms-flexbox;
      display: flex;
      -webkit-box-pack: center;
          -ms-flex-pack: center;
              justify-content: center;
      -webkit-box-align: center;
          -ms-flex-align: center;
              align-items: center;
      height: 100vh;
    }
    
    .clock {
      display: -webkit-box;
      display: -ms-flexbox;
      display: flex;
    }
    
    .clock .divider {
      font-size: 66px;
      line-height: 102px;
      font-style: normal;
    }
    
    .clock .flip {
      position: relative;
      width: 60px;
      height: 100px;
      margin: 2px;
      font-size: 66px;
      line-height: 100px;
      text-align: center;
      background: white;
      border: 1px solid black;
      border-radius: 10px;
      -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.5);
              box-shadow: 0 0 6px rgba(0, 0, 0, 0.5);
      -webkit-box-reflect: below 1px linear-gradient(transparent, rgba(0, 0, 0, 0.4));
    }
    
    .clock .flip .digital::before, .clock .flip .digital::after {
      position: absolute;
      content: attr(data-number);
      left: 0;
      right: 0;
      color: white;
      background: black;
      overflow: hidden;
      -webkit-perspective: 160px;
              perspective: 160px;
    }
    
    .clock .flip .digital::before {
      top: 0;
      bottom: 50%;
      border-bottom: 1px solid #666;
      border-radius: 10px 10px 0 0;
    }
    
    .clock .flip .digital::after {
      top: 50%;
      bottom: 0;
      line-height: 0;
      border-radius: 0 0 10px 10px;
    }
    
    .clock .flip .back::before,
    .clock .flip .front::after {
      z-index: 1;
    }
    
    .clock .flip .back::after {
      z-index: 2;
    }
    
    .clock .flip .front::before {
      z-index: 3;
    }
    
    .clock .flip .back::after {
      -webkit-transform-origin: center top;
              transform-origin: center top;
      -webkit-transform: rotateX(0.5turn);
              transform: rotateX(0.5turn);
    }
    
    .clock .flip.running .front::before {
      -webkit-transform-origin: center bottom;
              transform-origin: center bottom;
      -webkit-animation: frontFlipDown 0.6s ease-in-out;
              animation: frontFlipDown 0.6s ease-in-out;
      -webkit-box-shadow: 0 -2px 6px rgba(255, 255, 255, 0.3);
              box-shadow: 0 -2px 6px rgba(255, 255, 255, 0.3);
      -webkit-backface-visibility: hidden;
              backface-visibility: hidden;
    }
    
    .clock .flip.running .back::after {
      -webkit-animation: backFlipDown 0.6s ease-in-out;
              animation: backFlipDown 0.6s ease-in-out;
    }
    
    @-webkit-keyframes frontFlipDown {
      to {
        -webkit-transform: rotateX(0.5turn);
                transform: rotateX(0.5turn);
      }
    }
    
    @keyframes frontFlipDown {
      to {
        -webkit-transform: rotateX(0.5turn);
                transform: rotateX(0.5turn);
      }
    }
    
    @-webkit-keyframes backFlipDown {
      to {
        -webkit-transform: rotateX(0);
                transform: rotateX(0);
      }
    }
    
    @keyframes backFlipDown {
      to {
        -webkit-transform: rotateX(0);
                transform: rotateX(0);
      }
    }
    /*# sourceMappingURL=time.css.map */
    
    
    HTML
     <div class="clock">
          <div class="flip">
            <div class="digital front" data-number="0"></div>
            <div class="digital back" data-number="1"></div>
          </div>
          <div class="flip">
            <div class="digital front" data-number="0"></div>
            <div class="digital back" data-number="1"></div>
          </div>
          <em class="divider">:</em>
          <div class="flip">
            <div class="digital front" data-number="0"></div>
            <div class="digital back" data-number="1"></div>
          </div>
          <div class="flip">
            <div class="digital front" data-number="0"></div>
            <div class="digital back" data-number="1"></div>
          </div>
          <em class="divider">:</em>
          <div class="flip">
            <div class="digital front" data-number="0"></div>
            <div class="digital back" data-number="1"></div>
          </div>
          <div class="flip">
            <div class="digital front" data-number="0"></div>
            <div class="digital back" data-number="1"></div>
          </div>
        </div>
    
    JAVASCRIPT
     'use strict'
          var Flipper = /** @class */ (function() {
            function Flipper(node, currentTime, nextTime) {
              this.isFlipping = false
              this.duration = 600
              this.flipNode = node
              this.frontNode = node.querySelector('.front')
              this.backNode = node.querySelector('.back')
              this.setFrontTime(currentTime)
              this.setBackTime(nextTime)
            }
            Flipper.prototype.setFrontTime = function(time) {
              this.frontNode.dataset.number = time
            }
            Flipper.prototype.setBackTime = function(time) {
              this.backNode.dataset.number = time
            }
            Flipper.prototype.flipDown = function(currentTime, nextTime) {
              var _this = this
              if (this.isFlipping) {
                return false
              }
              this.isFlipping = true
              this.setFrontTime(currentTime)
              this.setBackTime(nextTime)
              this.flipNode.classList.add('running')
              setTimeout(function() {
                _this.flipNode.classList.remove('running')
                _this.isFlipping = false
                _this.setFrontTime(nextTime)
              }, this.duration)
            }
            return Flipper
          })()
          var getTimeFromDate = function(date) {
            return date
              .toTimeString()
              .slice(0, 8)
              .split(':')
              .join('')
          }
          var flips = document.querySelectorAll('.flip')
          var now = new Date()
          var nowTimeStr = getTimeFromDate(new Date(now.getTime() - 1000))
          var nextTimeStr = getTimeFromDate(now)
          var flippers = Array.from(flips).map(function(flip, i) {
            return new Flipper(flip, nowTimeStr[i], nextTimeStr[i])
          })
          setInterval(function() {
            var now = new Date()
            var nowTimeStr = getTimeFromDate(new Date(now.getTime() - 1000))
            var nextTimeStr = getTimeFromDate(now)
            for (var i = 0; i < flippers.length; i++) {
              if (nowTimeStr[i] === nextTimeStr[i]) {
                continue
              }
              flippers[i].flipDown(nowTimeStr[i], nextTimeStr[i])
            }
          }, 1000)
    
    

    预览图

    效果预览图.gif

    相关文章

      网友评论

          本文标题:动态时钟

          本文链接:https://www.haomeiwen.com/subject/bdfeyhtx.html