发表于: 2017-04-14 10:29:52

2 571


今天完成的任务

1.js任务四的基本js

明天计划

2.任务四剩下的

遇到的问题

1.获取点击对象的class在整个数组中的位置

自己陷入了怪圈,一开始听师兄,用indexOf或者target,但是怎么都解决不来,后来经明月师兄指点一句。。。

发现原来那么简单的东西

代码如下

var a =document.getElementsByClassName('role-name');
var b =document.getElementsByClassName('kill');
var c =document.getElementsByClassName('role-name');
for (k=0; k<role.length; k++) {
    (function (k) {
     a[k].onclick = function (){

      for (m=0; m<role.length; m++) {           

        if (b[m].style.display !='none') {
           b[m].style.display='none';         //重置之前被点击的kill类                      }
        }
         b[k].style.display='block';
         return k;
      };
   })(k)
}

取出三个class的数组,然后我们的目标是提取出来点击获取的class的下标,一个for循环,本来是没有那个function(k)的,但是。。。。这样k只能返回最后一个,后来添加了function(k),也就是涉及到闭包。

2.localStorage

//构造的函数,role对象
function Role(name,state,date,reason) {
   this.name  =name;                   //玩家身份
   this.state =state;                  //状态,1是活着,0是死了
   this.date  =date;                   //第几天死的,初始值为0
   this.reason=reason;                 //死的方式,默认0,被杀1,投票2
}
var oRole = new Array (role.length);
for (i=0; i<role.length; i++) {
 oRole[i]=new Role(role[i],1,0,0);
}

这样一个对象,我把他存在localStorage里,一开始我是把上面这块放在了一个函数里面。

localStorage['oRole']=JSON.stringify(function());

结果发现,当我修改了里面的值,没办法把值传回去。。

这个不能用函数来传啊!!!如下就好了。。。

localStorage['oRole']=JSON.stringify(oRole);

3.关于字符串的相加

document.getElementsByClassName('btn')[n].innerHTML='第'+n+1+'天';

这个为什么得出的是把i和1当作字符串处理了,结果是01 11 21 这样的天数。。。。。

kill_info[n].innerHTML = m + 1 + '号被杀死,真实身份是' + oRole[m].name;

这样就能完美的算出来 m和1的和。。。求解。。。。

4.页面重新加载之后,之前的杀人信息和投票信息都会没掉

这个bug很莫名的被解决了,思路就是每次页面加载的时候,杀人信息和投票信息都重新加载。两个for循环

第一个,这个是加载主要的部分

for (n=0; n<day; n++) {
   var div = document.createElement('div');
   var button = document.createElement('button');
   var section = document.createElement('section');
   div.className='day-box';
   button.className='btn';
   section.className='day-info';
   section.innerHTML='<a class="kill">杀手杀人</a> <p class="kill-info"></p> <a class="ghost">死者遗    言</a>'+
       '<a class="argue">大家讨论</a> <a class="vote">投票杀人</a> <p class="vote-info"></p>';
   document.getElementsByClassName('main')[0].appendChild(div);
   document.getElementsByClassName('day-box')[n].appendChild(button);
   document.getElementsByClassName('day-box')[n].appendChild(section);
   document.getElementsByClassName('btn')[n].innerHTML='第'+n+1+'天';
}

第二个,这个是重新加载每天的杀人信息

for (n=0; n<day; n++) {
  for (m=0; m<role.length; m++) {
    if (oRole[m].date == n+1 && oRole[m].state == 0 && oRole[m].reason == 1) {
      kill_info[n].innerHTML = m + 1 + '号被杀死,真实身份是' + oRole[m].name;
           break;
       }
    }
  for (m=0; m<role.length; m++) {
    if (oRole[m].date== n+1  && oRole[m].state==0 && oRole[m].reason==2 ) {
      vote_info[n].innerHTML=m + 1 +'号被投票杀死,真实身份是'+oRole[m].name;
       }
   }
}

解决归解决,只是感觉这样的解决方式有点繁杂。有更好的思路么。。。

5.关于闭包

还没看懂!!!!还在继续看!!!

收获

以上




返回列表 返回列表
评论

    分享到