js动画之面向对象二

面向对象,就是将一系列具有相同属性的元素提取出来,需要用的时候就new一个。

  • 先看效果图:
  • 分析:这些小球有相同动作,相同的“外貌”,所以将它提出来封装成一个对象,然后通过点击事件new这个对象。
  • 完整代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        * {margin: 0;padding: 0;}
        div{width: 50px;height: 50px;position: absolute;left: 0;border-radius:50%;background: red;}
    </style>
</head>
<body>
    <button onclick="addDiv()">click</button>
    <script>
        function addDiv(){
            // new一个div对象
            let breakout = new Breakout(20,50);
            breakout.init();
        }
        function Breakout(x,y) {   //对象 构造函数  
            this.x = x;
            this.y = y;
        }
        Breakout.prototype = {    //原型方法  
            init() {              //初始化系统 
                this.createDiv(); 
                this.divStar();    //初始化div  
            },
            createDiv(){
                let brick = document.createElement("div");
                document.body.appendChild(brick);
                this.Odiv = brick;
            },
            divStar() { 
                console.log(this)
                this.Odiv.style.top = this.y + 'px';  
                this.Odiv.style.left = this.x + 'px';
                this.disX = 3;             
                this.disY = 3;                
                this.maxWidth = window.innerWidth - this.Odiv.offsetWidth - this.disX;         
                this.maxHeight = window.innerHeight - this.Odiv.offsetHeight - this.disY;    
                this.ballMove();
            },
            ballMove() {        //div开始运动  
                function auto() {
                    if (this.x >= this.maxWidth) this.disX *= -1;
                    if (this.y >= this.maxHeight) this.disY *= -1;
                    if (this.x < 0) this.disX *= -1;
                    if (this.y < 0) this.disY *= -1;
                    this.x += this.disX;
                    this.y += this.disY;
                    this.Odiv.style.left = this.x + 'px';
                    this.Odiv.style.top = this.y + 'px';
                    window.requestAnimationFrame(auto.bind(this));
                }
                auto.call(this);
            },
        }
    </script>
</body>
</html>
posted @ 2020-01-15 14:43  飓风吟  阅读(139)  评论(0编辑  收藏  举报