我编写了这段代码,让用户每次感受到心跳时都会点击鼠标按钮。然后,它将计算第一次和最后一次点击之间的时间,并且如果此步伐继续,它将计算您的BPM。
我想补充的是,它会将大约10个BPM数据(点击)放入一个数组中,然后点击10次后,将根据10个BPM数据计算您的平均心率,它会告诉您这是健康与否。我知道这听起来很简单,但我是javascript的新手,我觉得通过制作这么小的应用程序来学习这门语言真的太棒了,没有更好的学习方法!
如果有人能指出我正确的方向,那就太棒了。
这是我到目前为止所拥有的:
pg_restore
答案 0 :(得分:1)
因此,我修复了代码的某些部分,包括为您实时计算平均值的方法。
检查这个小提琴,看看这是不是你要找的东西!
http://jsfiddle.net/q85awqsp/2/
主要的是创建var beats = []
,然后使用beats.push(Math.floor(bpm))
添加值;
这里有完整的JS:
var lastTapSeconds = 0;
var bpm = 0;
var beats = [];
var average = 0;
var count = 0;
var tapDiv = document.getElementById("tapDiv");
$(document).on('click', function() {
var tapSeconds = new Date().getTime();
bpm = ((1 / ((tapSeconds - lastTapSeconds) / 1000)) * 60);
lastTapSeconds = tapSeconds;
tapDiv.innerHTML = '<h1 style="display:inline;">' + Math.floor(bpm) + '</h1>';
beats.push(Math.floor(bpm));
average *= count;
average += Math.floor(bpm);
count++;
average /= count;
if(beats.length >= 10) {
alert("Average " + average);
}
});
答案 1 :(得分:0)
使用Rxjs Observables很容易:
import { fromEvent } from 'rxjs';
import { bufferCount, map, pluck, timeInterval } from 'rxjs/operators';
const btn = document.getElementById("btn"); // get button
fromEvent(btn, 'click').pipe(
timeInterval(), // get interval between clicks in ms
pluck('interval'), // strips the inverval property
bufferCount(10,1), // buffers last 10 values and return a array of them
map(arr => arr.reduce((a, b) => a + b, 0) / arr.length), // get avarage of the array
map(ms => Math.round(60000 / ms)), // calculate bpm
).subscribe(bpm => console.log(bpm + ' bpm'));
使用bufferCount,您需要单击10次,直到结果显示在控制台上。 如果要在开始单击时显示正确的bpm,然后继续获取最近10个值的平均值,则将bufferCount行替换为:
.scan((acc, curr) => {
acc.push(curr);
if (acc.length > 10) {
acc.shift();
}
return acc;
}, []),