js实现开关灯游戏
需求:
点击三个按钮,页面出现不同数量的“灯”
所有的灯有相同的点击效果。点击一个灯的时候,this和他的上下左右都会变成另一种背景色。
代码在这里~~~
文章地址 https://www.cnblogs.com/sandraryan/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
body {
text-align: center;
}
.wrap{
/* width: 500px; */
margin: 30px auto;
}
.wrap>div{
border-radius: 50%;
box-sizing: border-box;
/* width: 50px;
height: 50px; */
border: 1px solid pink;
background: #000;
display: inline-block;
text-align: center;
line-height: 50px;
}
button {
width: 100px;height: 50px;background-color: white;
outline: none;padding: 0 10px;border: 1px solid lightgray;
border-radius: 8px;font-size: 20px;color: gray;
}
</style>
</head>
<body>
<div class="wrap"></div>
<button id="btn1">初级</button>
<button id="btn2">中级</button>
<button id="btn3">高级</button>
<script> //获取元素
var wrap=document.getElementsByClassName("wrap")[0];
var btn1=document.getElementById("btn1");
var btn2=document.getElementById("btn2");
var btn3=document.getElementById("btn3");
var divarr=[];
//行 列
var row=5;col=6;
//小div设置宽高
var w=50 ,h=50;
function creat(){
//给外部盒子添加宽度
wrap.style.width=col * w +"px";
//循环创建100个div
for(var i=0;i<col *row;i++){
//动态创建div
var newdiv=document.createElement("div");
//给创建的小盒子设置样式
newdiv.style.width=w+"px";
newdiv.style.height=h+"px";
//给div中写数字 newdiv.innerText=i; //把创建好的div放到wrap中
wrap.appendChild(newdiv);
//把100个div放到数组里
divarr.push(newdiv);
}
}
creat();
//改变颜色函数 function changebg(s){
var bg = getComputedStyle(s).backgroundColor;
if(bg=="rgb(0, 0, 0)"){
s.style.backgroundColor="yellow";
}else{
s.style.backgroundColor="black";
}
} //封装点击事件
function clickBox(){
for(var j=0;j<divarr.length;j++){ divarr[j].onclick=function(){
//给当前元素绑定点击事件
changebg(this);
var index = divarr.indexOf(this);
if(index > (col -1)){
changebg(divarr[index-col]);
//top
}
if(index < (row -1)*col) {
changebg(divarr[index + col]);
//bottom
}
if(index % col != 0){
changebg(divarr[index-1]);
}
//left
if(index % col != 0){
changebg(divarr[index+1]);
}
//right
}
}
}
clickBox();
// 选择灯数量的函数
function resetGame(){
wrap.innerHTML = "";
// 清空页面元素
divarr = [];
// 清空数组
creat();
// 重新创建新元素
clickBox();
// 重新绑定点击事件
}
btn1.onclick = function(){
col = 3; row = 3;
resetGame();
}
btn2.onclick = function(){
col = 8; row = 8;
resetGame(); }
btn3.onclick = function(){
col = 10; row = 9;
resetGame(); }
</script>
</body>
</html>
ps 这个效果有点想windows日历选中一个时间的样子~~~
js实现开关灯游戏的更多相关文章
- JS开发HTML5游戏《神奇的六边形》(一)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- JS开发HTML5游戏《神奇的六边形》(二)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- JS开发HTML5游戏《神奇的六边形》(四)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- JS开发HTML5游戏《神奇的六边形》(三)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- JS贪吃蛇游戏
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- Vue.js实现拼图游戏
Vue.js实现拼图游戏 之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/ ...
- 使用html+css+js实现弹球游戏
使用html+css+js实现弹球游戏 效果图: 代码如下,复制即可使用: <!doctype html> <head> <style type="text/c ...
- 使用JS实现俄罗斯方块游戏
简单的JS俄罗斯方块游戏源码 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <meta charset=&q ...
- pixi.js 微信小游戏 入手
pixi是什么?一款h5游戏引擎 优点:简单简洁性能第一 缺点:大多数用的国产三大引擎,pixi资料少,工具少, 为什么学,装逼 用pixi开发小游戏行吗? 行.但要简单处理下 下载官网上的 weap ...
随机推荐
- jquery源码学习(二)——jquery中的变量
jquery在 21-93 行提供了变量 var // A central reference to the root jQuery(document) rootjQuery, // The defe ...
- mac 下的 homebrew
如果安装了macport 就不能安装homebrew ,必须先卸载macport $ sudo port -f uninstall installed$ sudo rm -rf \/opt/local ...
- HDU 1724 自适应辛普森法
//很裸的积分题,直接上模板 #include<stdio.h> #include<math.h> int aa, bb; //函数 double F(double x){ - ...
- Tiles Framework
tiles framework 详解tiles framework 详解 就是一个页面模版引擎.可以渲染页面,属于视图层. 下面给你拷贝一份详细的tiles介绍,你可以初步了解一下. Tiles框架特 ...
- Eclipse创建jsp web项目
Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.幸运的是,Eclipse 附带了一个标准的插件集,包括Java开 ...
- JavaScript--预解析在IE存在的问题
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Linux的登录和退出
Linux是一个多用户的操作系统,用户要使用该系统,首先必须登录系统,使用完系统后,必须退出系统. 本章主要讨论登录和退出系统的方法: 用户登录系统时,为了使系统能够识别自己,必须输入用户名和密码,经 ...
- fedora 安装ftp
fedora默认不安装ftp服务(包括client程序/service程序),需要进行手动安装: yum install ftp(安装client) yum install vsftpd(安装serv ...
- spring boot + mybatis 访问 neo4j
之前有通过rest的风格去访问,但是每次需要访问时候将statement一并加入header中去数据库执行,方式简单.且思路清晰,但是不便于形成模板调用,固采用mybaits来集成. 1.关键pom. ...
- Leetcode744.Find Smallest Letter Greater Than Target寻找比目标字母大的最小字母
给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母. 数组里字母的顺序是循环的.举个例子,如果目标字母target = 'z' 并且有 ...