はじめて触るから薄い内容。
これ
<progress value="40" max="100">40%</progress>
maxは最大値、valueは値。
要素で挟んであるパーセントのやつは、別になくても表示的に問題はない。
アクセシビリティ的に、inputよろしくlabelも使う感じ。
<label>進捗</label>
<progress value="40" max="100">40%</progress>
<label>
進捗
<progress value="40" max="100">40%</progress>
</label>
js(jQuery)で操作してみる
valueを変えたらいい。
例えばクリックしたら増加、ってやるとこうなる。
<progress id="progress" value="40" max="100"></progress>
<button type="button" id="progress_btn">click</button>
$(function(){
$('button#progress_btn').on('click',function(){
valNum = Number($('progress#progress').attr('value')) + 10;
$('progress#progress').attr('value',valNum);
})
})
現在の値を取得して、それを足すなり引くなりしたのを上書きする。
アニメーションについて
<progress>自体にアニメーション機能はない。
アニメーションさせたければjsでどうにかすることになる。
そうなると、例えば数値aから数値bまでを一定数刻みで更新しまくるみたいなことになる。
$(function(){
$('button#progress_btn').on('click',function(){
valNum01 = Number($('progress#progress').attr('value'));
valNum02 = valNum01 + 10;
const countUp = () =>{
valNum03 = valNum01++;
$('progress#progress').attr('value',valNum03);
}
const intervalId = setInterval(() =>{
countUp();
if(valNum03 > valNum02){
clearInterval(intervalId);
}}, 50);
})
})
setInterval()の値をいじれば更新頻度は早くなるので、実質的にプログレスバーはアニメーションする。
それはいいんだけど、一定速度なので気持ち悪い。欲が出てしまう。
イージングとか。
軽く調べたらあるっぽいんだけど、自作の手間がだるい。
もういっそのこと、アニメーションしなくていいんじゃないですかね。
装飾周りについて
::-webkitとかの疑似要素で指定できるらしい。
ということは統一されてないということで、ややこしいことになる。
まあなんていうか、<progress>を扱いたいなら素材の良さを活かすべきで、独自色を出したいなら<div>とかで組んで擬似的にプログレスバーを作るのがいいんじゃないですかね。
コメント