私はそれを行う簡単な方法を想像することができます。不透明度を20%から100%まですべてスタイル設定したいとします(後でこれを変更して関数の引数によって決定されるようにすることもできますが、今のところは単純なままにしておきます)。最初の目標は、リストから最大値と最小値を取得することです。
var list = document.getElementsByTagName("ul")[0].children;
var min = Infinity, max = -Infinity;
for (var i = 0; i < list.length; i++) {
var val = parseInt(list[i].innerText, 10);
min = Math.min(min, val);
max = Math.max(max, val);
}
ここで、それぞれの不透明度の値を次のように線形にスケーリングする必要があります-
var min_opacity = 20, max_opacity = 100;
for (var i = 0; i < list.length; i++) {
var val = parseInt(list[i].innerText, 10);
list[i].style.opacity = (min_opacity + ((val - min) / (max - min)) * (max_opacity - min_opacity) + "%";
}
数学を少し拡張すると、ここでの作業のほとんどは、[0,1]の間隔で数値を取得しています。ここで、0は最小値を表し、1は最大値を表します。「(val--min)/(max--min)」はこのスケーリングを実行します。minが減算されると「max--min」より大きくなる数値はなく、minが減算されるとゼロ未満になることはありません。