用面向对象写碰撞的小球

2017-10-31  本文已影响0人  可乐_d001

创建小球对象的构造函数
function Boll(wh){
//随机产生小球的宽高
var wh = randFn(20,50)
//设置宽高属性和属性值
this.width = wh;
this.height = wh;
//设置小球诞生点的坐标属性
this.top = randFn(0,document.body.offsetHeight-wh)+'px
this.left = randFn(0,document.body.offsetWidth-wh)+'px
// // 设置小球背影颜色的随机数
// rgba(255,255,155,0.5)
this.color = 'rgba(' + randFn(0, 255) + ',' + randFn(0, 255) + ',' + randFn(0, 255) + ',' + Math.random() + ')';
//设置小球移动速度的属性
this.speedX = randFn(-10,10);
this.speedY = randFn(-10,10)
//设置保存小球标签的属性
this.div = document.createElement('div');

}

// 原型方法:绘制小球(配置div标签的相关css样式,然后把标签拼接进文档流)
//因为这些样式都是一样的,所以可以放在原型里
Boll.prototype.draw = function () {

                this.div.className = 'boll';

                this.div.style.width = this.width + 'px';
                this.div.style.height = this.height + 'px';

                this.div.style.top = this.top;
                this.div.style.left = this.left;

                this.div.style.backgroundColor = this.color;

                // 把配置好的节点拼接进文档流
                wrap.appendChild(this.div);
            }
     // 原型方法:让小球移动,且碰壁反弹
            Boll.prototype.run = function () {
                // 因为在定时器中使用的this指针是指向window对象的,要在定时器中获取当前操作的小球对象,就必须在定时器外部用变量把当前操作小球对象保存下来,在定时器内部通过该变量获取小球对象
                var self = this;
                setInterval(function () {
                    var tag = self.div;
                    if (tag.offsetLeft + tag.offsetWidth >= wrap.offsetWidth || tag.offsetLeft < 0) {
                        self.speedX *= -1;
                    }

                    if (tag.offsetTop + tag.offsetHeight >= wrap.offsetHeight || tag.offsetTop < 0) {
                        self.speedY *= -1;
                    }

                    tag.style.left = tag.offsetLeft + self.speedX + 'px';
                    tag.style.top = tag.offsetTop + self.speedY + 'px';

                },30)
            }

for (var i = 0; i < 100; i++) {
// 创建小球对象
var boll = new Boll();

                    // 调用对象绘制方法,把小球绘制进文档
                    boll.draw();

                    // 调用小球移动方法
                    boll.run()
                }
上一篇下一篇

猜你喜欢

热点阅读