【问题标题】:Click frequency calculation点击频率计算
【发布时间】:2014-12-17 04:20:55
【问题描述】:

我正在尝试提出一种计算动作频率的方法,更具体地说,是鼠标点击。

这就是我的想法(我不是最好的数学或解释,但我会尝试)。

我希望用户能够达到每秒 10 次点击的平均点击频率,并且我想知道每十分之一秒达到该目标的百分比。我快到了...我想但是因为我将鼠标点击次数设置回 0,所以频率会直接下降而不是逐渐下降...

这是我现在的位置,但我目前还不清楚:-)

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

【问题讨论】:

    标签: javascript frequency


    【解决方案1】:

    我正在以一种稍微不同的方式考虑这个问题——您可以存储单击鼠标时的时间戳,然后根据您存储的时间戳进行计算。

    下面的可运行示例:

    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;
    });
    <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.

    【讨论】:

    • !!你是怎么让它可以运行的!我理解上述内容,但它并没有给我想要的结果..让我看看我能不能把它弄清楚一点。
    • @LukeSnowden blog.stackoverflow.com/2014/09/…。也让我知道您想要的结果,也许我可以进一步帮助您。我只是让它计算了过去 1 秒内最多的点击次数。
    • 对,将它添加到我的答案中,运行它,尽可能多地点击,这几乎就是我所追求的,但我知道它在数学上是不正确的
    • 我想我终于明白你在找什么了。更新了我的答案。
    • 这正是我想要的。稍后会查看这个,看看我哪里出错了。干杯队友
    【解决方案2】:

    是的,我不确定这个的数学,但我想我已经设法在这里达到预期的效果:

    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);
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    
    <div id="result"></div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 2016-05-20
      • 2012-10-24
      • 2021-03-09
      • 1970-01-01
      相关资源
      最近更新 更多