-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
60 lines (53 loc) · 2 KB
/
script.js
File metadata and controls
60 lines (53 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
var main=function(){
//автозаполнение контейнера квадратными блоками для разного размера контейнера
var elementCount = ($('.workspace').width())*($(".workspace").height())/
(Math.pow($('.square').width(),2));
for (var i = 0; i < elementCount-1; i++) {
var square = $('<div>').addClass('square').appendTo('.workspace');
$('<div>').addClass('text').appendTo(square);
}
//обработчик наведения мыши на квадрат
$('.square').mouseenter(function (){
var color = colorGenerator();
(this).style.backgroundColor=color;
$(this).children('.text').empty();
var tone=determineColorTone(color);
$(this).children('.text').text(color);
//определяет подходящий цвет текста для квадрата
if (tone==='light')
$(this).children('.text').css('color','black');
else $(this).children('.text').css('color','white');
});
}
function colorGenerator(){//генерирует псевдо-случайный цвет
var symbvols="0123456789ABCDEF";
var color="#";
for (var i = 0; i < 6; i++) {
color+=symbvols[Math.round(Math.random()*15)];
}
return color;
}
function determineColorTone(color){//определяет светлый или темный цвет
var R=parseInt(color.substring(1,3),16);
var G=parseInt(color.substring(3,5),16);
var B=parseInt(color.substring(5,7),16);
var sum=R+G+B;
//определяем, какого цвета больше всего
var main;
if (R>=G){
if (R>=B) main='R';
else main='B';
}
else if (G>=B) main='G';
else main='B';
//если сумма двух других цветов больше 255, то это светлый цвет, иначе темный
switch (main){
case 'R': sum=G+B;
case 'G': sum=R+B;
case 'B': sum=R+G;
}
//console.log('color '+color+'R='+R+' G='+G+' B='+B+' sum = '+sum+' main='+main); для отладки
if (sum>255) return 'light'
else return 'dark'
}
$(document).ready(main);