2013-12-24 2 views
0

Я пытаюсь понять, как изменить цвет divs на случайный цвет с помощью функции mouseover, однако я не могу найти четкого ответа на то, что я необходимо изменить, чтобы это произошло. Есть идеи? Вот мой оригинальный сценарий.Случайное изменение цвета, когда мышь нависает над сеткой divs

$(document).ready(function() { 
    for (var i = 0; i <= 128; i++) { 
     $('<div />', { 
      'class': 'sameDiv', 
      'id': 'div' + i 
     }).appendTo('body'); 
    } 
}); 

$('.sameDiv').mouseover(function() { 
    $(this).stop(true).fadeTo(200, Math.random()); 
}).mouseout(function() { 
    $(this).fadeTo(200, Math.random()); 
}); 

http://jsfiddle.net/smugfox/7vx3W/3/

+2

'Math.random() 'предоставлять значения между 0 и 1. Вам, очевидно, нужно что-то сделать, чтобы преобразовать это в полезные значения hex или RGB. Я не вижу, где вы сделали это. Вы также, кажется, не пытаетесь изменить цвет вообще. –

+0

@MikeBrant CV стоит 1000 слов;) –

ответ

1

Я отредактировали скрипку. Вот решение:

$(document).ready(function() { 
    for (var i = 0; i <= 128; i++) { 
     $('<div />', { 
      'class': 'cell', 
       'id': 'div' + i 
     }).appendTo('body'); 
    } 
}); 

$('.cell').mouseover(function() { 
    var randomColor = '#' + (function co(lor){ return (lor += 
    [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f'][Math.floor(Math.random()*16)]) 
    && (lor.length == 6) ? lor : co(lor); })(''); 
    $(this).css("background-color", randomColor); 
}); 

Here is the fiddle!

+0

Как это может создать цвет ярче, чем '# 999999'? Что делать, если 'Math.random' возвращает что-то вроде 0,00001? Что относительно 0.0000001, что произвело бы «0.0999» –

+0

@DaggNabbit, вы правы. Я отредактировал свой ответ. :) –

0

Вы хотите что-то вроде этого:

$('.cell').mouseover(function() { 
    var randomColor = '#' + Math.floor((Math.random() * 16777216)).toString(16); 
    $(this).css("background-color",randomColor); 
}); 

Эффект перехода должна быть достижима с помощью перехода CSS.

16777216 - 16^6, диапазон значений, обозначаемый шестизначным шестнадцатеричным. toString (16) преобразует десятичное значение в hex.

ETA:

Для корректности, это должны учитывать ведущие нули, когда сгенерированное значение является очень низким. В противном случае некоторые цвета с нулевым нулевым значением (0A6E7A) заменяются цветами конечного нуля (A6E7A0).

$('.cell').mouseover(function() { 
    var randomColor = "0" + (Math.floor((Math.random() * 16777216)).toString(16)); 
    $(this).css("background-color","#" + randomColor.substr(randomColor.length - 6)); 
}); 
+0

Что делать, если 'Math.random' возвращает что-то вроде 0.01? –

+0

Хм, приятно поймать. Я пропустил левое заполнение с 0s в случае низкого значения. –

+0

@ Ответ Эллиота более краток, но он исправлен для потомков. –

4

В вашей mouseout функции, вы можете создать три случайных значения для rgb цвета.

$(this).css("background","rgb("+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+")") 

fiddle

+0

Лучший ответ здесь до сих пор, но он никогда не даст сплошной белый цвет. Попробуйте 256 вместо 255. –

+0

Я должен был это заметить. Спасибо @DaggNabbit – ElliotM

0

Вы не пробовали давать цвет фона Div

Вот мой код -

$('.cell').mouseover(function() { 
    var randomColor ='#'+ ('000000'+(Math.random() * 0xFFFFFF<<0).toString(16)).slice(-6); 
    $(this).css("background-color",randomColor); 
}); 

Проверить demo here

+0

Как это может сделать цвет ярче, чем '# 999999' или более темный, чем' # 100000'? –

+0

отредактировал ответ, теперь это сработает. –

+0

Закрыть, но самый яркий цвет, который он может создать, - '# fffffe'. Вам нужно '0x1000000' вместо' 0xFFFFFF' (что 'slice' трюк довольно умный, кстати, хорошая работа) :) –

Смежные вопросы