2016-01-24 4 views
0

Есть ли простой способ объединить две строки в bootstrap с jquery, основанный на действиях пользователя?Объединить строки бутстрапа при изменении размера

В моем приложении пользователь перемещает панель слайдов, и я хочу, чтобы сетка 4x4 превратилась в сетку 3x3. Понимает, как я сортирую свои столбцы.

enter image description here

enter image description here

Я не могу понять, как правильно перенастроить строки. Я надеюсь там что-то там, я пропустил, что делает это для меня.

$slider.slider({ 
      max: 80, 
      step: 20, 
      min:0, 
      value:0, 
      orientation: 'horizontal', 
      range: 'min', 
      slide: function(event, ui) { 
       if(ui.value < 20){ 
        $(".cellsize").removeClass("col-md-4"); 
        $(".cellsize").addClass("col-md-3"); 
        $(".cellbutton").removeClass("btn-lg").addClass("btn-sm"); 

       }else if(ui.value >= 20 && ui.value < 40){ 

        $(".cellbutton").removeClass("btn-sm").addClass("btn-md").removeClass("btn-lg"); 
        $(".cellsize").removeClass("col-md-3"); 
        $(".cellsize").addClass("col-md-4"); 
        $(".cellsize").removeClass("col-md-5"); 
       }else if(ui.value >= 40 && ui.value < 60){ 
        $(".rowcell2").addClass("row") 
        $(".rowcell").removeClass("row") 
        $(".cellbutton").removeClass("btn-md").addClass("btn-lg").removeClass("btn-block"); 
        $(".cellsize").removeClass("col-md-4"); 
        $(".cellsize").addClass("col-md-5"); 
        $(".cellsize").removeClass("col-md-6"); 
       }else if (ui.value >=60 && ui.value < 80){ 
        $(".cellbutton").removeClass("btn-lg").addClass("btn-block"); 
        $(".cellsize").removeClass("col-md-5"); 
        $(".cellsize").addClass("col-md-6") 
        $(".cellsize").removeClass("col-md-12"); 
       }else{ 
        $(".cellsize").addClass("col-md-12") 
        $(".cellsize").removeClass("col-md-6"); 

       } 
       } 
     }).addSliderSegments(); 

До сих пор мои попытки заключались в том, чтобы попытаться удалить строки в зависимости от текущего размера столбцов.

Обновление С помощью html, я использую язык шаблонов django. Я могу опубликовать его html, если необходимо.

  <div class = "col-md-12"> 
          {% for card in cards %} 
           {%if forloop.counter0|divisibleby:4%} 
             {%if forloop.counter0 != 0%} 
              </div> 
             {%endif%} 
             <div class = "row"> 
           {% endif %} 
           <div class = " cellsize col-md-3 "> 
            <div id = "cell{{card.id}}"> 
            <ul class="list-group " id = "cellwidth{{card.id}}"> 
             <!--- ommited ---> 

            </ul> 
            </div> 
           </div>         
          {%endfor%} 

`

+0

Если вы превратите сетку 4x4 в 3x3, у вас теперь есть девять элементов вместо 16 - какие из них вы хотите отобразить в этом случае? первые 9? или должен ли он просто перейти от 4 x 'n' к 3 x 'n' и показать все элементы? Кроме того, отправьте свой HTML-код - это несколько угадающая игра, предлагающая модифицированный JS, не зная HTML-структуры. – ryantdecker

+0

Извините, а не 4x4 i ment 4 x n до 3 x n –

+0

Итак, второе изображение над желаемым результатом (каждый 4-й элемент в новой строке, выровненный справа)? или вы предпочитаете, чтобы при изменении настройки у вас было все в полных рядах по три (первая строка - это позиции 1,2,3 - следующая строка 4,5,6 и т. д.)? – ryantdecker

ответ

1

К сожалению, нет простого способа сделать это, используя Bootstrap. Вам нужно будет написать собственную логику самостоятельно, что действительно не стоит того, учитывая, что есть несколько библиотек, которые уже делают это очень хорошо. Вы должны проверить что-то вроде Isotope или Masonry, оба из которых я использовал в прошлом, и будут делать именно то, что вы хотите, только с несколькими строками JavaScript.

+0

Назовите меня сумасшедшим, но вопрос был здесь в течение 20 минут, и уже принятый ответ заключается в том, что это невозможно сделать? Yikes ... – ryantdecker

+0

Это не то, что это невозможно сделать; это то, что он не может быть выполнен по умолчанию Bootstrap. Этот тип реагирования не поддерживается сетчатой ​​системой Bootstrap. OP может определенно написать собственный JS-код, чтобы сделать это, но есть много бесплатных библиотек, которые уже доступны, которые делают именно то, что хочет/нуждается OP, которые уже были широко протестированы. – michael

+0

Я не согласен, что для этого есть инструменты, но без подробностей о том, какой желаемый результат или даже зная структуру HTML, это просто кажется преждевременным. Почему бы не изучить его еще немного, прежде чем переходить в дополнительную библиотеку? Вполне возможно, что я полностью соглашусь с вами, но опять же, может быть, есть еще кое-что :-) – ryantdecker

1

Если цель состоит в том, чтобы иметь «полные» строки при каждом повторном размере на основе загрузочного класса, который вы добавляете и удаляете, возможно, вам действительно не нужны все строки, которые будут обернуты в строку начальной загрузки (<div class="row"> isn «т обязательно должны иметь ряд визуально)

Вот codepen, которая иллюстрирует это поведение при изменении размеров экрана (воспользовавшись бутстрап сетки и медиа-запросов):. http://codepen.io/anon/pen/KVQbKm

Это звучит, как вы хотите если пользователь установил количество столбцов, и, хотя это не поведение по умолчанию для начальной загрузки, похоже, что вы в порядке с добавлением/удалением классов для этого, и у вас есть правильный идентификатор ea, что изменение с col-md-3 на col-md-4 действительно изменит элементы от 4 до 3 в поперечнике. Так может случиться так, что то, что у вас будет, будет работать нормально, если вы просто обернете все элементы в одной строке начальной загрузки и позвольте ширине элементов определять, как много поместится в визуальной строке, так как они естественным образом будут течь, когда пространство не будет доступный.

Не видя HTML, трудно сказать, будет ли ваш jQuery работать точно так, как есть, но если он не хочет добавлять собственный код, а также любое объяснение того, что не работает, - с удовольствием взглянуть.

+0

Вот что я буду делать. Если не происходит что-то еще, требующее, чтобы каждый набор столбцов фактически находился в строках, вы можете просто обернуть 8 или 12 или любые элементы столбца в одном контейнере .row, а затем изменить col-md-4 на col-md-3 и назад. Проблемы обычно возникают, когда у вас есть столбцы с разной высотой, и в этом случае вам может быть лучше использовать кладку или другую библиотеку для обработки сетки для этого раздела. Если все элементы имеют равную высоту или вы можете определить высоту каждого столбца, это будет работать нормально. – tayvano

+0

Я «экспериментирую с советами этого сообщения. Каждая ячейка имеет отзывчивое изображение, поэтому высоты немного меняются. Если высоты будут проблемой, другим решением будет масштабировать изображение вниз и сделать каждую ячейку фиксированной высотой? –

+1

Являются ли столбцы только изображением? Или изображение с текстом внизу? Если бы просто изображение, я бы изменил изображение на div, дайте div, который примерно такой же, как исходное изображение, и примените изображение через фоновое изображение с фоном размера обложки. Это устранит любые незначительные различия в высоте, придав ему чистый вид и устраняя проблемы с высотой. – tayvano

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