亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

js實現(xiàn)翻牌小游戲

 更新時間:2020年07月31日 12:03:07   作者:evail_  
這篇文章主要為大家詳細介紹了js實現(xiàn)翻牌小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了js實現(xiàn)翻牌小游戲的具體代碼,供大家參考,具體內(nèi)容如下

效果圖

需求分析

1、生成兩組順序隨機的1-8數(shù)據(jù)
2、卡片需要有翻轉(zhuǎn)效果
3、兩次翻轉(zhuǎn)數(shù)據(jù)不相等,回復(fù)原狀
4、兩次翻轉(zhuǎn)數(shù)據(jù)相等,卡片相等,不能再被點擊
5、當所有卡片不能被點擊游戲結(jié)束
6、限制最大點擊次數(shù)50次

HTML結(jié)構(gòu)

<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布局

實現(xiàn)卡片翻轉(zhuǎn)效果需要3個關(guān)鍵屬性

1.perspective: 1000px; 透視深度,形成3d視角
2.transform: rotateY(180deg);旋轉(zhuǎn)
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;//定義可以被點擊的次數(shù)
  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('游戲結(jié)束')
   return
  }
  if(ele.active !== true){
   this.step--;
   this.tit.innerText = `剩余步數(shù):${this.step}`
  }
  ele.children[0].classList.add('active1');//卡片翻轉(zhuǎn)
  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){//如果有兩張并且數(shù)值不相等,恢復(fù)原狀 
   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){//如果數(shù)值相等則配對成功
   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) {//產(chǎn)生[min,max]范圍內(nèi)的整數(shù)
 return Math.round(Math.random() * (max - min)) + min
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)獲取手機號60s倒計時

    微信小程序?qū)崿F(xiàn)獲取手機號60s倒計時

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)獲取手機號60s倒計時,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript自定義Webpack配置實現(xiàn)流程介紹

    JavaScript自定義Webpack配置實現(xiàn)流程介紹

    本系列主要整理前端面試中需要掌握的知識點。本節(jié)介紹webpack如何優(yōu)化前端性能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-10-10
  • 微信小程序?qū)崿F(xiàn)長按刪除圖片的示例

    微信小程序?qū)崿F(xiàn)長按刪除圖片的示例

    本篇文章主要介紹了微信小程序?qū)崿F(xiàn)長按刪除圖片的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 使用3D引擎threeJS實現(xiàn)星空粒子移動效果

    使用3D引擎threeJS實現(xiàn)星空粒子移動效果

    這篇文章主要為大家詳細介紹了使用3D引擎threeJS實現(xiàn)星空粒子移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • javascript獲取select值的方法分析

    javascript獲取select值的方法分析

    這篇文章主要介紹了javascript獲取select值的方法,實例分析了javascript獲取select元素值的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • JavaScript中使用Async實現(xiàn)異步控制

    JavaScript中使用Async實現(xiàn)異步控制

    async提供了很多函數(shù)用于異步流程控制,下面是async核心的幾個函數(shù),大家通過本文學習下,對使用async 實現(xiàn)異步控制相關(guān)知識,感興趣的朋友一起看看吧
    2017-08-08
  • JS小游戲之宇宙戰(zhàn)機源碼詳解

    JS小游戲之宇宙戰(zhàn)機源碼詳解

    這篇文章主要介紹了JS小游戲之宇宙戰(zhàn)機源碼,是一款非常經(jīng)典的游戲源碼,包含了游戲設(shè)計中比較常見的邏輯處理,本文附帶了該游戲的完整源碼,需要的朋友可以參考下
    2014-09-09
  • JS移動端/H5同時選擇多張圖片上傳并使用canvas壓縮圖片

    JS移動端/H5同時選擇多張圖片上傳并使用canvas壓縮圖片

    這篇文章主要介紹了JS移動端/H5同時選擇多張圖片上傳并使用canvas壓縮圖片,需要的朋友可以參考下
    2017-06-06
  • 微信小程序分包的超詳細步驟

    微信小程序分包的超詳細步驟

    分包指的是把一個完整的小程序項目,按照需求劃分為不同的子包,在構(gòu)建時打包成不同的分包,用戶在使用時按需進行加載,下面這篇文章主要給大家介紹了關(guān)于微信小程序分包的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • JS運動改變單物體透明度的方法分析

    JS運動改變單物體透明度的方法分析

    這篇文章主要介紹了JS運動改變單物體透明度的方法,結(jié)合實例形式分析了頁面元素屬性動態(tài)修改相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01

最新評論