Создание облака тегов на JS
Приветствую, друзья!)
Надо, значится, сделать облако тегов содержащихся в многомерном массиве. Само облако нужно поместить в уже имеющемся контейнере. С размещением тегов из массива в контейнере у меня особых проблем не возникло. Однако не могу приложить ума, как заставить меняться размер шрифта тегов в зависимости от того, сколько каждый из тегов имеет голосов (т.е. надо еще сложить между собой числа в каждом из подмассивов), цвет у тегов должен быть тоже разным. Есть идеи, как можно решить задачу? Заранее спасибо за ответы! Код:
<!DOCTYPE HTML> |
DmitryBelg,
в чём проблема сделать цикл и сложить всё что нужно заранее? |
числа я сложил.
код теперь выглядит вот так: var arrTags = [ ["Javascript", 1634, 987], ["jQuery", 1111, 34], ["PHP", 1024,1122], ["Asp.Net", 977, 1005], ["Photoshop", 594, 789], ["XML", 40, 666], ["Access", 55, 77], ["Java", 278, 277], ["MySQL", 155, 122] ] window.onload = function () { var tagCont = document.getElementById('tagContainer'); for (var i = 0; i < arrTags.length; i++){ arrTags[i][1] = arrTags[i][1]+arrTags[i][2]; console.log(arrTags[i][1]); var eSpan = document.createElement('span'); eSpan.className = "tag"; var x = Math.floor(Math.random()*250); var y = Math.floor(Math.random()*250); eSpan.style.left = x +'px'; eSpan.style.top = y +'px'; eSpan.innerHTML = arrTags[i][0]; tagCont.appendChild(eSpan); } } Но как теперь заставить шрифт подгоняться под полученные значения, я не знаю. |
DmitryBelg,
общую сумму голосов нужно точно? может только первое число? |
DmitryBelg,
в строке 15 отсортируйте массив и потом eSpan.style.fontSize = (12 + i * 2.3) + 'px'; |
А что эти числа означают? За-против? Тогда наверное вычитать нужно а не складывать.
|
DmitryBelg,
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>JS PF taak: TagCloud</title> <style> #tagContainer { position:relative; background-color:#FFE4E1; margin:1em; padding:0; width: 500px; height:400px; overflow:hidden; border:2px solid silver; } span.tag { position:absolute; top:0; left:0; text-shadow: 5px 1px 3px #FFFAFA; font-weight: 400; } </style> <script> var arrTags = [ ["Javascript", 1634, 987], ["jQuery", 1111, 34], ["PHP", 1024, 1122], ["Asp.Net", 977, 1005], ["Photoshop", 594, 789], ["XML", 40, 666], ["Access", 55, 77], ["Java", 278, 277], ["MySQL", 155, 122] ]; window.onload = function() { var tagCont = document.getElementById("tagContainer"); function sum(el) { return el[1] + el[2] } var obj = arrTags.reduce(function(a, b) { b = sum(b); if (a.min > b) a.min = b; if (a.max < b) a.max = b; return a }, { max: sum(arrTags[0]), min: sum(arrTags[0]) }); for (var i = 0; i < arrTags.length; i++) { var eSpan = document.createElement("span"); eSpan.className = "tag"; var font = 12 + 52 * (arrTags[i][1] - obj.min) / (obj.max - obj.min); var x = Math.floor(Math.random() * 250); var y = Math.floor(Math.random() * 250); eSpan.style.fontSize = font + "px"; eSpan.style.left = x + "px"; eSpan.style.top = y + "px"; eSpan.style.color = "#" + ("000000" + (Math.random() * 16777215 | 0).toString(16)).slice(-6); eSpan.innerHTML = arrTags[i][0]; tagCont.appendChild(eSpan) } }; </script> </head> <body> <div id="tagContainer"></div> </body> </html> |
Цитата:
|
воууу)) блин) я аж подавился, когда увидел результат) Сейчас буду вникать.
Спасибо в очередной раз тебе и все остальным, кто не прошел мимо) |
DmitryBelg,
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>JS PF taak: TagCloud</title> <style> #tagContainer { position:relative; background-color:#FFE4E1; margin:1em; padding:0; width: 500px; height:400px; overflow:hidden; border:2px solid silver; } span.tag { position:absolute; top:0; left:0; text-shadow: 5px 1px 3px #FFFAFA; font-weight: 400; } </style> <script> var arrTags = [ ["Javascript", 1634, 987], ["jQuery", 1111, 34], ["PHP", 1024, 1122], ["Asp.Net", 977, 1005], ["Photoshop", 594, 789], ["XML", 40, 666], ["Access", 55, 77], ["Java", 278, 277], ["MySQL", 155, 122] ]; window.onload = function() { var tagCont = document.getElementById("tagContainer"); function sum(el) { return el[1] + el[2] } arrTags.sort(function(a, b) { return sum(a) - sum(b) }); for (var i = 0; i < arrTags.length; i++) { var eSpan = document.createElement("span"); eSpan.className = "tag"; var font = 12 + (i * i); var x = Math.floor(Math.random() * 250); var y = Math.floor(Math.random() * 250); eSpan.style.fontSize = font + "px"; eSpan.style.left = x + "px"; eSpan.style.top = y + "px"; eSpan.style.color = "#" + ("000000" + (Math.random() * 16777215 | 0).toString(16)).slice(-6); eSpan.innerHTML = arrTags[i][0]; tagCont.appendChild(eSpan) } }; </script> </head> <body> <div id="tagContainer"></div> </body> </html> |
Часовой пояс GMT +3, время: 15:31. |