2015-06-28 3 views
0

Я создаю сетку как 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МСЕ
теперь мой вопрос, как я могу сделать определение высоты намного быстрее?

ответ

1

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

+0

Я сохраняю высоту для каждой строки, проблема заключается в том, что высота текущего элемента добавляется к общей высоте –

+0

Чтобы лучше понять вашу проблему, вы можете поделиться jsFiddle или CodePen? И если вы не хотите писать свой код, вы всегда можете использовать готовые плагины, например http://masonry.desandro.com/ или http://www.jqueryscript.net/demo/Simple-jQuery-Plugin-To- Create-Pinterest-Style-Grid-Layout-Pinterest-Grid/ Вторая ссылка делает то же самое, что вы хотите .. она изменяет размер от минимальной высоты по умолчанию до фактической высоты плитки после загрузки изображения. –

+0

Я пытался понять, почему .hight() или .outerHeight() были медленными. но похоже, что так оно и есть. Наверное, я слишком придирчив к производительности. но, поскольку вы нашли время, чтобы ответить на вопрос, я собираюсь принять его и проголосовать. благодаря –

Смежные вопросы