0

jQuery Knob を使用して時計を作成しようとしています。私の時計は動作しています ( http://jsfiddle.net/Misiu/9Whck/1/ ) が、現在、いくつかの機能を追加しようとしています。
最初はすべてのノブを 0 に設定し、次にanimateそれらの値を現在の時刻にアニメーション化してから、通常のタイマー更新を開始します。

私のコードは次のようになります (デモはこちら: http://jsfiddle.net/Misiu/cvQED/81/ ):

$.when(
$('.h').animate({
    value: h
}, {
    duration: 1000,
    easing: 'swing',
    progress: function () {
        $(this).val(Math.round(this.value)).trigger('change');
    }
}),
$('.m').animate({
    value: m
}, {
    duration: 1000,
    easing: 'swing',
    progress: function () {
        $(this).val(Math.round(this.value)).trigger('change');
    }
}),
$('.s').animate({
    value: s
}, {
    duration: 1000,
    easing: 'swing',
    progress: function () {
        $(this).val(Math.round(this.value)).trigger('change');
    }
})).then(function () {
    myDelay();
});

function myDelay() {
    var d = new Date(),
        s = d.getSeconds(),
        m = d.getMinutes(),
        h = d.getHours();
    $('.h').val(h).trigger("change");
    $('.m').val(m).trigger("change");
    $('.s').val(s).trigger("change");
    setTimeout(myDelay, 1000)
}

whenノブごとに個別にアニメーションを呼び出す必要がありますが、内部でアニメーションを 1 つだけ使用したい場合data-targetValueがあります。

これはできますか?

4

1 に答える 1

6

data-targetValue を使用する場合は、js を次のように変更する必要があります

$('.h').data('targetValue', h);//$('.h').attr('targetValue', h);
$('.m').data('targetValue', m);
$('.s').data('targetValue', s);    
//...    
$.when(
$('.knob').each(function(){//each .knob
    $(this).animate({//animate to data targetValue
        value: $(this).data('targetValue')
    }, {
        duration: 1000,
        easing: 'swing',
        progress: function () {
            $(this).val(Math.round(this.value)).trigger('change')
        }
    });
})
).then(function () {
    myDelay();
});    

http://jsfiddle.net/cvQED/83/
または .each なし

$.when(
$('.knob').animate({
    value: 100
}, {
    duration: 1000,
    easing: 'swing',
    progress: function () {
        $(this).val(Math.round(this.value/100*$(this).data('targetValue'))).trigger('change')
    }
})
).then(function () {
    myDelay();
});    

http://jsfiddle.net/cvQED/84/

于 2013-11-14T21:46:41.460 に答える