2017-03-05 7 views
0

私はw3schoolsのJavaScriptプログレスバーを調べて、プログレスバーがパーセントの増加に伴って動くようにコードを再調整しようとしましたが、 「フラグ」も動く。私のコードは動作していませんし、私はいくつかのことを試しました。ありがとうございました。JavaScriptプログレスバー - それに沿ってオブジェクトを移動

`` `

function showProgressByPercent() { 
    var bar = document.getElementById("progress-bar"); 
    var flag = document.getElementById("progress-flag"); 
    var currentPosition = parseInt(flag.style.left); 
    var width = 5; 
    var arg = setInterval(frame, 50); 
    function frame() { 
    if (width >= 100) { 
     clearInterval(arg); 
    } else { 
     width++; 
     bar.style.width = width + '%'; 
     flag.innerHTML = width * 1 + '%'; 
     flag.style.left = currentPosition * (width + '%') + 'px'; 
    } 
    } 
} 

` ``

何で最も興味深いのは、フラグ要素は、より簡単なコマンドで全く移動するかどうかを確認するためにテストする場合にも、そうでないということです。

JavaScriptを使用するまではJQueryを使用しないようにしてください。

JSFiddle:

https://jsfiddle.net/b28yh9hd/

+0

あなたは今すぐoksを作成してください。 – brk

+0

@BRK – HannahBanana

+0

@brkは、提案のためのjsfiddleの感謝を追加しました。https://jsfiddle.net/b28yh9hd/ – HannahBanana

答えて

0

あなたは動作しませんオペレータ*の文字列width + "%"として幅をミックスしようとしています。幅をピクセルを表す数値に変換する必要があります。私はバーの親ノードがプログレスバーのサイズであると仮定しています。私はそれを使用して、プログレスバーの合計幅を取得し、ピクセル幅で位置を計算することができます((width/100) * totalProgressWidth)

また、インターバルタイマーでアニメートしないでください。DOM内の何かをアニメーションするたびに​​を使用する必要があります。本当に!!!! w3schools!

コードを変更しました。私はまだ進捗状況を更新するためにインターバルタイマーを使用しますが、DOMを更新するためにrequestAnimationFrameを使用します。

function showProgressByPercent() { 
    var bar = document.getElementById("progress-bar"); 
    // I am guessing that the parent has the fulll width 
    var progressTotal = bar.parentNode.getBoundingClientRect().width; 
    var flag = document.getElementById("progress-flag"); 
    var currentPosition = parseInt(flag.style.left); 
    var width = 5; 
    var handle = setInterval(frame,50); 
    requestAnimationFrame(display); 

    function display(){ 
     bar.style.width = width + '%'; 
     flag.innerHTML = width * 1 + '%'; 
     flag.style.left = (progressTotal.left + ((width/100) * progressTotal.width)) + 'px'; 
     if(width < 100){ 
      requestAnimationFrame(display); 
     } 
    } 
    function frame() { 
     if (width >= 100) { 
      width = 100; 
      clearInterval(handle); 
     } else { 
      width++; 
     } 
    } 
} 
+0

ありがとう、@ blindman67 w3schoolが気に入らない場合は、どのようなリソースをお勧めしますか? – HannahBanana

+0

@HannahBanana私は教訓に関して申し訳ありませんが、私は少しのアドバイスから離れてあなたを助けることはできません。オンラインレッスンの公開日を確認してください.ITレッスンは、2年が経過し、5年が古くなっています。参照と一般的なリソースとして、https://developer.mozilla.org/en-US/docs/Web/JavaScriptはW3Cドキュメントよりも優れていますが(完全ではありませんが) ) – Blindman67

関連する問題