实现时间的动画翻牌倒计时

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Clock</title>
</head>

<body style="background:#333; padding:0; margin:0; ">
</body>

</html>
<style>
    .clock {
        overflow: hidden;
        float: left;
        -webkit-perspective: 1000px;
        -moz-perspective: 1000px;
        -ms-perspective: 1000px;
        -o-perspective: 1000px;
        perspective: 1000px;
        -webkit-transform-style: preserve-3d;
        -moz-transform-style: preserve-3d;
        -ms-transform-style: preserve-3d;
        -o-transform-style: preserve-3d;
        transform-style: preserve-3d;
    }

    .unit {
        float: left;
        margin: 16px;
        position: relative;
        height: 129px;
        width: 128px;
        overflow: visible;
    }

    .top,
    .btm {
        height: 64px;
        width: 128px;
        overflow: hidden;
        position: absolute;
    }

    .unit span {
        font: 96px/128px Tahoma, Geneva, sans-serif;
        width: 128px;
        text-align: center;
        position: absolute;
    }

    .btm span {
        top: -64px;
    }

    .top {
        background: #ddd;
        border-bottom: 1px solid #999;
        border-radius: 10px 10px 0 0;
        top: 0;
        -webkit-transform-origin: bottom;
        -ms-transform-origin: bottom;
        -moz-transform-origin: bottom;
        -o-transform-origin: bottom;
        transform-origin: bottom;
    }

    .btm {
        background: #eee;
        border-radius: 0 0 10px 10px;
        top: 65px;
        -webkit-transform-origin: top;
        -ms-transform-origin: top;
        -moz-transform-origin: top;
        -o-transform-origin: top;
        transform-origin: top;
    }
</style>
<script>
    var clkCls = "clock";
    var clkUnitCls = "unit";
    var clkTopCls = "top";
    var clkBtmCls = "btm";

    function transform(obj, tran) {
        try {
            obj.style.WebkitTransform = tran;
            obj.style.MozTransform = tran;
            obj.style.msTransform = tran;
            obj.style.OTransform = tran;
            obj.style.transform = tran;
        } catch (e) {
        }
    }


    var ClkUnit = function (val, minVal, maxVal) {
        console.log(this);
        this.update = function () {
            this.updateTxt();
            if (this.val > this.maxVal) { this.setVal(this.minVal); this.period(); }
            if (this.val < this.minVal) { this.setVal(this.maxVal); this.period(); }
        }
        this.incVal = function () { this.val++; this.update(); }
        this.decVal = function () { this.val--; this.update(); }
        this.updateTxt = function () { if (this.val > 9) this.text = this.val; else this.text = "0" + this.val; }
        this.setVal = function (v) { this.val = v; this.updateTxt(); }

        this.pane = document.createElement("div");
        this.pane.className = clkUnitCls;
        this.setVal(val);
        this.minVal = minVal;
        this.maxVal = maxVal;
        this.topbak = document.createElement("div"); this.topbak.txt = document.createElement("span"); this.topbak.className = clkTopCls;
        this.topfnt = document.createElement("div"); this.topfnt.txt = document.createElement("span"); this.topfnt.className = clkTopCls;
        this.btmbak = document.createElement("div"); this.btmbak.txt = document.createElement("span"); this.btmbak.className = clkBtmCls;
        this.btmfnt = document.createElement("div"); this.btmfnt.txt = document.createElement("span"); this.btmfnt.className = clkBtmCls;
        this.pane.appendChild(this.topbak); this.topbak.appendChild(this.topbak.txt);
        this.pane.appendChild(this.topfnt); this.topfnt.appendChild(this.topfnt.txt);
        this.pane.appendChild(this.btmbak); this.btmbak.appendChild(this.btmbak.txt);
        this.pane.appendChild(this.btmfnt); this.btmfnt.appendChild(this.btmfnt.txt);
        this.mtx = false;

        this.animateReset = function () {
            transform(this.btmfnt, "");
            transform(this.btmbak, "");

            this.btmfnt.txt.innerHTML = this.text;
            this.topbak.txt.innerHTML = this.text;
            this.topfnt.txt.innerHTML = this.text;
            this.btmbak.txt.innerHTML = this.text;

            transform(this.topfnt, "");
            transform(this.topbak, "");
        }

        this.period = null;

        this.turnDown = function () {
            var u = this;
            if (this.mtx) return; //this.mtx = true;
            this.incVal();
            var topDeg = 0; var btmDeg = 90;

            this.topbak.txt.innerHTML = this.text;

            transform(u.topfnt, "rotateX(0deg)");

            var timer1 = setInterval(function () {
                transform(u.topfnt, "rotateX(" + topDeg + "deg)"); topDeg -= 10;
                if (topDeg <= -90) {
                    transform(u.topfnt, "rotateX(0deg)");
                    u.topfnt.txt.innerHTML = u.text;
                    transform(u.btmfnt, "rotateX(90deg)");
                    u.btmfnt.txt.innerHTML = u.text;
                    var timer2 = setInterval(function () {
                        if (btmDeg <= 0) { clearInterval(timer2); u.animateReset(); u.mtx = false; }
                        transform(u.btmfnt, "rotateX(" + btmDeg + "deg)"); btmDeg -= 10;
                    }, 30);
                    clearInterval(timer1);
                }
            }, 30);
        }

        this.animateReset();
    }

    var Clock = function (prt) {
        this.pane = document.createElement("div");
        this.pane.className = clkCls;
        var d = new Date();
        this.hour = new ClkUnit(d.getHours(), 0, 23);
        this.munite = new ClkUnit(d.getMinutes(), 0, 59);
        this.second = new ClkUnit(d.getSeconds(), 0, 59);
        this.pane.appendChild(this.hour.pane);
        this.pane.appendChild(this.munite.pane);
        this.pane.appendChild(this.second.pane);
        prt.appendChild(this.pane);
        var clock = this;
        this.second.period = function () { clock.munite.turnDown(); }
        this.munite.period = function () { clock.hour.turnDown(); }
        this.timer = null;

        this.start = function () { this.timer = setInterval(function () { clock.second.turnDown(); }, 1000); }
        this.pause = function () { clearInterval(this.timer); }

        this.start();
    }
    var c = new Clock(document.body);</script>

<!-- Generated by RunJS (Tue Dec 30 09:49:07 CST 2014) 1ms -->

 

上一篇:for in 和 for of 的区别


下一篇:Flutter 第一次运行就出现白屏的问题