1

我找到了一个不错的 jquery 增量脚本。增量部分可以接受一个函数或只是一个常规数字。我希望增加 1 到 100 之间的随机数。我将如何为此编写函数?

$( document ).ready( function()
{
  $( '.tick' ).ticker(
  {
    incremental : 1,
    delay       : 1500,
    separators  : true
  });
   $(".comma-change").html(".");  
});

<span class="tick">2,354,456</span>

因此,我不想在增量字段中增加 1,而是想编写一个用随机数更新的函数。在其他帖子的帮助下,我可以编写创建随机数的函数没问题:

function random_generator (min, max) {
    return Math.random() * (max - min) + min;
}

但我无法直接将其用于此。

这是插件的增量部分:

  Tick = (function() {

    function Tick(element, options) {
      this.element = element;
      if (options == null) options = {};
      this.running = false;
      this.options = {
        delay: options.delay || 1000,
        separators: options.separators != null ? options.separators : false,
        autostart: options.autostart != null ? options.autostart : true
      };
      this.increment = this.build_increment_callback(options.incremental);
      this.value = Number(this.element.html().replace(/[^\d.]/g, ''));
      this.separators = this.element.html().trim().split(/[\d]/i);
      this.element.addClass('tick-active');
      if (this.options.autostart) this.start();
    }

    Tick.prototype.build_increment_callback = function(option) {
      if ((option != null) && {}.toString.call(option) === '[object Function]') {
        return option;
      } else if (typeof option === 'number') {
        return function(val) {
          return val + option;
        };
      } else {
        return function(val) {
          return val + 1;
        };
      }
    };

然后这一点:

Tick.prototype.tick = function() {
  this.value = this.increment(this.value);
  this.render();
  return this.set_timer();
};
4

2 回答 2

2

您可能必须更新增量脚本的来源。但如果你幸运的话,你也许可以使用一些诡计来避免。

增量脚本可能有这样的东西:

function(options) {
    //...
    currentValue += options.incremental;
    //...
}

如果是这种情况,您可以options.incremental事后定期调整 的值,如下所示:

var opts;
$( '.tick' ).ticker(opts = {
    incremental : 1,
    delay       : 1500,
    separators  : true
});

setInterval(function () { 
    var min = 1, max = 100; //adjust min/max to suit your needs.
    opts.incremental = Math.random() * (max - min) + min;
}, 500); //any number under 1500 is probably fine

这有点小技巧,但它可能会奏效。可能比更新插件的代码更容易。如果它不起作用,您可能必须直接增强插件。

于 2012-09-18T17:52:16.263 回答
1

您需要做的就是将您的函数语句转换为函数表达式。函数语句定义名称并为其分配函数,而函数表达式是函数本身(匿名函数)。

您可以将变量的值设置为这样的函数

var random_generator = function(min, max) {
    return Math.random() * (max - min) + min;
};

然后将对该函数的引用(变量 random_generator)作为插件的增量传递。或者您可以像这样内联函数定义:

$( '.tick' ).ticker({
    incremental : function(currentValue) {
                     // currentValue really is the current value of the ticker
                     // this is because the code inside the ticker plugin, that triggers
                     // your function, will take care of passing it as a parameter in
                     return +currentValue + random_generator(1, 100);
                  },
    delay       : 1500,
    separators  : true
});

编辑:我没有意识到,你的函数有两个参数......这使得整个事情变得更加复杂。您可以将 min 和 max 硬编码到您的函数中(因为该函数被插件中的代码调用,并且您绝对不会得到任何参数),或者在它周围包装另一个匿名函数,它为我们提供了两个参数。

最终编辑:我猜你正在使用这个插件https://github.com/harvesthq/tick?该插件可以接受一个函数,该函数将在每个报价时调用并传入报价器的当前值。您必须提供新值。我相应地更新了代码片段。

于 2012-09-18T18:06:05.480 回答