原生javascriptはwin 8をまねて進度バーを待つ.

6470 ワード

はじめに
ずっと気に入りました.win 8のプログレスボードを待っています.win 8が出たばかりです.不思議な感じです.その時は構想がなかったので、研究に行かなかった.最近インターネットで資料を探して、やっとできました.先にデモに行きます.プレビューを見てください.win 8プログレスバー.
二、簡単に紹介する
オリジナルJavascript作成には、jsがオブジェクト指向プログラミングと円形座標に基づいて計算することを理解する必要があります.
実現原理:各円点を一つのオブジェクトに抽象化し、各円点オブジェクトを配列中に存在させ、各円点オブジェクトを各円点オブジェクトのrun方法を遅延に実行させることで、円点動作速度が速くなると、タイマーを変更してミリ秒数だけ遅延させることで実現される.
//要素xと中心xの座標サイズを判断し、タイマーの遅延時間を設定します.
if (this.position.left < this.fixed.left) {

    this.delay += .5;

} else {

    this.delay -= .5;

}
やはりソースですね.表現力があまりよくないです.
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

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

    <title> win8     </title>

    <style>

        body {

            margin: 0;

            padding: 0;

            background: green

        }

    </style>

</head>

<body>

    <script>

        //********    ******** 

        //         :  =Math.PI*  /180; js Math.sin(),Math.cos()   ,       

        //  x       :Math.cos(Math.PI *   / 180) *    +   x   

        //  y       :Math.sin(Math.PI *   / 180) *    +   y   

        //********    ******** 

        



        //      (js       ,      )

        function ProgressBarWin8() {

            //     

            this.fixed = {

                left: 0,

                top: 0

            };

            // html      

            this.position = {

                left: 0,

                top: 0

            };

            this.radius = 70; //    

            this.angle = 270; //   ,  270

            this.delay = 30; //        

            this.timer = null; //        

            this.dom = null; // html    

            // html      , position    absolute

            this.style = {

                position: "absolute",

                width: "10px",

                height: "10px",

                background: "#fff",

                "border-radius": "5px"

            };

        }



        // js        prototype    ,         

        ProgressBarWin8.prototype = {

            //     

            run: function() {

                if (this.timer) {

                    clearTimeout(this.timer);

                }

                

                //   html      ,       x,y   

                this.position.left = Math.cos(Math.PI * this.angle / 180) * this.radius + this.fixed.left;

                this.position.top = Math.sin(Math.PI * this.angle / 180) * this.radius + this.fixed.top;

                this.dom.style.left = this.position.left + "px";

                this.dom.style.top = this.position.top + "px";

                

                //     

                this.angle++;

                

                //     x   x    ,         

                if (this.position.left < this.fixed.left) {

                    this.delay += .5;

                } else {

                    this.delay -= .5;

                }

                

                var scope = this;

                //    ,    run  ,       

                this.timer = setTimeout(function () {

                    // js      this     ,  this window

                    scope.run();

                }, this.delay);

            },

            // html        

            defaultSetting: function () {

                //     span  

                this.dom = document.createElement("span");

                //   span     ,js         

                for (var property in this.style) {

                    // js        .   ,           

                    this.dom.style[property] = this.style[property];

                }

                // innerWidth innerHeight            ,         ,       。

                //     x,y   ,         ,    

                this.fixed.left = window.innerWidth / 2;

                this.fixed.top = window.innerHeight / 2;

                //   span       

                this.position.left = Math.cos(Math.PI * this.angle / 180) * this.radius + this.fixed.left;

                this.position.top = Math.sin(Math.PI * this.angle / 180) * this.radius + this.fixed.top;

                this.dom.style.left = this.position.left + "px";

                this.dom.style.top = this.position.top + "px";

                //  span     documet  

                document.body.appendChild(this.dom);

                

                //       

                return this;

            }

        };



        //     ,         ,           

        //new ProgressBarWin8().defaultSetting().run();







        var progressArray = [], //               ,js       ,   list  

            tempArray = [], //     progressArray        ,       ,           

            timer = 200; //               run      

        

        //         ,     ,    5   

        for (var i = 0; i < 5; ++i) {

            progressArray.push(new ProgressBarWin8().defaultSetting());

        }

        

        //     each  ,c#  lambda       

        Array.prototype.each = function (fn) {

            for (var i = 0, len = this.length; i < len;) {

                //   call(object,arg1,arg2,...)/apply(object,[arg1,arg2,...])      fn this    ,         

                fn.call(this[i++], arguments);//   :fn.apply(this[i++],arguments)

            }

        };

        

        //         ,             

        window.onresize = function () {

            tempArray.each(function () {

                this.fixed.left = window.innerWidth / 2;

                this.fixed.top = window.innerHeight / 2;

            });

        };



        //                  run  

        timer = setInterval(function () {

            if (progressArray.length <= 0) {

                //       ,       (setTimeOut:        ,  ;setInterval:        ,  )

                clearInterval(timer);

            } else {

                // shift()                   ,          。

                var entity = progressArray.shift();

                tempArray.push(entity);

                //          run  

                entity.run();

            }

        },timer);

    </script>

</body>

</html>

三、結語:
いいですね.いいです.