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

編集:私はあなたの関数が2つのパラメーターを持っていることに気づいていませんでした...それは全体をもう少し洗練されたものにします。minとmaxを関数にハードコードするか(関数はプラグインからのコードによって呼び出され、引数を取得しないため)、または2つのパラメーターを提供する別の無名関数をラップすることができます。

最終編集:このプラグインを使用していると思いますhttps://github.com/harvesthq/tick?このプラグインは、ティックごとに呼び出され、ティッカーの現在の値で渡される関数を受け入れることができます。新しい値を提供する必要があります。それに応じてコードスニペットを更新しました。

于 2012-09-18T18:06:05.480 に答える