欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

效果圖

需求分析

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

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

1.perspective: 1000px; 透視深度,形成3d視角
2.transform: rotateY(180deg);旋轉(zhuǎn)
3.backface-visibility: hidden; 元素背面不可見(jiàn)

* {
  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)];//獲取每一個(gè)卡片
  this.step = 50;//定義可以被點(diǎn)擊的次數(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 () {//給每一個(gè)卡片綁定事件
   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); //獲取翻過(guò)來(lái)的且沒(méi)有配對(duì)成功的卡片
  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)//延遲一秒形成動(dòng)畫(huà) 
  }else if(res.length === 2 && res[0].num === res[1].num){//如果數(shù)值相等則配對(duì)成功
   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
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)獲取手機(jī)號(hào)60s倒計(jì)時(shí)

    微信小程序?qū)崿F(xiàn)獲取手機(jī)號(hào)60s倒計(jì)時(shí)

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

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

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

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

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

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

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

    javascript獲取select值的方法分析

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

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

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

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

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

    JS移動(dòng)端/H5同時(shí)選擇多張圖片上傳并使用canvas壓縮圖片

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

    微信小程序分包的超詳細(xì)步驟

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

    JS運(yùn)動(dòng)改變單物體透明度的方法分析

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

最新評(píng)論