0

jQueryUI プログレスバーがあり、独自の JavaScript コードを使用して一連の移動を行った後、急速に前後に移動し始めます。関連する JavaScript コードは次のとおりです: (コンソール入力が必要)

    $(document).ready(function() {
            $("#progressbar").progressbar({ value: 0 });
    });

    var pr = 0;
    var goTo = 0;
    var speedType = "fast";

    function prgMax(speed){
        speedType = speed;
        if(speedType == "slow") {
            if(pr < 101) {
                pr=pr+0.2;
                $("#progressbar").progressbar({ value: pr });
                var t = setTimeout('prgMax("slow")', 0.1);
            }
            else{ return "Moved"; clearTimeout(); }
        }
        else {
            if(pr < 101) {
                pr=pr+1;
                $("#progressbar").progressbar({ value: pr });
                var t = setTimeout(prgMax, 0.1);
            }
            else{ return "Moved"; clearTimeout(); }
        }
    }

    function prgMin(speed){
        speedType = speed;
        if(speedType == "slow") {
            if(pr > -1) {
                pr=pr-0.2;
                $("#progressbar").progressbar({ value: pr });
                var t = setTimeout('prgMin("slow")', 0.1);
            }
            else{ return "Moved"; clearTimeout(); }
        }
        else {
            if(pr > -1) {
                pr=pr-1;
                $("#progressbar").progressbar({ value: pr });
                var t = setTimeout(prgMin, 0.1);
            }
            else{ return "Moved"; clearTimeout(); }
        }
    }

    function prgSet(setting,speed){
        speedType = speed;
        goTo = setting
        if(speedType == "slow") {
            if(goTo > pr) {
                pr=pr+0.2;
                $("#progressbar").progressbar({ value: pr });
                var t = setTimeout('prgSet(goTo,speedType)',0.1);
            }
            else if(goTo < pr) {
                pr=pr-0.2;
                $("#progressbar").progressbar({ value: pr });
                var t = setTimeout('prgSet(goTo,speedType)',0.1);
            }
            else if(goTo == pr) { return "Moved"; clearTimeout(); }
        }
        else {
            if(goTo > pr) {
                pr=pr+1;
                $("#progressbar").progressbar({ value: pr });
                var t = setTimeout('prgSet(goTo,speedType)',0.1);
            }
            else if(goTo < pr) {
                pr=pr-1;
                $("#progressbar").progressbar({ value: pr });
                var t = setTimeout('prgSet(goTo,speedType)',0.1);
            }
            else if(goTo == pr) { return "Moved"; clearTimeout(); }
        }
    }

そして私のHTML

<div style="height:32px; display:inline-block; left:39px; right:5px; position:absolute;" id="progressbar"></div>

else if ステートメントに clearTimeout() を追加することで問題の一部を修正しましたが、次のシリーズをコンソールに入力すると、プログレスバーが前後に動き始めます。

prgMax() //Wait until it's done then
prgMin("slow") //Wait until it's done then
prgSet(5,"slow")

誰にもアイデアはありますか?前もって感謝します。意味が分からない場合はコメントしてください。

4

2 に答える 2

1

You should not use strings in setTimeout() but a function. Also, 0.1 milliseconds is probably too short, the minimal value browsers can handle is about 4 ms.

于 2012-06-27T23:42:38.987 に答える
0

シンプルで素敵なプログレスバーを使用することをお勧めします。これには jQuery がなく、非常に使いやすいです: http://ruwix.com/simple-javascript-html-css-slider-progress-bar/

于 2012-07-03T13:03:41.053 に答える