2015-09-16 3 views
1

Я делаю отзывчивый сайт отзывчивым. Для мобильного просмотра я пытаюсь показать 3 ли элемента при посадке, нажмите «показать больше» еще 3 загрузки и так далее. Хит показывается меньше, и 3 лица должны быть удалены.Можно ли показать/скрыть элементы li, завернутые в разные div?

Я работаю над проектом с большим количеством элементов li, но задавался вопросом, является ли проблема, с которой я сталкиваюсь, проблема с областью? И если есть способ исправить это.

Проект, в котором я работаю, содержит прокручиваемый div, отображающий элементы li в одном div и скрывающий остальные, пока пользователь не нажмет на стрелку. (вот почему я не переписал код с моего предшественника оригинального сайта, здесь, чтобы проиллюстрировать, что я имею в виду http://www.asla.org/sustainablelandscapes/index.html)

Есть ли решение здесь?

я воссоздал мою проблему (упрощенный) в скрипкой http://jsfiddle.net/gward90/xgmdkpb8/

EDIT: Для дальнейшего уточнения, как видно с скрипкой все литиево элементы показывают на посадку это не должно быть так. Показать меньше удаляет более трех элементов.

<div class="row"> 
    <div class="col-md-12"> 
     <ul class="thumbnails"> 
      <li><div class="red"></div></li> 
      <li><div class="red"></div></li> 
      <li><div class="red"></div></li> 
     </ul> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-md-12"> 
     <ul class="thumbnails"> 
      <li><div class="blue"></div></li> 
      <li><div class="blue"></div></li> 
      <li><div class="blue"></div></li> 
     </ul> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-md-12"> 
     <ul class="thumbnails"> 
      <li><div class="green"></div></li> 
      <li><div class="green"></div></li> 
      <li><div class="green"></div></li> 
     </ul> 
    </div> 
</div> 



<div id="loadMore">Load more</div> 
<div id="showLess">Show less</div> 

$(document).ready(function() { 
$('.thumbnails li:lt(3)').show(); 
$('#showLess').hide(); 
var items = 9; 
var shown = 3; 
$('#loadMore').click(function() { 
    $('#showLess').show(); 
    shown = $('.thumbnails li:visible').size()+3; 
    if(shown< items) {$('.thumbnails li:lt('+shown+')').show();} 
    else {$('.thumbnails li:lt('+items+')').show(); 
     $('#loadMore').hide(); 
     } 
}); 
$('#showLess').click(function() { 
    $('.thumbnails li').not(':lt(3)').hide(); 
}); 
}); 
+0

Я не уверен, я понимаю, что ваш вопрос. Первый абзац имеет смысл для меня. Я не уверен, почему другое релевантно или что это значит? Может быть, я просто замедлен ... – Anders

+0

Привет @Anders, я даю контекст, что фактическая база кода, над которой я работаю, имеет намного больше элементов li. Поскольку javascript не работает, и я думаю, что правильно написал его, мне интересно, есть ли проблема, связанная с тем, что элементы li разделены на 3 разных div, а не один. Наконец, я объясняю, почему 3 divs предназначены для прокручиваемого плагина через рабочий стол. Что вы можете увидеть, если вы перейдете на исходный сайт. Как мой предшественник построил сайт, мне придется полностью переписать, чтобы все работало правильно? Надеюсь, я сделал больше смысла – gwar9

ответ

3

Не уверен, если это то, что вы стремитесь, но это что-то делает, по крайней мере:

var totalCount; //Keeps track of the total number of li's, shown or hidden. 
var currentCount; //Keeps track of the number of li's currently shown. 

$(document).ready(function() { 
    //Count how many li's there are in total. 
    totalCount = $('.thumbnails li').size(); 
    //Start by showing three of them. 
    currentCount = 3; 
    adjustLiShown(); 
    $('#loadMore').click(function() { 
     //Increase by three and update. 
     currentCount += 3; 
     adjustLiShown() 
    }); 
    $('#showLess').click(function() { 
     //Decrease by three and update. 
     currentCount -= 3; 
     adjustLiShown() 
    }); 
}); 

function adjustLiShown() { 
    //Hide all and then show the one with index under total count. 
    $('.thumbnails li').hide().filter(':lt(' + currentCount + ')').show(); 
    //Only show "load more" if we haven't reached the total yet. 
    $('#loadMore').toggle(currentCount < totalCount); 
    //Only show "show less" if we are above the starting number. 
    $('#showLess').toggle(currentCount > 3); 
} 

Fiddle.

+0

Это отличный ответ, есть ли способ реализовать только для мобильного медиа-запроса? Мне не нужна функция hide/show для представлений планшета и рабочего стола. – gwar9

+0

Рад, что это помогло. Проверьте [это] (http://www.wiliam.com.au/wiliam-blog/jquery-and-css-media-queries) и [это] (http://stackoverflow.com/questions/3514784/what- например, «лучший способ-обнаружить-мобильное устройство-в-jquery»). Если вам нужна дополнительная помощь с чем-то более конкретным в отношении обнаружения мобильных устройств, я рекомендую вам задать новый вопрос. – Anders

+0

Еще раз спасибо, я ищу похожие решения. – gwar9

0

Try используя .slice()

$(document).ready(function() { 
    $('.thumbnails li:lt(3)').show(); 
    // hide `.thumbnails` greater than 3 
    $('.thumbnails li:gt(2)').hide(); 
    $('#showLess').hide(); 
    var items = 9; 
    var shown = 3; 
    $('#loadMore').click(function (e) { 
     $('#showLess').show(); 
     $(".thumbnails li:not(:visible)").slice(0, 3) 
     .show(function() { 
      if ($(".thumbnails li:visible").length === items) { 
      $(e.target).hide() 
      } 
     }) 
    }); 
    $('#showLess').click(function (e) { 
     $('.thumbnails li:visible').slice(-3).hide(function() { 
      if ($(".thumbnails li:visible").length === 0) { 
      $(e.target).hide() 
      };     
      if ($('.thumbnails li:visible').length < items) { 
      $("#loadMore").show() 
      } 
     }); 
    }); 
}); 

jsfiddle http://jsfiddle.net/xgmdkpb8/6/

0

Попробуйте это,

$(document).ready(function() { 

    $('.row').hide(); 
    $('.row:eq(0)').show(); 

    var totalElements = $(".thumbnails li").length; 
    var elementsInEachRow = 3; 

    $('#loadMore').click(function() { 

    var lastVisibleElement = $(".thumbnails li").index($(".thumbnails li:visible").last()) + 1; 
    var indexOfRowToHide = (lastVisibleElement/3); 

    $(".row:eq("+indexOfRowToHide+")").show(); 
    $('#showLess').show(); 

    }); 

    $('#showLess').click(function() { 

    var lastVisibleElement = $(".thumbnails li").index($(".thumbnails li:visible").last()) + 1; 
    var indexOfRowToHide = (lastVisibleElement/3) - 1; 

    $(".row:eq("+indexOfRowToHide+")").hide(); 
    $('#loadMore').show(); 

    }); 
}); 

Pen: http://codepen.io/vbrmnd/pen/ZbWEYW

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