Biorąc mówiłeś „farbowanie, jeśli to możliwe” będę stanowić przykład rozwiązania, które nie oddaje kolory zupełnie tak, jak chcesz (robi to w sposób, który znalazłem łatwiej kodu i bardziej atrakcyjny do oglądania), ale który obsługuje poprawnie wszystkie numery dla różnych rozmiarów stołów.
Poniższa funkcja zakłada, że tabela już istnieje; w this demo Zawarłem kod, który generuje tabelę do dowolnego podanego rozmiaru, a następnie wywołuje poniższą funkcję, aby wykonać numerację i kolory.
function numberDiagonally(tableId) {
var rows = document.getElementById(tableId).rows,
numRows = rows.length,
numCols = rows[0].cells.length,
sq = numRows + numCols - 1,
d, x, y,
i = 1,
dc,
c = -1,
colors = ["green","yellow","orange","red"];
diagonalLoop:
for (d = 0; d < sq; d++) {
dc = "diagonal" + d;
for (y = d, x = 0; y >= 0; y--, x++) {
if (x === numCols)
continue diagonalLoop;
if (y < numRows)
$(rows[y].cells[x]).html(i++).addClass(dc);
}
}
for (d = 0; d < sq; d++)
$(".diagonal" + d).css("background-color", colors[c=(c+1)%colors.length]);
}
Demo: http://jsfiddle.net/7NZt3/2
ogólny pomysł, że wpadł było wyobrazić kwadrat dwukrotnie większe w zależności od X i Y wymiarów jest większy, a następnie za pomocą pętli tworzyć przekątne z lewej krawędź tego kwadratu granicznego w górę iw prawo - tj. w kolejności, w jakiej chcesz numery. EDYCJA: Dlaczego dwa razy większa niż dłuższa strona? Ponieważ to była pierwsza rzecz, która pojawiła się w mojej głowie, kiedy zacząłem ją kodować i działało (zauważ, że zmienna i
, która zawiera liczby, które są wyświetlane, nie jest zwiększana dla komórek urojonych). Teraz, gdy miałem czas pomyśleć, zdaję sobie sprawę, że moja zmienna sq
może być ustawiona dokładnie na jedną mniej niż liczba wierszy plus kolumny - liczba, która kończy się raczej mniejszą dla tabel nieprostokątnych. Powyższy kod i odpowiednio zaktualizowane skrzypce.
Należy pamiętać, że kolory tła można ustawić bezpośrednio w pierwszej pętli, ale zamiast tego zdecydowałem się przypisać klasy i ustawić pętle dla każdej klasy później.Wydawało się, że jest to dobry pomysł, ponieważ oznaczało to, że poszczególne przekątne można łatwo wybrać w jQuery z jednym selektorem klasy.
wyjaśniając jak reszta prac jest pozostawiamy jako ćwiczenie dla czytelnika ...
AKTUALIZACJA - ta wersja ma zabarwienie bardziej jak hasła: http://jsfiddle.net/7NZt3/1/ (moim zdaniem nie jest tak ładna, ale każde z nich jego własny).
Kolorowanie jest łatwe, gdy masz już ustawione liczby hehe :-) –
Na twoim diagramie, dlaczego 15 jest bardziej pomarańczowe niż żółte? Ponadto przyjmuję, że chcesz algorytmu, który może obsłużyć różne rozmiary, ale czy stół zawsze będzie kwadratem? – nnnnnn
Quick & Dirty: http://jsfiddle.net/Seybsen/ZdwV4/, ale może być dobrym punktem wyjścia dla ciebie. – Seybsen