发表于: 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,只是这里没有做,偷了个懒,这里随机重复时是不会重新随机的,这里不是一次获取三个不同的随机数,只是随机三次,这个留待日后重构再做。
明天完成:
任务二的式样应该很快就能完成,然后重点就是获取输入值,这个应该不难,难得是通过获取的输入值来显示不同数目的玩家,这个还没想好怎么做。
评论