Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Скрипт: при наведении меняем цвет на один из заданных (https://javascript.ru/forum/css-html/69089-skript-pri-navedenii-menyaem-cvet-na-odin-iz-zadannykh.html)

j0hnik 31.05.2017 08:01

точно Math.round же в первом примере
конечно же Math.floor надо
незаметил :thanks:

рони 31.05.2017 08:11

Цитата:

Сообщение от j0hnik
конечно же Math.floor надо

не обязательно, можно и Math.round - но с Math.floor лучше. а почему вы в курсе? :)

<head>
  <meta charset="utf-8">
</head>
<body>
  <div id="id" style="display: block; width: 200px; height: 200px; border: 1px solid grey;"></div>
  <script>
  var rand2;
    document.getElementById("id").onmouseover = function(){
    var color = ['red','green','blue','orange','yellow','violet','cyan']
    var rand = Math.round(Math.random()*color.length-1);
    if (rand2 === rand) rand = ++rand%color.length;
    this.style.backgroundColor = color[rand];
    rand2 = rand;
  };
</script>
</body>

j0hnik 31.05.2017 12:39

Цитата:

Сообщение от рони (Сообщение 453926)
не обязательно, можно и Math.round - но с Math.floor лучше. а почему вы в курсе? :)

Предполагаю что крайние цвета будут более редкие. + в вашем примере лишняя мат. операция

Math.floor - просто отрезает дробную часть оставляя целую, а Math.round округляет по правилам банка
Интересный ход с процентом от остатка делимое которого даже если и будет больше делителя на 1 все равно мы никак промахнемся. (да и как бы маскирует наш немножко кривой подход)
Тут можно применить много математических операций, разделит 2 потом прибавить 2 потом все это округлить и тоже не вылезти за диапазон. Но все равно в зависимости от от цвета который сейчас есть увеличивается вероятность выпадения цвета который мы получим применив к нему мат. операции которые мы используем. Вот это и есть единственный минус данной методики. :thanks:

j0hnik 31.05.2017 14:17

https://jsperf.com - Ну вот это супер конечно тема. протестировал все что можно уже. смотрю тесты других людей запоминаю методы которые работают быстрей. :thanks:
RegExp кстати почти везде самый медленный путь.


Часовой пояс GMT +3, время: 23:24.