JS画图之七【时钟】

样例:http://www.zhaojz.com.cn/demo/draw12.html

依赖:圆

一、定义对象:针

        //定义钟表指针
        //dotClock    原点
        //len    指针长度
        function ClockHand(dotClock, len, opts){
            this.points = [];
            this.dotClock = dotClock;
            this.len = len;
            this.currentAngle = opts.angle?(270+opts.angle):270; //偏移角
            this.drawed = false;
            this.type = opts.type?opts.type:""; //指针类型,分时针、分针和秒针
            this.color = opts.color?opts.color:"DarkRed"; //指针颜色
            this.weight = opts.weight?opts.weight:1; //指针宽度
        }
        //绘制指针
        ClockHand.prototype.draw = function(){
            if(!this.drawed){
                var rad = this.currentAngle*Math.PI/180; //计算弧度
                this.points = getLine(this.dotClock, [this.dotClock[0]+this.len*Math.cos(rad), this.dotClock[1]+this.len*Math.sin(rad)]
                    ,{
                    color: this.color,
                    pw: this.weight,
                    ph: this.weight
                });
                var i = 0;
                while(i < this.points.length){
                    document.body.appendChild(this.points[i]);
                    i++;
                }
                this.drawed = true;
            }
        }
        //擦除指针
        ClockHand.prototype._erase_ = function(){
            if(this.drawed){
                var i = 0;
                while(i < this.points.length){
                    document.body.removeChild(this.points[i]);
                    i++;
                }
                this.points = [];
                this.drawed = false;
            }
        }
        //移动到下一个位置
        ClockHand.prototype.goNext = function(){
            var inter = 0;
            switch(this.type){
            case "HOUR":
                inter=(360/(12*60*60));break;
            case "MIN":
                inter=(360/(60*60));break;
            case "SEC":
                inter=(360/(60));break;
            }
            if(inter > 0){
                this.currentAngle =  (this.currentAngle+inter)%360;
                this._erase_();
                this.draw();
            }
        }

二、定义对象:钟

        //定义钟表
        function Clock(dot, r){
            this.cid = new Date().getTime(); //唯一标识
            this.dot = dot;  //原点
            this.r = r;  //半径
            if(!window.myClock){
                window.myClock = {};
            }
            window.myClock[this.cid+""] = this; //保存引用
        }
        //初始化,画表盘、刻度和指针
        Clock.prototype.init = function(){
            drawCircle(this.dot, this.r, 1);
            var d = new Date();
            var hour = d.getHours();
            var minute = d.getMinutes();
            var second = d.getSeconds();
            this.hourHand = new ClockHand(this.dot, this.r*0.5, {type:"HOUR",color:"BLACK",weight: 2, angle: (hour%12*(360/12)+minute*(360/(12*60))+second*(360/(12*60*60)))});
            this.minuteHand = new ClockHand(this.dot, this.r*0.89, {type:"MIN",color:"DarkRed",weight: 2, angle: (minute*(360/60)+second*(360/(60*60)))});
            this.secondHand = new ClockHand(this.dot, this.r*0.91, {type:"SEC",color:"RED",weight: 1, angle: (second*(360/60))});
            this.hourHand.draw();
            this.minuteHand.draw();
            this.secondHand.draw();
            return this;
        }
        //开始走时
        Clock.prototype.start = function(){
            setInterval("myClock[‘"+this.cid+"‘]._running_();",1000);
        }
        
        Clock.prototype._running_ = function(){
            this.secondHand.goNext();
            this.minuteHand.goNext();
            this.hourHand.goNext();
            
        }

三、调用

        //半径
        var r= 100;// 原点
        var dot2 = [200, 200];
    
        new Clock(dot2, r).init().start();

PS:上述脚本所依赖的其它方法,可以通过查看网页源代码以及下载页面所引用的js文件获得。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。