最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)不相等,回復原狀
4、兩次翻轉(zhuǎn)數(shù)據(jù)相等,卡片相等,不能再被點擊
5、當所有卡片不能被點擊游戲結束
6、限制最大點擊次數(shù)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布局

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

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('游戲結束')
   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ù)值不相等,恢復原狀 
   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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 淺析js預加載/延遲加載

    淺析js預加載/延遲加載

    本文主要介紹了js預加載和延時加載2種技術,簡單分析了他們的實現(xiàn)方式和優(yōu)缺點,非常的實用,有需要的朋友參考下
    2014-09-09
  • 可以自動輪換的頁簽 tabs with auto play fucntion

    可以自動輪換的頁簽 tabs with auto play fucntion

    HTML、CSS方面改寫了一下結構,用了一個DL javascript方面可以選擇不斷自動循環(huán),或者只循環(huán)一次的,點擊以后繼續(xù)循環(huán),或者停止循環(huán)
    2008-02-02
  • 如何為你的JS項目添加智能提示與類型檢查詳解

    如何為你的JS項目添加智能提示與類型檢查詳解

    這篇文章主要給大家介紹了關于如何為你的JS項目添加智能提示與類型檢查的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用JS具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • drag-and-drop實現(xiàn)圖片瀏覽器預覽

    drag-and-drop實現(xiàn)圖片瀏覽器預覽

    chrome的drag and drop API,它能將本地的圖片放到瀏覽器中進行預覽,猜想一下當我們把圖片拖拽到瀏覽器里會發(fā)生什么事情,你的瀏覽器試圖打開一個新的頁面并加載這個圖片。這篇文章給我們介紹drag-and-drop實現(xiàn)圖片瀏覽器預覽,需要的朋友可以參考下
    2015-08-08
  • 原JS實現(xiàn)banner圖的常用功能

    原JS實現(xiàn)banner圖的常用功能

    這篇文章主要為大家詳細介紹了原JS實現(xiàn)banner圖的常用功能,,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 解決WebStorm?2022.3.x?無法識別?Element?UI?2.15.11?新版本中的?el-xxx?標簽問題(兩種解決方案)

    解決WebStorm?2022.3.x?無法識別?Element?UI?2.15.11?新版本中的?el-

    這篇文章主要介紹了解決?WebStorm?2022.3.x?無法識別?Element?UI?2.15.11?新版本中的?el-xxx?標簽問題,本文給大家分享兩種解決方案,需要的朋友可以參考下
    2023-01-01
  • 如何在JavaScript中設置定時器

    如何在JavaScript中設置定時器

    在?JavaScript?中,設置定時器通常使用兩個內(nèi)置的函數(shù):setTimeout()?和?setInterval(),本文將結合實際項目代碼為大家講解一下如何使用它們
    2024-12-12
  • JS實現(xiàn)基數(shù)排序的示例代碼

    JS實現(xiàn)基數(shù)排序的示例代碼

    基數(shù)排序是一種根據(jù)數(shù)字位數(shù)的值,對整數(shù)進行排序的算法,本文主要介紹了JS實現(xiàn)基數(shù)排序的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • layui獲取多選框中的值方法

    layui獲取多選框中的值方法

    今天小編就為大家分享一篇layui獲取多選框中的值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 使用js畫圖之正弦曲線

    使用js畫圖之正弦曲線

    這篇文章主要介紹了使用js繪制幾何圖形的方法的系列文章,本文主要講訴正弦曲線的繪制方法,需要的朋友可以參考下
    2015-01-01

最新評論

南宁市| 东港市| 兴和县| 汝南县| 莱西市| 罗平县| 溧水县| 青州市| 定安县| 托克托县| 安义县| 崇信县| 微博| 抚顺市| 塘沽区| 界首市| 呼和浩特市| 交口县| 广河县| 桂东县| 鄂伦春自治旗| 西城区| 夹江县| 彭泽县| 通渭县| 广丰县| 彭水| 尉氏县| 响水县| 彩票| 革吉县| 格尔木市| 和硕县| 伊川县| 友谊县| 天峻县| 太保市| 衡阳县| 临沭县| 博野县| 屏东县|