发表于: 2019-03-19 23:50:38

5 414


今日完成:

这里总结下js任务一:

js任务一表面上很简单,实际上几乎把js基础都包括进去了,修真院一直是这风格,任务一劝退系列,就跟所有语言的初始学习一样 ,一无所知,实际上我有把js的基础知识都看了一边,包括HTML dom (document object model)的一属性和方法,虽然没有记住很多,但理解了一遍,然而就在定义第一个变量的时候就卡住了,一边磕磕碰碰一边开始任务一,翻了很多错误。包括但不限于,定义函数忘记在函数名后面加上括号,引用函数的时候忘记括号,引用变量的时候多加了引号,等一系列基础错误。好在学会的东西也很多,所谓代码,就是语言,语言的定义就是反复的记住然后熟悉。梳理下任务一的知识点。

math对象:

这里用了函数嵌套的方法,在Math.ceil()里面嵌套了Math.random()

Math.ceil():ceil() 方法执行的是向上取整计算,它返回的是大于或等于函数参数,并且与之最接近的整数。

Math.random():random() 方法可返回介于 0 ~ 1 之间的一个随机数。

如上Math.random()首先随机了0~1之间的数,然后乘以9,所以随机范围变成了0~9,最后Math.ceil()向上取整,这时就变成了1~9。

var numberTen =  Math.ceil(Math.random()*9);

floor() 方法执行的是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数。

同上,下面就是随机颜色的代码了,这里+a+询问师兄,说是一个固定写法,别的地方没见过,这里有机会要考证下。

var r=Math.floor(Math.random()*256);
var g=Math.floor(Math.random()*256);
var b=Math.floor(Math.random()*256);
return "rgb("+r+','+g+','+b+")";//所有方法的拼接都可以用ES6新特性`其他字符串{$变量名}`替换

setInterval方法:(包括settimeout方法和clearInterval方法)

setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。

这里两个方法均可用于延时,区别是上者会重复执行,而下者只执行一次。

changeVar1=setInterval("changeColor()", 1000);

clearInterval() 方法可取消由 setInterval() 设置的 timeout。

clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。

clearTimeout() 方法可取消由 setTimeout() 方法设置的 timeout。

这里是用于清除上面延时,不然就会一直执行下去

clearInterval(changeVar1);

然后一个就是一个自己写的随机获取1~9号方块中间一块并改变颜色的函数:

这里引用了setInterval方法和math对象,这里面之前有个bug,在点击一次的情况下,变化速度会越来越快,

最后发现是因为函数内部局部变量未清除,这里将他们赋值为空后没再出现这个bug。看别的师兄解决方法是清除延时循环函数,这里可能是调用方法不同。

function changeColor() {
var numberTen = Math.ceil(Math.random()*9);
   var nodeId = "one" + numberTen;
   var nodeName = document.getElementById(nodeId);
   nodeName.style.background = getColot();
   numberTen = null;
   nodeId = null;
   nodeName = null;

}

function loadFooterbtn1() {
   changeVar1=setInterval("changeColor()", 1000);
   changeVar2=setInterval("changeColor()", 1000);
   changeVar3=setInterval("changeColor()", 1000);
}

一个是清除循环并恢复所有方块颜色的函数:

这里采用的for循环恢复颜色的方法,顺便清除延时循环函数。

function loadFooterbtn2() {
   clearInterval(changeVar1);
   clearInterval(changeVar2);
   clearInterval(changeVar3);
   for (i=1; i<=9 ; i++) {
   var nodeId = "one" + i;
       var nodeName = document.getElementById(nodeId);
       nodeName.style.background = '#FF9900';
   }
}

最后留下了两个bug等待日后来解决:

第一个bug是在多次点击触发onclick事件时,会随着点击不停增加同时变色方块数,而且点击清除只能清除三个,其他增加的变色数无法清除。也就是说奇怪的是,一个变量竟然能不停的给他赋值setinterval事件。

第二个也不算bug,只是这里没有做,偷了个懒,这里随机重复时是不会重新随机的,这里不是一次获取三个不同的随机数,只是随机三次,这个留待日后重构再做。

明天完成:

任务二的式样应该很快就能完成,然后重点就是获取输入值,这个应该不难,难得是通过获取的输入值来显示不同数目的玩家,这个还没想好怎么做。


返回列表 返回列表
评论

    分享到