Делать "подобный бар", используя соотношение, а не отдельные входы?
Итак, вы знаете, как на YouTube есть бар нравится и не нравится? Но он изменяется в зависимости от пропорции (то есть, полоса всегда имеет одинаковый размер, зеленая и красная части занимают разное количество в зависимости от соотношения "нравится / не нравится".
у меня есть около 200x5 места для заполнения на странице опроса, и я знаю, как назначить, скажем, 1 пиксель за нажатие кнопки, но это было бы бесполезно, если бы я получил только 1 клик или 1 000 000 кликов, как это выглядело бы смешно на моей странице. так что мне нужно, чтобы он был "на основе отношения", а не "на основе числа".
Кто-нибудь может мне помочь и сказать мне, как это сделать?
2 ответа
Почему бы просто не рассчитать соотношение и умножить его на количество пикселей?
В PHP:
// inputs: $n_likes, $n_dislikes
$bar_width = 200;
$bar_height = 5;
$ratio = $n_likes/($n_likes + $n_dislikes);
$n_green_pixels = round($bar_width * $ratio);
// not even needed: $n_red_pixels = $bar_width - $n_green_pixels;
// create a bar-image:
$bar = imagecreatetruecolor($bar_width, $bar_height);
// fill the whole image with red color:
$red = imagecolorallocate($bar, 255, 0, 0);
imagefilledrectangle($bar, 0, 0, $bar_width-1, $bar_height-1, $red);
if($n_green_pixels > 0)
{
// draw a green line over the red background:
$green = imagecolorallocate($bar, 0, 255, 0);
imagefilledrectangle($bar, 0, 0, $n_green_pixels-1, $bar_height-1, $green);
}
// output the image and perform cleanup:
imagepng($bar); // here: output directly to the browser, include filename as 2nd argument to write to a file
imagedestroy($bar);
Предполагая, что у вас есть $ лайки (всего лайков), $ голосов (всего лайков + дислайков) и $barWidth (общая ширина бара в пикселях...
Сначала получите отношения:
$likesRatio = $likes/$votes;
Так что если у вас есть 1 лайк из 3 голосов, это даст 0,33.
Затем умножьте на количество пикселей:
$likesPixels = $likesRatio * $barWidth;
$dislikesPixels = $barWidth - $likesPixels;
Таким образом, 0,33 * 200 = 66 пикселей, красный будет 134 пикселей (200 - 66).
Затем назначьте пиксели.