js实现翻牌小游戏


Posted in Javascript onJuly 31, 2020

本文实例为大家分享了js实现翻牌小游戏的具体代码,供大家参考,具体内容如下

效果图

js实现翻牌小游戏

需求分析

1、生成两组顺序随机的1-8数据
2、卡片需要有翻转效果
3、两次翻转数据不相等,回复原状
4、两次翻转数据相等,卡片相等,不能再被点击
5、当所有卡片不能被点击游戏结束
6、限制最大点击次数50次

HTML结构

<div class="wrap">
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
 <div>
  <p class="top"></p>
  <p class="bottom"></p>
 </div>
</div>

css布局

实现卡片翻转效果需要3个关键属性

1.perspective: 1000px; 透视深度,形成3d视角
2.transform: rotateY(180deg);旋转
3.backface-visibility: hidden; 元素背面不可见

* {
  margin: 0;
  padding: 0;
 }

 body,
 html {
  height: 100%;
 }

 .wrap {
  perspective: 1000px;
  width: 320px;
  height: 320px;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
  display: flex;
  justify-content: center;
  text-align: center;
  flex-wrap: wrap;
 }

 .wrap div {
  /* box-shadow: 5px 5px 10px #000; */
  transition: 1s;
  position: relative;
  text-align: center;
  line-height: 60px;
  height: 60px;
  width: 60px;
  border-radius: 10px;

  margin: 10px 10px;
 }

 .wrap div .active1 {
  transform: rotateY(180deg);
 }

 .wrap div .active2 {
  transform: rotateY(360deg);
 }

 .wrap p {
  border-radius: 10px;
  background-color: blueviolet;
  transition: 1s;
  backface-visibility: hidden;
  display: block;
  height: 60px;
  width: 60px;
  position: absolute;
  /* transform: rotateY(180deg); */
 }

 .wrap .bottom {
  transform: rotateY(180deg);
 }
 h3{
  text-align: center;
  width: 200px;
  height: 30px;
  margin: 150px auto;
 }

js

class Game {
  constructor(selector) {
  this.init(selector);
  }
  init(selector) {
  let arr = this.randomArr();
  this.nodes = [...document.querySelectorAll(selector)];//获取每一个卡片
  this.step = 50;//定义可以被点击的次数
  this.tit = document.querySelector("h3");
  this.nodes.forEach((item,index) => {//初始化卡片的值,并保存在num属性中
   item.children[1].innerHTML = arr[index];
   item.num = arr[index];
   var that = this
   item.onclick = function () {//给每一个卡片绑定事件
   that.handle(this);
   }
  })
  }
  handle(ele) {
  if(this.step === 0){
   alert('游戏结束')
   return
  }
  if(ele.active !== true){
   this.step--;
   this.tit.innerText = `剩余步数:${this.step}`
  }
  ele.children[0].classList.add('active1');//卡片翻转
  ele.children[1].classList.add('active2'); 
  let res = this.nodes.filter(item => item.children[0].classList.contains('active1')&& item.active !== true); //获取翻过来的且没有配对成功的卡片
  if(res.length === 2 && res[0].num !== res[1].num){//如果有两张并且数值不相等,恢复原状 
   setTimeout(()=>{
   res[0].children[0].classList.remove('active1');
   res[0].children[1].classList.remove('active2');
   res[1].children[0].classList.remove('active1');
   res[1].children[1].classList.remove('active2'); 
   },1000)//延迟一秒形成动画 
  }else if(res.length === 2 && res[0].num === res[1].num){//如果数值相等则配对成功
   res[0].active = true;//锁定卡片
   res[1].active = true;
  }
  }
  randomArr() {
  let arr = [];
  for (let i = 0, n = 8; i < n; i++) {
   do {
   var item = randomInt(1, 8);
   } while (arr.indexOf(item) !== -1)
   arr.push(item);
  }
  arr.push(...arr);
  return arr;
  }
 }
 new Game('.wrap div')
 function randomInt(min, max) {//产生[min,max]范围内的整数
 return Math.round(Math.random() * (max - min)) + min
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个多次搜索+多次传值的解决方案
Jan 20 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
Nov 11 Javascript
jquery中EasyUI使用技巧小结
Feb 10 Javascript
jquery实现清新实用的网页菜单效果
Aug 28 Javascript
jquery彩色投票进度条简单实例演示
Jul 23 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
Aug 07 Javascript
关于vue单文件中引用路径的处理方法
Jan 08 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
Nov 01 Javascript
jQuery中each和js中forEach的区别分析
Feb 27 jQuery
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
Apr 14 Javascript
uniapp电商小程序实现订单30分钟倒计时
Nov 01 Javascript
Vue 请求传公共参数的操作
Jul 31 #Javascript
vue2.0 解决抽取公用js的问题
Jul 31 #Javascript
vue实现公共方法抽离
Jul 31 #Javascript
js实现无缝轮播图插件封装
Jul 31 #Javascript
原生js滑动轮播封装
Jul 31 #Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
Jul 31 #Javascript
jquery轮播图插件使用方法详解
Jul 31 #jQuery
You might like
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
php实现URL加密解密的方法
2016/11/17 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
用python读取xlsx文件
2020/12/17 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
后勤园长自我鉴定
2013/10/17 职场文书
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
优秀村官事迹材料
2014/01/10 职场文书
三年级音乐教学反思
2014/01/28 职场文书
2014全国两会心得体会
2014/03/17 职场文书
消防志愿者活动方案
2014/08/23 职场文书
中班下学期个人总结
2015/02/12 职场文书
素质拓展训练感想
2015/08/07 职场文书
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
Go语言入门exec的基本使用
2022/05/20 Golang