function getSizes(baseSize, sVariance) {
var sizes = [];
for (i = 0; i < 5; i++) {
sizes[i] = Math.ceil(baseSize - (Math.random() * sVariance));
}
return sizes;
}
function calculateOpacityValues(baseSize, sVariance) {
var min = 0.25, max = 1,
step = 0.75 / sVariance, i,
opacityValues = {};
for (i = 0; i <= sVariance; i++) {
opacityValues[baseSize - i] = min + step * i;
}
return opacityValues;
}
function getOpacities(sizes, opacityValues) {
// create a map of opacities
// and your expected values
var opacities = [];
sizes.forEach(function(value, index) {
opacities[index] = opacityValues[value];
});
return opacities;
}
var baseSize = 60, sVariance = 3,
sizes = getSizes(baseSize, sVariance);
console.log(sizes);
// use the map to get the opacity
console.log(getOpacities(sizes, calculateOpacityValues(baseSize, sVariance)));
ここで実際の動作を確認できます。古いブラウザではサポートされていないforEach構造を使用しますが、必要に応じて、通常のforループに切り替えることができます。getSizes
また、メソッド内のすべての生成ロジックとメソッド内のすべての不透明度計算を移動することにより、コードを少しリファクタリングしましたgetOpacities
。
補足として、デバッグに使用する必要がありますconsole.log
(これは、FireFoxのFireBugのコンソール、Chrome WebInspectorウィンドウ、またはIE開発コンソールに記録されます)。これはよりもはるかに優れていますdocument.write
(これは、ここで話していなくても、この場合にも当てはまりalert
ます)。
編集
baseSize
とvariance
を可変にするかどうかについては言及していません。その場合は、ロジックに基づいて不透明度値マップを生成するメソッドを追加する必要があります。
サンプルでリクエストしたロジックを追加し、コードを更新しました。