我正在学习javascript,同时尝试创建一个简单的脚本,允许您使用键盘在Web浏览器上键入外语。
因此,当您键入a
时,会有一个字母映射到a,因此会出现单个字符Դ
,但会出现厄
这样的字符,你必须输入两次,因为这种语言的字符多于英文字母。
所以,问题在于最后一个角色。通常情况下,我必须在一秒的范围内连续输入g
和h
以生成厄
字母,但我在等待检查是否有问题为了显示那个字母,在两个字符内输入了两个字符。
所以,我不认为时间间隔功能是解决这个问题的方法,但我也看不到任何其他方法。
答案 0 :(得分:1)
就像Alex提到的那样,对于每次按下,只需将new Date().getTime();
存储在变量中,这将为您提供最新的UTC时间。 UTC时间以毫秒为单位,因此在下一次按键时,只需查看当前时间和存储时间是否相差1000!
答案 1 :(得分:1)
以下是测量任意2个事件之间经过时间的示例代码。
我添加了setTimeout
只是为了给你一个例子。
var startTime = Date.now();
setTimeout(function(){
var elapsedTime = Date.now() - startTime;
console.log('elapsedTime ='+elapsedTime);
}, 100);
答案 2 :(得分:1)
警告:检查键是否在keydown()&通知keydown密钥在keypress();
中被提升
var start = null;
$('#in').keydown(function (e) {
if (!start) {//checking is a new user input
start = $.now();
}
}).keyup(function (e) {
var timeElapsed = $.now() - start;
start = null;//start the next timing tracking
console.log(['time elapsed:', timeElapsed, 'ms'].join(' '));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>
<h2>please input some letter to test</h2>
<input id="in"/>
</label>
答案 3 :(得分:1)
关于你的问题的另一个答案,也许这是你真正的答案。
function duration(timestamps) {
var last = timestamps.pop();
var durations = [];
while (timestamps.length) {
durations.push(last - (last = timestamps.pop()));
}
return durations.reverse();
}
function display(mills) {
if (mills > 1000)
return (mills / 1000) + ' s';
return mills + ' ms';
}
var durations = [];
$('#in').keydown(function (e) {
durations.push($.now());
}).keyup(function (e) {
var current = durations;
current.push($.now());
durations = [];
var timeElapsed = current[current.length - 1] - current[0];
console.log([
['time elapsed:', display(timeElapsed)].join(' '),
['keys duration:', duration(current).map(display)].join(' ')
].join(' --- '));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>
<h2>Please input something to test!</h2>
<input id="in"/>
</label>
&#13;