Что самый легкий путь состоит в том, чтобы сделать огромной подобной шахматам сеткой?

Я работаю над игрой браузера, и я не могу не удивлению о том, что является самым легким способом сделать сетку/плату, на которой происходит игра.

Прямо сейчас, как простой образец, я покажу Вам это:

- связывайтесь больше не активный, это было в основном 25x25 table+tr+td сетка -

Теперь, когда сетка становится больше и больше, таблица и ее td's создает очень тяжелый filepage, который в свою очередь... впитывает больше ресурсов от механизма браузера и компьютера.

Так, таблица с td's является самым легким способом обработать огромную подобную сетке плату или является там чем-то легче, что Вы рекомендуете?

Аплодисменты Sotkra

6
задан Sotkra 26 May 2010 в 09:27
поделиться

7 ответов

Вычисление макета таблицы - очень сложная работа для браузера, потому что он должен знать размеры последней ячейки, чтобы вычислить точную ширину каждого столбца. Итак, если вы используете таблицу, добавьте table-layout: fixed заранее.

Плавающие блоки или относительное позиционирование могут быть быстрее визуализированы.

4
ответ дан 8 December 2019 в 17:20
поделиться

Вы можете попробовать избавиться от таблицы, вместо этого позиционируя элементы с помощью CSS {position: relative; верх: 20 пикселей; left: 20px} и т. д. и нарисуйте повторяющуюся сетку заднего фона.

3
ответ дан 8 December 2019 в 17:20
поделиться

Вы можете построить таблицу, используя JavaScript для управления DOM. Если содержимое сетки очень регулярное, код для этого будет намного меньше, чем имеющий 400x400 раз плюс разметка. Конечно, производительность зависит от движка JavaScript. Но если это не совсем отстой, это может быть даже быстрее, чем анализ всего HTML, независимо от времени передачи по сети.

3
ответ дан 8 December 2019 в 17:20
поделиться

Я предлагаю разместить плитки абсолютно внутри доски, чтобы сэкономить на HTML (время передачи) и расчетах положения (время загрузки) браузером. JS для регистрации кликов и их обработки (меньше HTML = меньше времени передачи и загрузки).

Итак, у вас может быть этот базовый CSS:

#board {
  display: block;
  width: [BoardWidth]px; /* TileWidth * NumberOrColumns */
  height: [BoardHeight]px; /* TileHeight * NumberOfRows */
  position: relative;
}
.tile {
  display: block;
  width: [TileWidth]px;
  height: [TileHeight]px;
  float: left;
}

Затем создается HTML-код следующим образом:

<div id="board">
<div class="tile" style="position: absolute; left:0px; top:0px;"></div>
<div class="tile" style="position: absolute; left:20px; top:0px;"></div>
<div class="tile" style="position: absolute; left:40px; top:0px;"></div>
<div class="tile" style="position: absolute; left:60px; top:0px;"></div>
<div class="tile" style="position: absolute; left:0px; top:20px;"></div>
<div class="tile" style="position: absolute; left:20px; top:20px;"></div>
<div class="tile" style="position: absolute; left:40px; top:20px;"></div>
<div class="tile" style="position: absolute; left:60px; top:20px;"></div>
<div class="tile" style="position: absolute; left:0px; top:40px;"></div>
<!--(...)-->
</div>

В котором каждая плитка имеет позицию слева: [X * TileWidth] px; вверху: [Y * TileHeight] px; .
Это или предложение Дэвида М.

Вы также можете сократить время загрузки страницы, если уменьшите размер страницы - так, как предлагается, с помощью JQuery или другой платформы JavaScript для создания триггера для щелчка по каждому div будет быть идеальным .
Я не очень сообразителен, но при использовании JQuery это будет примерно так:

$(document).ready(function() {
  $(".tile").click(function() {
    // find out which square was clicked, and perhaps redirect to a page with get variables
  });
});
1
ответ дан 8 December 2019 в 17:20
поделиться

Удаление ссылок и обработка их с помощью события click в Javascript (желательно с помощью чего-то вроде JQuery) должны значительно сократить размер файла.

3
ответ дан 8 December 2019 в 17:20
поделиться

http://www.w3schools.com/TAGS/tag_map.asp

<img src="planets.gif" width="145" height="126" alt="Planets" usemap="#planetmap" />

<map name="planetmap">
  <area shape="rect" coords="0,0,82,126" href="sun.htm" alt="Sun" />
  <area shape="circle" coords="90,58,3" href="mercur.htm" alt="Mercury" />
  <area shape="circle" coords="124,58,8" href="venus.htm" alt="Venus" />
</map>

Если вы используете карту изображений для создания триггеров для своей клетчатой ​​доски, вы просто понадобится повторяющийся фон и прозрачное изображение, заполняющее всю высоту.

0
ответ дан 8 December 2019 в 17:20
поделиться

Вы можете построить его с помощью CSS с плавающей запятой, например, если квадраты имеют размер 20x20 пикселей:

<style type="text/css">
div.container {
width: Xpx; /* 20px [square box width]+1px [border width of each square])) * number of squares */
height: Xpx; /* similar to above] */
border: solid black;
border-width: 1px 0px 0px 1px;} /* North East South West */

div.square {
float: left;
width: 20px;
height: 20px;
border: solid black;
border-width: 0px 1px 1px 0px;}

div.row {
clear: both;}
</style>


<div class="container">
    <div class="row">
        <div class="square">
        </div>
        ...
    </div>
...
</div>

Не забудьте использовать IE с допустимым типом документа http: / /htmlhelp.com/tools/validator/doctype.html или использовать хаки блочной модели в режиме причуд [ http://tantek.com/CSS/Examples/boxmodelhack.html] .

Вы, вероятно, могли бы сделать так, чтобы это занимало меньше времени, если бы вы использовали идентификаторы вместо классов и использовали отдельные буквы в CSS.

Какой самый быстрый обычно сильно зависит от браузера, например Я не удивлюсь, если IE лучше работает с таблицами, в то время как другие браузеры лучше работают с относительными DIV / float.

(Я не тестировал вышеупомянутое, но что-то подобное должно работать.)

Затем вы можете преобразовать приведенное выше в JavaScript, чтобы уменьшить время загрузки страницы, например:

function GenHTML(NumRows, NumCols) {
    var LRows = []
    for (var x=0; x<NumRows; x++) {
        var LCols = []
        for (var y=0; y<NumCols; y++) {
            var HTML = '<div class="square"></div>'
            LCols.push(HTML)}

        LRows.push('<div class="row">'+ LCols.join('') +'</div>')}
    return LRows.join('')}

function SetHTML(NumRows, NumCols) {
    document.getElementById('container').innerHTML = GenHTML(NumRows, NumCols)}
0
ответ дан 8 December 2019 в 17:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: