读心术训练

259 阅读2分钟

读心术样式图

image.png 规律:从10到99的两位数减去个位和十位相加都为9的倍数

初始化

1.定义三个变量和随机数函数

//定义游戏是否结束
var isGameOver=false;
//定义最大引用图片下标
var maxImgindex=15//定义九的倍数背景图的下标
var resultNumber=null
function creatRandom(min,max){
  return Math.floor(Math.random()*(max-min+1)+min)
}

2.初始化的方法 function init()

  • 首先观察右侧示意图图片次数为100个,所以写一个for循环判断次数是否为9的倍数。
  • 定义当前图片下标索引变量为nowIndex,将resultNumber赋值为0-15的随机数
var nowIndex=null;
resultNumber=creatRandom(0,maxIndex)
  • 如果当前的次数是9的倍数,那么nowIndex等于resultNumber
  • 不是的话,nowIndex等于0-15的随机数
  • 填充右侧区域的数字和图片
  rightImg.innerHTML += 
       `<div>
        <span class="number">${i}</span>
        <span>
        <img  class='randomImg' src="./images/values/${nowIndex}.png">
        </span>
        </div>`

交互

注册点击事件

  • 魔法盘点击后,判断游戏是否结束

游戏结束

  • 询问玩家是否还要玩一次
  • 如果继续玩,初始化右侧显示区域,设置游戏状态为未结束;
  • 结果图片透明度为0,魔盘中心图片透明度为1;
  • 设置触发对象的过渡和旋转为空;
  • 解除魔盘监听旋转事件;
ifwindow.confirm('是否再玩一次')){
   isGameOver=false;
   init();
    valueImg.style.opacity = '0'
    centerImg.style.opacity = '1';
   e.currentTarget.setAttribute('style','')
   leftArea.removeEventListener('transitionend', transitionendHandle);

游戏未结束

  • 补充 target和currentTarget的不同 target在事件流的目标阶段;

currentTarget在事件流的捕获,目标及冒泡阶段。只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,

target指向被单击的对象

currentTarget指向当前事件活动的对象(一般为父级)。

给图片元素增加过渡动画和旋转属性;并且监听旋转结束

  e.currentTarget.style.transition = 'all 2s'
  e.currentTarget.style.transform = 'rotate(1800deg)'
  leftArea.addEventListener('transitionend',transitionendHandle);//过渡后的处理

transitionendHandle方法

  • 当旋转结束后,设置游戏状态为结束;
  • 魔法中心图片透明度为0;
  • 设置结果图片的路径,路径里图片的索引为resultIndex;
  • 结果图片的透明度为1
function transitionendHandle(){
   isGameOver=true;
   centerImg.style.opacity='0';
   valueImg.src=`images/values/${resultNumber}.png`
   valueImg.style.opacity='1'
}