面向对象案例:随机方块

1.创建画布

<div id="container"></div>

2.创建工具对象--tools.js

var Tools = {
        getRandom: function(min, max) {
            min = Math.ceil(min);
            max = Math.floor(max);
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }
    }

3.创建box盒子对象--box.js

3.1创建构造函数

function Box(parent,options){...}

3.2 检测输入的对象值

options=options||{}//options 如果有值返回options,如果没有值,返回{}

3.3 设置对象属性

this.backgroundColor = options.backgroundColor || "red";
    this.width = options.width || 20;
    this.height = options.height || 20;
    this.x = options.x || 0;
    this.y = options.y || 0;

3.4 动态创建div标签,并追加到container内

this.div=document.createElement("div");
this.parent.appendChild(this.div);

3.5 设置div的样式

在Box构造函数中调用样式函数
this.init();

/通过原型设置init方法实现随机产生方块对象,并渲染到container上
//样式初始化方法
Box.prototype.init = function() {
        //调取样式,追加到container内
        this.parent.appendChild(this.div);

        //添加样式
        var div = this.div;

        div.style.backgroundColor = this.backgroundColor;
        div.style.width = this.width + "px";
        div.style.height = this.height + "px";
        div.style.position = "absolute";//脱离文档流
        div.style.left = this.x + "px"; //x横坐标
        div.style.top = this.y + "px"; //y纵坐标
    }

3.6 随机生成方块的位置

调用随机生成方块的位置的方法

// 调用随机生成方块的位置
this.random();




//随机生成方块的位置方法
Box.prototype.random = function() {
            //方法一  获取最远距离
            this.x = Tools.getRandom(0, this.parent.offsetWidth-this.div.offsetWidth);
            this.y = Tools.getRandom(0, this.parent.offsetHeight -this.div.offsetHeight);
            /*//方法二  获取最远距离
             * this.x = Tools.getRandom(0, this.parent.offsetWidth / this.width - 1) * this.width;
            this.y = Tools.getRandom(0, this.parent.offsetHeight / this.width - 1) * this.height;*/
            this.div.style.left = this.x + "px";
            this.div.style.top = this.y + "px";
        }

4.生成10个方块,随机生成颜色----main.js

4.1获取div容器

//获取画布
var containerObj = document.getElementById("container");

4.2设置数组存储创建的方块对象

//设置数组存储创建的方块对象     
var arr = [];
//
for(var i = 0; i < 10; i++) {
    var r = Tools.getRandom(0, 255);
    var g = Tools.getRandom(0, 255);
    var b = Tools.getRandom(0, 255);
    //实例化Box对象
    var boxObj = new Box(containerObj, {
        backgroundColor: "rgb(" + r + "," + g + "," + b + ")"
    });
    //把创建好的方块对象,添加到数组中
    arr.push(boxObj);
}

5.设置随机位置,开启定时器----main.js

setInterval(function() { 
    // 随机生成方块的坐标
    for (var j = 0; j< arr.length; j++) {
        arr[j].random();
    }
}, 500);

完整代码:

主页面:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <link rel="stylesheet" href="css/style.css">
</head>
<body>
  <div id="container">
    
  </div>
  <script src="js/tools.js"></script>
  <script src="js/box.js"></script>
  <script src="js/main.js"></script>
  <script>
    // 测试生成随机数
    // console.log(Tools.getRandom(1, 10));

    // var parent = document.getElementById('container');
    // var box1 = new Box(parent);
    // // 随机生成方块的坐标
    // box1.random();
  </script>
</body>
</html>

css:

# container {

  width: 800px;
  height: 600px;
  background-color: lightgray;
  position: relative;

}

创建工具对象--tools.js

 var Tools = {
            getRandom: function(min, max) {
                min = Math.ceil(min);
                max = Math.floor(max);
                return Math.floor(Math.random() * (max - min + 1)) + min;
            }
        }

创建box盒子对象--box.js

function Box(parent, options) {
  options = options || {};
  // 设置对象的属性
  this.backgroundColor = options.backgroundColor || 'red';
  this.width = options.width || 20;
  this.height = options.height || 20;
  this.x = options.x || 0;
  this.y = options.y || 0;

  // 创建对应的div
  this.div = document.createElement('div');
  parent.appendChild(this.div);
  this.parent = parent;

  // 设置div的样式
  this.init();
}

// 初始化div (方块)的样式
Box.prototype.init = function () {
  var div = this.div;
  div.style.backgroundColor = this.backgroundColor;
  div.style.width = this.width + 'px';
  div.style.height = this.height + 'px';
  div.style.left = this.x + 'px';
  div.style.top = this.y + 'px';
  // 脱离文档流
  div.style.position = 'absolute'
}

// 随机生成方块的位置
Box.prototype.random = function () {
  // 父容器的宽度/方块的宽度  总共能放多少个方块
  var x = Tools.getRandom(0, this.parent.offsetWidth / this.width - 1) * this.width;
  var y = Tools.getRandom(0, this.parent.offsetHeight / this.height - 1) * this.height;

  this.div.style.left = x + 'px';
  this.div.style.top = y + 'px';
}

设置随机位置,开启定时器----main.js

// 生成10个方块,随机生成颜色

// 获取容器
var container = document.getElementById('container');

// 数组,存储创建的方块对象
var array = [];
for (var i = 0; i < 10; i++) {
  var r = Tools.getRandom(0, 255);
  var g = Tools.getRandom(0, 255);
  var b = Tools.getRandom(0, 255);

  var box = new Box(container, {
    backgroundColor: 'rgb('+ r +','+ g +','+ b +')'
  });

  // 把创建好的方块对象,添加到数组中
  array.push(box);
}

// 设置随机位置,开启定时器
setInterval(randomBox, 500);

// 页面加载完成,先设置随机位置
randomBox();

function randomBox() {
  // 随机生成方块的坐标
  for (var i = 0; i < array.length; i++) {
    var box = array[i];
    box.random();
  }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,491评论 1 45
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,107评论 1 32
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,754评论 1 92
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,209评论 0 3
  • 产品小白,最近做产品的时候发现了一个非常有趣的现象。 我们在做产品的时候,需求的收集,产品的设计,还是产品的实现,...
    XiaoluFrank阅读 383评论 0 0