新手求指教 关于倒计时时钟中的parseInt()

sinat_36331902 2017-02-16 12:06:23
问题:
js代码中的
var oRemain = aSpan[0].innerHTML.replace(/^0/,'') * 60 + parseInt(aSpan[1].innerHTML.replace(/^0/,''));
我理解是 var oRemain 存储的是余下的所有秒数之和 replace()是将之前format()中的第一个字符0去掉 便于计算 且第一个span由于是分钟所以要*60 换算成秒 但是第二个不明白为什么要用parseInt 去掉之后第一个span就会以*100显示数字 ?
求解 谢谢!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>倒计时时钟</title>
<style>
body,div{margin:0;padding:0;}
body{color:#fff;font:16px/1.5 \5fae\8f6f\96c5\9ed1;}
#countdown{width:300px;text-align:center;background:#1a1a1a;margin:10px auto;padding:20px 0;}
input{border:0;width:283px;height:50px;cursor:pointer;margin-top:20px;background:url(img/btn-1.png) no-repeat;}
input.cancel{background-position:0 -50px;}
span{color:#000;width:80px;line-height:2;background:#fbfbfb;border:2px solid #b4b4b4;margin:0 10px;padding:0 10px;}
</style>
<script>
window.onload = function ()
{
var oCountDown = document.getElementById("countdown");
var aInput = oCountDown.getElementsByTagName("input")[0];
var timer = null;

aInput.onclick = function ()
{
this.className == "" ? (timer = setInterval(updateTime, 1000), updateTime()) : (clearInterval(timer));
this.className = this.className == '' ? "cancel" : '';
};

function format(a)
{
return a.toString().replace(/^(\d)$/,'0$1')//其实是给2位数以下的数字之前补0
}

function updateTime ()
{
var aSpan = oCountDown.getElementsByTagName("span");
var oRemain = aSpan[0].innerHTML.replace(/^0/,'') * 60 + parseInt(aSpan[1].innerHTML.replace(/^0/,''));
if(oRemain <= 0)
{
clearInterval(timer);
return
}
oRemain--;
aSpan[0].innerHTML = format(parseInt(oRemain / 60));
oRemain %= 60;
aSpan[1].innerHTML = format(parseInt(oRemain));
}
}
</script>
</head>
<body>
<div id="countdown">
<span>01</span>分钟<span>40</span>秒
<input type="button" value="" />
</div>
</body>
</html>
...全文
180 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_36331902 2017-02-17
  • 打赏
  • 举报
回复
引用 3 楼 wuqinfei_cs 的回复:
参考:《JavaScript权威指南(第6版)》第3.8节 类型转换

"2" + 3; //=> "23"
"2" * 3;  //=> 6
使用算数运算符时,会自动将操作数转化为数字类型; 但 “+” 不仅可以作为算数运算符,还可以作为字符串连接符, 作为字符串连接符时,会自动将操作数转化为字符串, 当操作数中有字符串时,其为 字符串连接符。
抱歉。。明白了 第一个span因为*60 所以得到的是数字 第二个由于还是字符串所以要用parseInt解析 oRamain是所得的总秒数
sinat_36331902 2017-02-17
  • 打赏
  • 举报
回复
引用 3 楼 wuqinfei_cs 的回复:
参考:《JavaScript权威指南(第6版)》第3.8节 类型转换

"2" + 3; //=> "23"
"2" * 3;  //=> 6
使用算数运算符时,会自动将操作数转化为数字类型; 但 “+” 不仅可以作为算数运算符,还可以作为字符串连接符, 作为字符串连接符时,会自动将操作数转化为字符串, 当操作数中有字符串时,其为 字符串连接符。
多谢回复 ! parseInt() 函数可解析一个字符串,并返回一个整数。 当操作数中有字符串时,其为 字符串连接符。 那么 var oRemain = aSpan[0].innerHTML.replace(/^0/,'') * 60 + parseInt(aSpan[1].innerHTML.replace(/^0/,'')); 中 为什么第一个没有用parseInt解析? 我试了下 两者都用parseInt()解析后 仍可以正常显示 那么此时 变量 oRemain是否是 数字类型+数字类型 即总秒数? 如果 只解析了第二个span 则 oRemain是 字符串+数字? 为什么第二个span必须要被解析为数字 这和之后的js代码有什么联系 ? 求解!谢谢
二月十六 2017-02-16
  • 打赏
  • 举报
回复
把它当做数据来处理,而不是相加之和形成一个字符串本来20+30=50,变成20+30=2030
forwardNow 2017-02-16
  • 打赏
  • 举报
回复
参考:《JavaScript权威指南(第6版)》第3.8节 类型转换

"2" + 3; //=> "23"
"2" * 3;  //=> 6
使用算数运算符时,会自动将操作数转化为数字类型; 但 “+” 不仅可以作为算数运算符,还可以作为字符串连接符, 作为字符串连接符时,会自动将操作数转化为字符串, 当操作数中有字符串时,其为 字符串连接符。

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧