JavaScript でプログレスバーを実装するいくつかの方法の紹介

黄舟
リリース: 2017-11-21 09:54:03
オリジナル
8420 人が閲覧しました

前回の記事では、進行状況バーの JavaScript 実装の例を紹介しましたが、実際のプロジェクトでは進行状況バーが依然として非常に便利であることは周知のとおりです。

最初に最終的な効果を見てみましょう:

JavaScript でプログレスバーを実装するいくつかの方法の紹介

最初のステップは、基本的に
基本コードを構築し、効果のデモを確認することです:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>制作进度条的两种方法</title> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<style> 
*{ 
    margin:0; 
    padding:0; 
} 
body{font-size:12px;}h1{font-size:15px;} 
.wrap{ 
    font-size: 12px; 
    margin:40px auto; 
    width:400px; 
} 
/*进度条样式*/ 
.progressbar_1{ 
    background-color:#eee; 
    height:16px; 
    width:150px; 
    border:1px solid #bbb; 
    color:#222; 
} 
.progressbar_1 .bar { 
    background-color:#6CAF00; 
    height:16px; 
    width:0; 
} 
</style> 
</head> 
<body> 
<div class="wrap"> 
    <h1>1,构建基本的HTML结构和CSS样式</h1> 
    

 
    0%的状态: 
    <div class="progressbar_1"> 
        <div class="bar"></div> 
    </div> 
    

 
    50%的状态: 
    <div class="progressbar_1"> 
        <div class="bar" style="width: 50%;"></div> 
    </div> 
    

 
    80%的状态: 
    <div class="progressbar_1"> 
        <div class="bar" style="width: 80%;"></div> 
    </div> 
     
    

 
    100%的状态: 
    <div class="progressbar_1"> 
        <div class="bar" style="width: 100%;"></div> 
    </div> 
    
 
    这步非常简单,相信大家都能看明白。 
</div> 
</body> 
</html>
ログイン後にコピー

2 番目のステップは、テキスト表示を追加することです。進行状況バー

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>制作进度条的两种方法</title> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<style> 
*{ 
    margin:0; 
    padding:0; 
} 
body{font-size:12px;}h1{font-size:15px;} 
.wrap{ 
    font-size: 12px; 
    margin:40px auto; 
    width:400px; 
} 
/*进度条样式*/ 
.progressbar_1{ 
    background-color:#eee; 
    color:#222; 
    height:16px; 
    width:150px; 
    border:1px solid #bbb; 
} 
.progressbar_1 .bar { 
    background-color:#6CAF00; 
    height:16px; 
    width:0; 
} 
/*绝对定位*/ 
.progressbar_2{ 
    background-color:#eee; 
    color:#222; 
    height:16px; 
    width:150px; 
    border:1px solid #bbb; 
    text-align:center; 
    position:relative; 
} 
.progressbar_2 .bar { 
    background-color:#6CAF00; 
    height:16px; 
    width:0; 
    position:absolute; 
    left:0; 
    top:0; 
} 
.progressbar_2 .text { 
    height:16px; 
    position:absolute; 
    left:0; 
    top:0; 
    width:100%; 
    line-height:16px; 
} 
/*绝对定位 + z-index */ 
.progressbar_3{ 
    background-color:#eee; 
    color:#222; 
    height:16px; 
    width:150px; 
    border:1px solid #bbb; 
    text-align:center; 
    position:relative; 
} 
.progressbar_3 .bar { 
    background-color:#6CAF00; 
    height:16px; 
    width:0; 
    position:absolute; 
    left:0; 
    top:0; 
    z-index:10; 
} 
.progressbar_3 .text { 
    height:16px; 
    position:absolute; 
    left:0; 
    top:0; 
    width:100%; 
    line-height:16px; 
     
    z-index:100; 
} 
</style> 
</head> 
<body> 
<div class="wrap"> 
    <h1>2,给进度条增加文字显示</h1> 
     
    
 
    一个进度条需要包含对应的进度文字显示,本例中,我希望文字显示在进度条的中间。 
    接下来,我们在进度条元素内增加一个显示 文字的div。 
    
 
    很显然,直接添加div后,div会占据原先绿色进度条的位置。看下面例子:
 
        <div class="progressbar_1"> 
        <div >50%</div> 
        <div class="bar" style="width: 50%;"></div> 
    </div> 
    

 
    那么有什么办法使得文字 和 绿色进度条 同时显示在 一起呢? 
    
 
    估计你也想到了,那就是绝对定位。通过对父元素添加相对定位,然后给子元素添加绝对定位,设置子元素的左边距和上边距都为0。 
    
 
    看下面的例子: 
    

 
    <div class="progressbar_2"> 
        <div class="text">50%</div> 
        <div class="bar" style="width: 50%;"></div> 
    </div> 
    

 
    这时你会发现文字被遮盖了,相信你第一时间就会想到用 z-index 去设置他们的层级关系。
 
    对,我也选择的是它。通过给他们设置不同的z-index值来确定层级关系,值越大越显示在上面。看下面例子:

 
    <div class="progressbar_3"> 
        <div class="text">50%</div> 
        <div class="bar" style="width: 50%;"></div> 
    </div> 
    

 
    <div class="progressbar_3"> 
        <div class="text">80%</div> 
        <div class="bar" style="width: 80%;"></div> 
    </div> 
    

 
    <div class="progressbar_3"> 
        <div class="text">100%</div> 
        <div class="bar" style="width: 100%;"></div> 
    </div> 
        这是第一种方式,也是目前最为流行的 制作进度条的方式。
 
    他的原理就是采用 相对定位和绝对定位,然后通过背景不同来控制进度。 
    接下来我们看第二种方式制作进度条。
 </div> 
</body> 
</html>
ログイン後にコピー

原則は、相対位置と絶対位置を使用し、さまざまな背景を通じて進行状況を制御することです。 次に、進行状況バーを作成する 2 番目の方法を見ていきます。
3 番目のステップ、進行状況バーを作成する 2 番目の方法 -- 画像と背景画像を直接使用します

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title></title> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<style> 
*{ 
    margin:0; 
    padding:0; 
} 
body{font-size:12px;}h1{font-size:15px;} 
.wrap{ 
    font-size: 12px; 
    margin:40px auto; 
    width:400px; 
} 
/*不带文字*/ 
.progress{ 
    border:0; 
    width: 152px; 
    height: 18px; 
    background:url(img/progress.gif) no-repeat -100px 50%; 
} 
/*带文字显示*/ 
.progressbar_3{ 
    width:152px; 
    position:relative; 
    height:18px; 
    text-align:center; 
    position:relative; 
    color:#222; 
} 
.progressbar_3 .text{ 
    width:152px; 
    position:absolute; 
    left:0; 
    top:0; 
    height:18px; 
    line-height:18px; 
    z-index:100; 
} 
.progressbar_3 .progress{ 
    width:152px; 
    position:absolute; 
    left:0; 
    top:0; 
    height:18px; 
    z-index:10; 
} 
</style> 
</head> 
<body> 
<div class="wrap"> 
    <h1>3,制作进度条的第二种方式---直接使用图片+背景图片</h1> 
      <img class="progress" width="152"    style="max-width:90%" title="0%" alt="0%" src="img/bg.gif" style="background-position:-152px 50%;"/>          
       <img class="progress" width="152"    style="max-width:90%" title="20%" alt="20%" src="img/bg.gif" style="background-position:-120px 50%;"/> 
        <img class="progress" width="152"    style="max-width:90%" title="50%" alt="50%" src="img/bg.gif" style="background-position:-76px 50%;"/> 
         <img class="progress" width="152"    style="max-width:90%" title="80%" alt="80%" src="img/bg.gif" style="background-position:-30px 50%;"/> 
        <img class="progress" width="152"    style="max-width:90%" title="100%" alt="100%" src="img/bg.gif" style="background-position: 0 50%;"/> 
 
    如果你想在上面进度条上添加进度显示的文字,你应该知道怎么办了(如果你仔细阅读过前面的例子的话)。
 
    对,就是使用绝对定位+相对定位来控制。 
    <div class="progressbar_3"> 
        <div class="text">0%</div> 
        <img class="progress" width="152"    style="max-width:90%" title="0%" alt="0%" src="img/bg.gif" style="background-position:-152px 50%;"/> 
    </div> 
    <div class="progressbar_3"> 
        <div class="text">20%</div> 
        <img class="progress" width="152"    style="max-width:90%" title="20%" alt="20%" src="img/bg.gif" style="background-position:-120px 50%;"/> 
    </div> 
    <div class="progressbar_3"> 
        <div class="text">50%</div> 
        <img class="progress" width="152"    style="max-width:90%" title="50%" alt="50%" src="img/bg.gif" style="background-position:-76px 50%;"/> 
    </div> 
    <div class="progressbar_3"> 
        <div class="text">80%</div> 
        <img class="progress" width="152"    style="max-width:90%" title="80%" alt="80%" src="img/bg.gif" style="background-position:-30px 50%;"/> 
    </div> 
    <div class="progressbar_3"> 
        <div class="text">100%</div> 
        <img class="progress" width="152"    style="max-width:90%" title="100%" alt="100%" src="img/bg.gif" style="background-position: 0 50%;"/> 
    </div> 
    这种方式的原理就是 利用 一张img图片,然后给img图片又设置背景图,通过背景图的background position 属性 来显示不同的部分。
 
    当然这种方式 对图片有点要求 。你仔细一点就会发现,宽度是img的2倍。
 
    另外图片必须是gif透明的,也就是说空心的。呵呵。看不到进度条。
 
    总的来说,这应该算一个技巧,在实际项目中,也是能使用的。
<p style="float:right;">Dev By <a href="http://www.jb51.net" >jb51.net</a></p> 
</div> 
</body> 
</html>
ログイン後にコピー

4 番目のステップ、適用
最後に、簡単なアプリケーションを見てみましょう:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title></title> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 

<style> 
*{ 
    margin:0; 
    padding:0; 
} 
body{font-size:12px;}h1{font-size:15px;} 
.wrap{ 
    font-size: 12px; 
    margin:40px auto; 
    width:400px; 
} 

/*不带文字*/ 
.progress{ 
    border:0; 
    width: 152px; 
    height: 18px; 
    background:url(img/progress.gif) no-repeat -100px 50%; 
} 
/*带文字显示*/ 
.progressbar_3{ 
    width:152px; 
    position:relative; 
    height:18px; 
    text-align:center; 
    position:relative; 
    color:#222; 
} 
.progressbar_3 .text{ 
    width:152px; 
    position:absolute; 
    left:0; 
    top:0; 
    height:18px; 
    line-height:18px; 
    z-index:100; 
} 
.progressbar_3 .progress{ 
    width:152px; 
    position:absolute; 
    left:0; 
    top:0; 
    height:18px; 
    z-index:10; 
} 
</style> 

<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" type="text/javascript" language="javascript" charset="gb2312"></script> 
<script> 
$(function(){ 
    var $txt = $(".progressbar_3 .text"); 
    var $progress = $(".progressbar_3 .progress"); 

    $("#addTo").click(function(){ 
        $progress.animate({"backgroundPosition":"-76px 50%"},500,function(){ 
            $(this).attr({"alt":"50%","title":"50%"}); 
            $txt.text("50%"); 
            $("<p>进度条加载完毕!</p>").appendTo(".wrap"); 
        }); 
    }); 
    $("#cutdown").click(function(){ 
        $progress.animate({"backgroundPosition":"-120px 50%"},500,function(){ 
            $(this).attr({"alt":"20%","title":"20%"}); 
            $txt.text("20%"); 
            $("<p>进度条加载完毕!</p>").appendTo(".wrap"); 
        }); 
    }); 
}); 
</script> 
</head> 
<body> 
<div class="wrap"> 
    <h1>4,应用</h1> 
          <div class="progressbar_3"> 
        <div class="text">0%</div> 
        <img class="progress" width="152"    style="max-width:90%" title="0%" alt="0%" src="img/bg.gif" style="background-position:-152px 50%;"/> 
    </div> 
      <button id="addTo" >增加至50%</button> 
    <button id="cutdown" >减少至20%</button> 
     我使用的是第二种方式来做控制,通过animate来控制图片的background-position来达到进度条效果。
     当然你也可以使用第一种方式做,第一种方式需要改变的是进度条的 width 属性。 
        <p style="float:right;">Dev By <a href="http://www.jb51.net" >jb51.net</a></p> 
    </div> 
</body> 
</html>
ログイン後にコピー

アニメーションを使用して画像の背景位置を制御し、プログレスバー効果を実現します。
もちろん、最初の方法を使用することもできます。最初の方法で変更する必要があるのは、プログレスバーの幅属性です。

概要:

この記事を学習することで、友人は JavaScript でプログレスバーを実装する方法をよりよく理解できると思います。それぞれの方法は、自分のニーズに応じて適切な方法を選択できます。 !

関連する推奨事項:

プログレスバーのネイティブコードを実装するJavaScript


JSネイティブアップロード大きなファイルの表示プログレスバー -phpアップロードファイル


タイマーに基づいて進行状況バーを実装する JavaScript の例

以上がJavaScript でプログレスバーを実装するいくつかの方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!