Я создаю сетку как pinterest , и все работает отлично, за исключением того, что получение высоты элементов в коде происходит слишком медленно.
в моем коде, я должен получить высоту последнего добавленного элемента и добавить его в высоту строки, поэтому для следующего элемента я могу установить верхнее положение на высоту.
вот код:javascript - воссоздание pinterest как сетка
testOne: function(itemArray, parent){
// layout
var layout = [];
for(i in itemArray_){
var item = itemArray[i];
var template = this.template(item);
// get smallest height
var smallestHeight = layout[0];
var smallestHeightRow = 0;
for(i in layout){if(layout[i] < smallestHeight){smallestHeight = layout[i]; smallestHeightRow = i;}}
// add item to screen
parent.append(template);
// add height of last item
var item = parent.find("[item-id="+item._id+"]");
item.css("top", smallestHeight+15+"px");
item.css("left", smallestHeightRow*25+"%");
var itemHeight = item[0].offsetHeight;
layout[smallestHeightRow] = smallestHeight+itemHeight;
}
},
но проблема в том, этот процесс быстро для получения высоты элемента, за исключением.
так, не получая высоту, функция принимает около 20ms
но получить высоту добавляет еще 75 мс в процесс и делает его о 95МСЕ
теперь мой вопрос, как я могу сделать определение высоты намного быстрее?
Я сохраняю высоту для каждой строки, проблема заключается в том, что высота текущего элемента добавляется к общей высоте –
Чтобы лучше понять вашу проблему, вы можете поделиться jsFiddle или CodePen? И если вы не хотите писать свой код, вы всегда можете использовать готовые плагины, например http://masonry.desandro.com/ или http://www.jqueryscript.net/demo/Simple-jQuery-Plugin-To- Create-Pinterest-Style-Grid-Layout-Pinterest-Grid/ Вторая ссылка делает то же самое, что вы хотите .. она изменяет размер от минимальной высоты по умолчанию до фактической высоты плитки после загрузки изображения. –
Я пытался понять, почему .hight() или .outerHeight() были медленными. но похоже, что так оно и есть. Наверное, я слишком придирчив к производительности. но, поскольку вы нашли время, чтобы ответить на вопрос, я собираюсь принять его и проголосовать. благодаря –