首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >点击频率计算

点击频率计算
EN

Stack Overflow用户
提问于 2014-10-21 19:58:42
回答 2查看 2K关注 0票数 2

我试图想出一种方法来计算一个动作的频率,更确切地说,鼠标点击。

这是我脑子里的东西(我不是最好的数学或解释,但我会尝试)。

我希望用户能够达到10次/秒的平均点击频率,我想知道这个目标的百分比是在1/10秒内达到的。我就快到了。我想,但因为我把鼠标点击量降到0,所以频率直接下降,而不是逐渐下降。

这就是我现在所处的位置,但我目前还没有想清楚:-)

代码语言:javascript
复制
var frequency = function( maxFrequency, milliseconds, callback ) {
    var mouseDown = 0;
    var loopCount = 1;
    var frequentTap = new taps( $(window), 'frequency', function() {
        mouseDown++;
    });
    var loop = setInterval( function() {
        callback( mouseDown / ( maxFrequency ) );
        if( loopCount % 10 === 0 ) mouseDown = 0;
        loopCount++;
    }, milliseconds );
    this.stop = function(){
        clearInterval( loop );
    }
};

frequency( 10, 100, function( freq ) {
    console.log(freq);
});

不要担心选项卡函数,只要假设它跟踪点击。

任何帮助都是非常感谢的

问候

编辑:

创建一个插件,如果有人需要的话:http://luke.sno.wden.co.uk/v8

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-21 21:52:13

我是以一种稍微不同的方式思考这个问题的--你可以存储鼠标点击的时间戳,然后根据你存储的时间戳进行计算。

下面是可运行的示例:

代码语言:javascript
复制
var frequency = function(maxFrequency, milliseconds, updateFrequency, callback ) {
  var timeTotal = 0;
  var clickTimes = [];
  var numberOfMilliseconds = milliseconds;

  document.addEventListener("click", function() {
    var currentTime = (new Date()).getTime(); //get time in ms

    //add the current time to the array and the counter
    timeTotal += currentTime;
    clickTimes.push(currentTime);
  });

  setInterval(function() {
    var currentTime = (new Date()).getTime(); //get time in ms

    //remove any items that occurred more than milliseconds limit ago
    while(clickTimes.length && (currentTime - clickTimes[0] > milliseconds)) {
      timeTotal -= clickTimes.shift();
    }

    if (clickTimes.length > 0) {
      numberOfMilliseconds = clickTimes[clickTimes.length - 1] - clickTimes[0];
    } else {
      numberOfMilliseconds = milliseconds;
    }

    callback(numberOfMilliseconds, clickTimes.length, (clickTimes.length * 100 / maxFrequency).toFixed(0)); 
  }, updateFrequency);
};

frequency(10, 1000, 100, function(milliseconds, numberOfClicks, targetPercentage) {
  document.getElementById("numberOfMilliseconds").innerHTML = milliseconds;
  document.getElementById("numberOfClicks").innerHTML = numberOfClicks;
  document.getElementById("targetPercentage").innerHTML = targetPercentage;
});
代码语言:javascript
复制
<h1>Click anywhere in the document</h1>
You've clicked <span id="numberOfClicks">0</span> times in the past <span id="numberOfMilliseconds">0</span> milliseconds<br/>
This is <span id="targetPercentage">0</span>% of your target.

票数 3
EN

Stack Overflow用户

发布于 2014-10-21 20:44:12

对,我不确定这个数学,但我想我已经达到了预期的效果:

代码语言:javascript
复制
var frequency = function(actionTarget, milliseconds, callback) {
  var mouseDown = 0;
  $(window).click(function() {
    if (mouseDown < actionTarget) mouseDown++;
  });
  var loop = setInterval(function() {
    callback(mouseDown / (actionTarget));
    mouseDown -= (1 - (actionTarget / milliseconds));
    if (mouseDown < 0) mouseDown = 0;
  }, milliseconds);
  this.stop = function() {
    clearInterval(loop);
  }
};


jQuery(document).ready(function($) {
  frequency(10, 100, function(freq) {
    document.getElementById("result").innerHTML = Number(freq).toFixed(2);
  });
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>

<div id="result"></div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26495225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档