#javascript #jquery #image #grid #overlay
#javascript #jquery #изображение #сетка #наложение
Вопрос:
У меня есть изображение (1000×1300 пикселей), и я хочу наложить на него сетку с ячейками 10×10 пикселей (таким образом, это будет 100×130 ячеек). Тогда должен быть способ щелкнуть левой кнопкой мыши, переместить по сетке и «отметить» нижележащие ячейки сетки (т. Е. изменить цвет фона). На данный момент у меня есть следующий исходный код в jQuery
$(window).ready(function() {
$("body").mousedown(function() { mstate = 1; }).mouseup(function() {
mstate = 0;
});
var container = document.getElementById("grid");
var divs = "";
for (var y in grid) {
divs = "<tr>";
for (var x in grid[y]) {
var class = "cellinactive";
if (grid[y][x]==1) class = "cellactive";
else if (grid[y][x]==2) class = "cellreserved";
else if (grid[y][x]==3) class = "cellsold";
divs = "<td class='" class "'>amp;nbsp;</td>";
}
divs = "</tr>";
}
divs = "<table>" divs "</table>";
container.innerHTML = divs;
$("#grid td").css({ "opacity": "0.7" }).html("").mouseover(function() {
if (mstate == 1) {
if (rgb2hex($(this).css("background-color")) == "#ffff00")
$(this).css("background-color", "#0ff");
else
$(this).css("background-color", "#ff0");
}
});
});
var grid = "";
var mstate = 0;
сетка содержит двумерный массив (размер 130×100). Я пытался создать сетку на основе DIVs, но это намного медленнее, чем TDs. Есть ли у кого-нибудь какой-нибудь намек на повышение производительности этого фрагмента? При тестировании в Firefox 4 «щелчок, удержание и перемещение» мыши не очень эффективны, при непрерывном рисовании линии возникают пробелы. (Извините, если мой английский не самый лучший 😉
С уважением
Ответ №1:
Возможно, вам будет проще использовать методы DOM, а не создавать строку:
(Только базовая версия, поддерживает щелчки, но не перетаскивание)
Комментарии:
1. Выглядит довольно красиво. Конечно, это можно сделать с помощью функций jQuery, управляющих DOM (я делал это раньше). Теперь у меня есть фрагмент, который более или менее эффективен при создании 13000 ячеек таблицы 😉 Но сейчас я ищу способ реализовать такую функцию перетаскивания с плавным поведением (чтобы в нарисованной линии не было пробелов). Я заметил, что только наведение курсора мыши на эти 13000 ячеек приводит к высокому потреблению процессора на стороне клиента.