JavaScript九宫格随机颜色练习

练习要求:

在html页面中做出3*3九个格子,随机抽取其中三个并赋予随机三种不同的背景色。

九宫格下有两个按钮,第一个按钮点击后开始随机,自动随机抓取三个格子并赋予随机三种颜色。第二个按钮点击后停止随机。

编码过程:


首先按照要求制作九宫格页面布局,利用CSS进行精准布局,这个练习项目的重点是javascript随机算法,布局为次,所以很快用<div> <li> 标签完成布局,如图1.1

1.1

CSS代码如下

*{

margin: 0;

padding: 0;

}

li {

margin: 2px;

display: block;

width: 30px;

height: 30px;

border-radius: 7px;

position: relative;

border: 1px solid black;

}

div {

float: left;

margin: 1px;

padding: 0;

}

ul {

margin: 0px;

padding: 0;

}

button {

position: relative;

top: 120px;

left: -100px;

}

input {

position: relative;

top: 110px;

left: -100px;

}

构建编程逻辑

首先是如何获得随机颜色  在html中颜色可以使用三种方法表示: 直接使用颜色名称 如“red” "black" 

使用RGB(255,255,255)表示 , 使用十六进制颜色表示 如:#ffffff

本次练习就用十六进制颜色。

首先 Math.random() 函数可以得到一个0~1之间的一个随机数,但是它是一个浮点数,也就是可能得到0.8778这种有小数的数字。使用Math.floor可以得到一个最接近浮点数的整数,用上面两种函数可以得到随机整数

Math.floor(Math.random())

用得到的随机整数乘以0xffffff得到十六进制数字,使用toString(16)转为十六进制字符串

所以得到随机十六进制的颜色的代码为

 Math.floor(Math.random()*0xffffff).toString(16);赋值给变量col

var col = Math.floor(Math.random()*0xffffff).toString(16);

因为九宫格的默认颜色是白色,所以要防止随机颜色为白色(#ffffff),使用if语句可以做到

if   (col != #ffffff)  {

return col } else{

bg1()   //重新随机

}

其中 bg1()函数就是产生随机颜色的函数名

function bg1() {

var col ='#'+Math.floor(Math.random()*0xffffff).toString(16);

if (col == "#ffffff") {

bg1();

}

else {

return col

}

};

然后需要在九个块中随机抽取三个不同的块,改变他们的背景色为随机色,使用setTimeout()函数进行递归,实现自动抽取,直到手动暂停。

HTML中<body>标签内容如下


<body>内容

给九个li标签赋予不同的ID属性“1”~“8”,这样就可以使用随机函数抓取不同ID属性的li标签

var mub1 = Math.floor(Math.random()*9);    

var mub2 = Math.floor(Math.random()*9);

var mub3 = Math.floor(Math.random()*9);    

生成三个随机范围在0~9之间的随机变量 mub1, mub2 ,mub3

必须要保证这三个随机函数不相等,这样才能抓取三个随机的块

使用if,else语句过递归过滤不满足条件的随机数,然后再使生成的mub1,2,3作为ID值,各赋予之前完成的随机颜色函数,把之前得到随机数代码一起封装为函数 gc();

document.getElementById("sta").onclick = function gc(){

var mub1 = Math.floor(Math.random()*9);

var mub2 = Math.floor(Math.random()*9);

var mub3 = Math.floor(Math.random()*9);

if (mub1 != mub2&&mub2 !=mub3&&mub1 !=mub3) {

document.getElementById(mub1).style.backgroundColor = bg1();

document.getElementById(mub2).style.backgroundColor = bg1();

document.getElementById(mub3).style.backgroundColor = bg1();

}

else{

gc();

}

这样的函数是不完整的,这样点击开始按钮只执行一次抓取与上色,需要使用setTimeout()设置时间间隔进行递归,达到自动抓取与上色的目的sto = setTimeout(function(){gc()},1001)

sto = setTimeout(function(){gc()},1001);

cle = setTimeout(function(){cm()},1000);

设置时间间隔循环函数语法为:setTimeout(code,millisec) , code为必填项,为要执行的javascript代码,millisec必填项,单位为毫秒,指在多少毫秒后执行code语句。

不能直接设置setTimeout(gc(),1000),这样设置会导致浏览器报错gc()函数未定义defind

因为setTimeout函数作用域是window.而 gc()函数不是全局函数,所以找不到gc()函数,所以要

这样设置: setTimeout(funtion(){gc()},1000);

同时每次抓取三个块上色完成后,在第二次抓取之前,需要将之前的颜色清除为白色,所以需要一个设置所有li标签背景色为白色的函数cm();

function cm() {

var li = document.getElementsByTagName("li")     //抓取所有“li"标签,赋值数组li

var i = 0 ;

for (var i = 0; i < li.length; i++) {                                      //历遍所有li标签,改变backgroundColor

li[i].style.backgroundColor = "#ffffff"

};

};

为STOP按钮设置清除setTimeout函数clearTimeout()

document.getElementById("stop").onclick =function stopMot() {

clearTimeout(sto);

clearTimeout(cle);};

}

以上,基本已经完成了要求效果。

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

推荐阅读更多精彩内容

  • 第1章 认识JS JavaScript能做什么?1.增强页面动态效果(如:下拉菜单、图片轮播、信息滚动等)2.实现...
    mo默22阅读 1,270评论 0 5
  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 2,769评论 0 8
  • FreeCodeCamp - Basic JavaScript 写在前面: 我曾经在进谷前刷过这一套题,不过当时只...
    付林恒阅读 16,440评论 5 28
  • 一、需求 仿微信短视频录制,点击拍照,长按录视频 二、实现代码 1、RecordVideoActivity 2、r...
    CnPeng阅读 5,197评论 2 6
  • 这句话是我在奇葩说第18期听刘楠讲到的。 仿佛看穿了一切,预示着我们大多数的人生,终究只能平凡的度过,虽然我们也曾...
    铁妞儿阅读 1,782评论 0 2