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 相关文章推荐
javaScript checkbox 全选/反选及批量删除
Apr 28 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
Mar 01 Javascript
用按钮控制iframe显示的网页实现方法
Feb 04 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
Nov 07 Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 Javascript
浅析ES6的八进制与二进制整数字面量
Aug 30 Javascript
JavaScript表单验证开发
Nov 23 Javascript
基于jQuery实现照片墙自动播放特效
Jan 12 Javascript
JS函数内部属性之arguments和this实例解析
Oct 07 Javascript
javascript用defineProperty实现简单的双向绑定方法
Apr 03 Javascript
在Vue中使用HOC模式的实现
Aug 23 Javascript
vue使用echarts实现水平柱形图实例
Sep 09 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
php获取淘宝分类id示例
2014/01/16 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
对python中dict和json的区别详解
2018/12/18 Python
Python变量类型知识点总结
2019/02/18 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
python tkinter基本属性详解
2019/09/16 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
django 模版关闭转义方式
2020/05/14 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
2014年会演讲稿范文
2014/01/06 职场文书
个人近期表现材料
2014/02/11 职场文书
2015年团支部工作总结
2015/04/03 职场文书
股东大会通知
2015/04/24 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang