这是一个简单的益智游戏,使用html 5拖放将移动范围移动到正确的位置。计时器在第一次拖动时启动(功能拖动(e)),并在保留区域中没有剩余空间时停止(未显示)。
(旁边的问题:有没有一种标准的方法来美化我想要的(m)m:ss定时器输出,还是我必须像我一样继续?)
为什么timer()函数在chrome和firefox中完美运行,但是在8秒内Opera重置了几秒?如果我不尝试美化秒并使用注释掉的线代替它,那就完美了。
祝你好运!
var timerOn = false;
function drag(e) {
if (timerOn == false) {
timerOn = window.setInterval(function(){ timer() }, 1000);
}
...
}
function timer() {
var content = document.getElementById("timer").textContent.split(":");
if (parseInt(content[1]) == 59) {
content[0] = (parseInt(content[0]) + 1).toString();
content[1] = "00";
}
else {
var s = parseInt(content[1]) + 1;
content[1] = (s < 10 ? "0" : "") + s.toString();
//~ content[1] = s.toString();
}
document.getElementById("timer").textContent = content[0] + ":" + content[1];
}
....
<span id="timer">0:00</span>
答案 0 :(得分:1)
因为某些浏览器会扩展JavaScript的parseInt
以将前缀0
视为“八进制”,而08
是一个无效的八进制数。
在你使用parseInt
的各个地方,给它第二个参数( radix - 例如,数字基数 - 要使用),例如parseInt(str, 10)
。 (由于这个原因,这一般是一个好主意。)
我很惊讶您仍然在最新的浏览器中发现这种行为,因为三年半前发布的ECMAScript5规范明确禁止以这种方式扩展parseInt
,在Annex E - Additions and Changes in the 5th Edition that Introduce Incompatibilities with the 3rd Edition中注明:
15.1.2.2:函数
parseInt
的规范不再允许实现将以0
字符开头的字符串视为八进制值。
...我认为§B.1.1 - Additional Syntax - Numeric Literals不适用于parseInt
。