7

音楽プレーヤーのタイムラインとして使用されるスライダーを入手しました。最小値は0で、最大値は曲の長さ(秒単位)です。毎秒(私はタイマーでこれを行います)、スライダーが移動し、値が現在の時刻に設定されます。このコード行は次のようになります。

$("#sliderTime").slider("option", "value", document.sound.controls.currentPosition);

ユーザーはスライダーをスライド/クリックして曲の別のポイントにジャンプできます。これは、関数「play(startPlayFromHere)」を起動することによって行われます。それはそのように見えます:

$("#sliderTime").slider({
   ...
  change: function (event, ui) { play(ui.value) },
});

問題は、タイマーのコード行とユーザーの両方がスライダーの同じ「変更」イベントを呼び出しており、ユーザーがスライダーを移動できないことです。

だから私の質問は、ユーザーが変更イベントを呼び出したかどうか(つまり、それがタイマーであったかどうか)をどのように判断できるかということです。

私はそれが十分に明確であることを願っています、ありがとう!

4

1 に答える 1

23

event.originalEvent変更ハンドラーでテストすることにより、変更イベントが手動で発生したのかプログラムで発生したのかを判別できます。

$('#slider').slider({
    change: function(event, ui) {
        if (event.originalEvent) {
            //manual change
            play(ui.value);
        }
        else {
            //programmatic change
        }
    }
});

フィドルを参照してください。

于 2012-04-21T03:05:20.653 に答える