发表于: 2017-03-26 21:34:14

1 660


今天完成的事:粗糙的写完了任务4.

在任务2-4中有大量逻辑类似的函数,在想是否可以做个封装?

之前写js时是想一段逻辑写一段,没有串联起来,在各个页面跳转安排数据时略混乱.画了流程图之后就明朗了。如果在写之前看几遍任务中的成果动图,把流程画下来,标好逻辑,写的效率会高很多。


 任务4拖拖拉拉的写了好几天,现在做个整理。抛砖引玉,其实很多地方只是实现了功能,并不是很高效。


1.首先是一开始的数据存储。我选择的是将数组中的每个元素视作一个对象,并个每个对象存储状态。(一开始用的二维数组写成了病毒,仍然没搞懂为什么。不停的生成新的二维数组)

方法很多,不局限于这一种!


var oStatus = [];
// 赋值角色,死活状态,天数.数组中每个元素都是一个对象,可以存储各种状态
oStatus[i] = {};
oStatus[i].num = i + 1;
oStatus[i].role = aTotal[i];
oStatus[i].life = "alive";
oStatus[i].deadDay=null;


2.传递数据可以用sessionStorage或localStorage。也可以用cookie。

sessionStorage在用户结束会话(即关闭浏览器或退出账户时失效);localStorage无失效期,用户在清理浏览器缓存的时候会被清除。二者除了生命周期,用法一致。


/*以下复制粘贴

*Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的

*页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。

*除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装*setCookie,getCookie。

*但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是*为了在本地“存储”数据而生

*/


在page1存储后,如果page2没有接受并传递,page3也是可以接受的。就是说这玩意不要求连续。

用法百度写的很多。用到的方法就俩。

 存值:storage.user="李秀才";

 取值:var user=storage["user"]; 

 清空:用clear()方法。

 删除某个元素:用removeItem();方法:


3.

流程框的颜色变色问题。从杀手页跳转过来时会发现“杀手杀人”这个流程框已经变灰绿。从用户体验来说应该是提示这个流程已经点过了,不用重复点击。

可以设置一个变量visited。在台本页根据visited数值决定该流程框的颜色。


4.设置变量记录天数。每过投票,天数+1。 

判断游戏结束我放在了台本页。如果达成条件则弹出confirm,确认后跳转结果页。


5.最后输出结果要有记录死亡天数。

我是在对象状态中存储了一个属性.deadDay,初始化为Null,在玩家被杀或投死的同时将当时的天数赋值给它。

在结果页输出时用两层for循环,根据天数和死亡方式输出到样式中。感觉这种方法很蠢,性能也不高。

for(j;j<=dayCount;j++)
for(k=0;k<oStatus.length;k++){
if(oStatus[k].deadDay==j && oStatus[k].life=="killed")}
}

期待其他同学更高效的写法。

明天要做的事

任务4还剩几个细节逻辑没有做,比如已死玩家仍然可以在杀人页和投票页被选择,从杀人页跳转回法官台本页后仍然可以点击杀人页跳转。准备把这些防点击加上。

修改css15的轮播图。

然后开始js任务5.


遇到的问题:容我补完坑。


收获:结果页做完的时候激动了一把,还挺开心的。整理完思路发现自己在简单的问题上停了很久,还是在知道逻辑的前提下,怎么就做这么慢呢



返回列表 返回列表
评论

    分享到