zoukankan      html  css  js  c++  java
  • 跟随鼠标走的时钟[跨浏览器支持]

    (function(){
        var document = window.document;
        var scrollTop = document.body.scrollTop;
        
        var addHandler = document.body.addEventListener ? w3cAddEvent : ieAddEvent;
        var removeHandler = document.body.removeEventListener ? w3cRemoveEvent : ieRemoveEvent;
        
        var daysArray = ["SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"];
        var monthsArray = ["JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER"];
        
        function $$(selector){
            return document.querySelectorAll(selector);
        }
        
        function getById(id){
            return document.getElementById(id);
        }
        
        function w3cAddEvent(target, eventType, handler){
            target.addEventListener(eventType, handler, false);
        }
        
        function ieAddEvent(target, eventType, handler){
            target.attachEvent("on" + eventType, handler);
        }
        
        function w3cRemoveEvent(target, eventType, handler){
            target.removeEventListener(eventType, handler, false);
        }
        
        function ieRemoveEvent(target, eventType, handler){
            target.detachEvent("on" + eventType, handler);
        }
        
        function isIE(){
            return navigator.userAgent.indexOf('MSIE') !== -1;
        };
        
        function Clock(options){
            options = options ||
            {};
            
            var dateColor = options.dateColor || '#000000';
            var faceColor = options.faceColor || '#000000';
            var secondsColor = options.secondsColor || '#00ff00';
            var minutesColor = options.minutesColor || '#0000ff';
            var hoursColor = options.hoursColor || '#ff0000';
            
            var i, len;
            var todaysArray = null;
            var face = null;
            var hours = null;
            var minutes = null;
            var seconds = null;
            
            var split = null;
            var dsplit = null;
            var y, x, Y, X, Dx, Dy, DX, DY;
            
            //constants
            var clockHeight = 40;
            var clockWidth = 40;
            var clockFromMouseY = 0;
            var clockFromMouseX = 100;
            
            var font = 'Arial';
            var size = 1;
            var dim = {};
            dim.width = size * 10;
            dim.height = size * 10;
            var speed = 0.6;
            
            var ymouse = 0;
            var xmouse = 0;
            
            var handHeight = clockHeight / 4.5
            var handWidth = clockWidth / 4.5
            var handY = -7;
            var handX = -2.5;
            var step = 0.06;
            var currStep = 0;
            
            function init(){
                todaysArray = getTodaysCharArray();
                faces = getFacesCharArray();
                hours = getHhoursCharArray();
                minutes = getMinutesCharArray();
                seconds = getSecondsCharArray();
                split = 360 / faces.length;
                dsplit = 360 / todaysArray.length;
                initAllArray();
                draw();
            }
            
            function initAllArray(){
                y = [];
                x = [];
                Y = [];
                X = [];
                for (i = 0, len = faces.length; i < len; i++) {
                    y[i] = 0;
                    x[i] = 0;
                    Y[i] = 0;
                    X[i] = 0
                }
                Dy = [];
                Dx = [];
                DY = [];
                DX = [];
                for (i = 0, len = todaysArray.length; i < len; i++) {
                    Dy[i] = 0;
                    Dx[i] = 0;
                    DY[i] = 0;
                    DX[i] = 0;
                }
            }
            
            function getTodaysCharArray(){
                var date = new Date();
                var day = date.getDate();
                var year = date.getYear();
                if (year < 2000) 
                    year = year + 1900;
                var todaysDate = " " + daysArray[date.getDay()] + " " + day + " " + monthsArray[date.getMonth()] + " " + year;
                return todaysDate.split('');
            }
            
            function getFacesCharArray(){
                return '1 2 3 4 5 6 7 8 9 10 11 12'.split(' ');
            }
            
            function getHhoursCharArray(){
                return '...'.split('');
            }
            
            function getMinutesCharArray(){
                return '....'.split('');
            }
            
            function getSecondsCharArray(){
                return '.....'.split('');
            }
            
            function buildTodays(){
                var props2 = "<font face=" + font + " size=" + size + " color=" + dateColor + "><B>";
                var html = [];
                for (i = 0, len = todaysArray.length; i < len; i++) 
                    html.push('<div class="cDates" style="position:absolute;top:0px;left:0;height:' + dim.height + ';' + dim.width + ';text-align:center">' + props2 + todaysArray[i] + '</B></font></div>');
                return html.join('');
            }
            
            function buildFaces(){
                var props = "<font face=" + font + " size=" + size + " color=" + faceColor + "><B>";
                var html = [];
                for (i = 0, len = faces.length; i < len; i++) 
                    html.push('<div class="cFaces" style="position:absolute;top:0px;left:0;height:' + dim.height + ';' + dim.width + ';text-align:center">' + props + faces[i] + '</B></font></div>');
                return html.join('');
            }
            
            function buildHours(){
                var html = [];
                for (i = 0, len = hours.length; i < len; i++) 
                    html.push('<div class="cHours" style="position:absolute;16px;height:16px;font-family:Arial;font-size:16px;color:' + hoursColor + ';text-align:center;font-weight:bold">' + hours[i] + '</div>');
                return html.join('');
            }
            
            function buildMinutes(){
                var html = [];
                for (i = 0, len = minutes.length; i < len; i++) 
                    html.push('<div class="cMinutes" style="position:absolute;16px;height:16px;font-family:Arial;font-size:16px;color:' + minutesColor + ';text-align:center;font-weight:bold">' + minutes[i] + '</div>');
                return html.join('');
            }
            
            function buildSeconds(){
                var html = [];
                for (i = 0, len = seconds.length; i < len; i++) 
                    html.push('<div class="cSeconds" style="position:absolute;16px;height:16px;font-family:Arial;font-size:16px;color:' + secondsColor + ';text-align:center;font-weight:bold">' + seconds[i] + '</div>');
                return html.join('');
            }
            
            function buildClockFace(){
                var html = [];
                html.push('<div id="Od" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
                html.push(buildTodays());
                html.push('</div></div>');
                html.push('<div id="Of" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
                html.push(buildFaces());
                html.push('</div></div>');
                html.push('<div id="Oh" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
                html.push(buildHours());
                html.push('</div></div>');
                html.push('<div id="Om" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
                html.push(buildMinutes());
                html.push('</div></div>')
                html.push('<div id="Os" style="position:absolute;top:0px;left:0px"><div style="position:relative">');
                html.push(buildSeconds());
                html.push('</div></div>')
                return html.join('');
            }
            
            function setCFacesPos(){
                getById("Of").style.top = scrollTop + 'px';
                
                var cFaces = $$(".cFaces");
                var cface;
                for (i = 0, len = cFaces.length; i < len; i++) {
                    cface = cFaces[i];
                    cface.style.top = y[i] + clockHeight * Math.sin(-1.0471 + i * split * Math.PI / 180) + 'px';
                    cface.style.left = x[i] + clockWidth * Math.cos(-1.0471 + i * split * Math.PI / 180) + 'px';
                }
            }
            
            function setCHoursPos(hrs){
                getById("Oh").style.top = scrollTop + 'px';
                
                var cHours = $$(".cHours");
                var cHour;
                for (i = 0, len = cHours.length; i < len; i++) {
                    cHour = cHours[i];
                    cHour.style.top = y[i] + handY + (i * handHeight) * Math.sin(hrs) + 'px';
                    cHour.style.left = x[i] + handX + (i * handWidth) * Math.cos(hrs) + 'px';
                }
            }
            
            function setCMinutesPos(min){
                getById("Om").style.top = scrollTop + 'px';
                
                var cMinutes = $$(".cMinutes");
                var cMinute;
                for (i = 0, len = cMinutes.length; i < len; i++) {
                    cMinute = cMinutes[i];
                    cMinute.style.top = y[i] + handY + (i * handHeight) * Math.sin(min) + 'px';
                    cMinute.style.left = x[i] + handX + (i * handWidth) * Math.cos(min) + 'px';
                }
            }
            
            function setCSecondsPos(sec){
                getById("Os").style.top = scrollTop + 'px';
                
                var cSeconds = $$(".cSeconds");
                var cSecond;
                for (i = 0, len = cSeconds.length; i < len; i++) {
                    cSecond = cSeconds[i];
                    cSecond.style.top = y[i] + handY + (i * handHeight) * Math.sin(sec) + 'px';
                    cSecond.style.left = x[i] + handX + (i * handWidth) * Math.cos(sec) + 'px';
                }
            }
            
            function setCDatesPos(){
                getById("Od").style.top = scrollTop + 'px';
                
                var cDates = $$(".cDates");
                var cDate;
                for (i = 0, len = cDates.length; i < len; i++) {
                    cDate = cDates[i];
                    cDate.style.top = Dy[i] + clockHeight * 1.5 * Math.sin(currStep + i * dsplit * Math.PI / 180) + 'px';
                    cDate.style.left = Dx[i] + clockWidth * 1.5 * Math.cos(currStep + i * dsplit * Math.PI / 180) + 'px';
                }
                
                currStep -= step;
            }
            
            function clockAndAssign(){
                var time = new Date();
                var secs = time.getSeconds();
                var sec = -1.57 + Math.PI * secs / 30;
                var mins = time.getMinutes();
                var min = -1.57 + Math.PI * mins / 30;
                var hr = time.getHours();
                var hrs = -1.575 + Math.PI * hr / 6 + Math.PI * parseInt(time.getMinutes()) / 360;
                
                setCFacesPos();
                setCHoursPos(hrs);
                setCMinutesPos(min);
                setCSecondsPos(sec);
                setCDatesPos();
            }
            
            function delay(){
                Dy[0] = Math.round(DY[0] += ((ymouse) - DY[0]) * speed);
                Dx[0] = Math.round(DX[0] += ((xmouse) - DX[0]) * speed);
                for (i = 1, len = todaysArray.length; i < len; i++) {
                    Dy[i] = Math.round(DY[i] += (Dy[i - 1] - DY[i]) * speed);
                    Dx[i] = Math.round(DX[i] += (Dx[i - 1] - DX[i]) * speed);
                }
                y[0] = Math.round(Y[0] += ((ymouse) - Y[0]) * speed);
                x[0] = Math.round(X[0] += ((xmouse) - X[0]) * speed);
                for (i = 1, len = faces.length; i < len; i++) {
                    y[i] = Math.round(Y[i] += (y[i - 1] - Y[i]) * speed);
                    x[i] = Math.round(X[i] += (x[i - 1] - X[i]) * speed);
                }
                clockAndAssign();
            }
            
            function draw(){
                document.body.innerHTML += buildClockFace();
                return this;
            }
            
            function start(){
                addHandler(document, "mousemove", function(e){
                    e = e || window.event;
                    ymouse = !isIE() ? e.pageY + clockFromMouseY : e.y + clockFromMouseY;
                    xmouse = !isIE() ? e.pageX + clockFromMouseX : e.x + clockFromMouseX;
                });
                
                addHandler(window, "load", function(e){
                    window.clockTimer = setInterval(delay, 20);
                });
                
                return this;
            }
            
            function stop(){
                clearInterval(window.clockTimer);
                return this;
            }
            
            init();
            
            return {
                draw: draw,
                start: start,
                stop: stop
            };
        }
        
        window.Clock = Clock;
    })();
    
    Clock().start();
  • 相关阅读:
    python IDE安装-mac
    tokudb引擎安装-2
    MariaDB10.2.X-新特性2-支持check约束and with as
    MariaDB10.2.X-新特性1-支持分析函数
    MySQL5.7表空间加密
    MySQL 5.7 SYS scheme解析
    tcpdump抓SQL
    pt-online-schema-change
    查看锁信息
    onlineDDL测试
  • 原文地址:https://www.cnblogs.com/zfc2201/p/3238551.html
Copyright © 2011-2022 走看看