карусель отображает только видимые элементы

Я хотел бы настроить таргетинг только на видимые элементы в карусели caroufredsel и настроить отображение невидимых элементов: none; чтобы минимизировать время загрузки страницы.

Я видел несколько сообщений об этом, но не нашел ничего, что работает. Кто-нибудь может мне помочь?

Примечание. Я использую Drupal, поэтому использую jQuery вместо $.

HTML:

<div class="homepageHeroCarousel"><!-- class of slide for animation -->
  <div class="carousel-inner">
    <ul>
      <li>
        <div class="item">
          <img class="img-responsive" src="sites/all/themes/visit_mendocino/assets/images/hero01.jpg" width="2000" height="900" alt="" />
          <div class="container">
            <div class="caption">
              <h2><a href="#">Scenic Drive on Highway 1</a></h2>
              <p>Getting here is only part<br/>of the experience.</p>
              <a href="#" class="btn btn-primary" tabindex="7">Learn More</a>
            </div>
          </div><!-- end caption -->
        </div>
      </li>
      <li>
        <div class="item">
          <img class="img-responsive" src="sites/all/themes/visit_mendocino/assets/images/hero02.jpg" width="2000" height="900" alt="" />
          <div class="container">
            <div class="caption">
              <h2><a href="#">Fern Canyon Waterfall</a></h2>
              <p>Meander through lush ground and connect with the sounds of the forest.</p>
              <a href="#" class="btn btn-primary" tabindex="8">Learn More</a>
            </div>
          </div><!-- end caption -->
        </div>
      </li>
    </ul>
  </div>
  <a class="prev" id="home_prev" href="#"><i class="fa fa-angle-left fa-3x">&#8203;</i></a>
  <a class="next" id="home_next" href="#"><i class="fa fa-angle-right fa-3x">&#8203;</i></a>
  <!-- <div class="controls"></div> -->
</div>

jQuery:

jQuery(window).load(function(){
  var carousel = jQuery(".homepageHeroCarousel .carousel-inner ul");
  carousel.carouFredSel({
    circular: true,
    infinite: false,
    responsive: true,
    items: {
      visible: 1,
      minimum: 1,
      width: 1170
    },
    scroll: {
      fx: "scroll",
      easing: "linear",
      duration: 1000,
      onAfter: function() {
        var vis = jQuery(".homepageHeroCarousel .carousel-inner ul").triggerHandler("currentVisible");       //get all visible items
        jQuery(".homepageHeroCarousel .carousel-inner ul").children().removeClass("active");                 // remove all .active classes
        vis.filter(":eq(1)").addClass("active");
      }
    },
    auto: false,
    prev : "#home_prev",
    next : "#home_next",
    //pagination: ".homepageHeroCarousel  .controls",
    onCreate: function () {
      jQuery(window).on('resize', function () {
        carousel.parent().add(carousel).height(carousel.children().first().height());
      }).trigger('resize');
      var vis = jQuery(".homepageHeroCarousel .carousel-inner ul").triggerHandler("currentVisible");       //get all visible items
      jQuery(".homepageHeroCarousel .carousel-inner ul").children().removeClass("active");                 // remove all .active classes
      vis.filter(":eq(1)").addClass("active");
    }
  });
});
jQuery(document).ready(function() {  
     jQuery(".homepageHeroCarousel .carousel-inner ul").swiperight(function() {  
        jQuery('#home_prev').click();  
        });  
     jQuery(".homepageHeroCarousel .carousel-inner ul").swipeleft(function() {  
        jQuery('#home_next').click();
   });  
});

person samhadr    schedule 13.12.2013    source источник
comment
Установка элементов на display: none; не уменьшит время загрузки страницы.   -  person DrCord    schedule 14.12.2013
comment
Учитывая, что (как заявил @DrCord) установка элементов на display:none; не уменьшит время загрузки, чего вы пытаетесь достичь?   -  person Melissa Avery-Weir    schedule 19.12.2013


Ответы (1)


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

http://coolcarousels.frebsite.nl/c/14/

Я попробовал этот пример, но, похоже, он не работает, если вы нажмете предыдущую кнопку. Это также просто какой-то глючный вообще. Даже на одном ползунке не всегда работает следующая кнопка. Шанс 1/10 или около того, что отложенная загрузка не удалась, а изображение-заполнитель все еще отображается. Может, меньше. Но все равно иногда не получается. Предыдущий почти всегда выходит из строя. Для нескольких ползунков требуется изменение функции или несколько одинаковых функций с переменными с разными именами. Кроме того, работает только на одиночных ползунках. Я считаю, что это не работает, когда видны несколько элементов. У меня есть отзывчивый сайт с максимальным видимым 3 и минимальным видимым 1, поэтому он меняется от 3 до 2 до 1 элемента, в зависимости от размера экрана. У меня прокрутка установлена ​​на 1 элемент, поэтому видны 3, и она прокручивается по кругу, по 1 за раз. Предварительная загрузка никогда не работает, скорее, она пытается работать при втором щелчке прокрутки и захватывает неправильные изображения, потому что переменная для функции ленивой загрузки остается старым значением.

события carouFredSel slideTo/slideToPage

Это была попытка добавить активный класс для поиска правильных индексов для ленивой загрузки правильных изображений и получения правильных источников изображений для каждого слайда и т. д. У меня это тоже не работает для нескольких видимых элементов.

carouFredSel добавить класс к активному слайду

У меня это тоже не заработало. В целом, я думаю, что идея состоит в том, чтобы всегда фактически загружать первое изображение, без ленивой загрузки или каких-либо видимых элементов, которые должны быть там при загрузке. Затем вы можете либо включить следующий и предыдущий слайды, либо лениво загрузить их вскоре после загрузки страницы, это не имеет большого значения - в любом случае при загрузке необходимо подготовить следующий и предыдущий слайды.

Затем каждый раз, когда ползунок перемещается к следующему или предыдущему слайду, вам нужно использовать javascript (во время событий onAfter или onBefore для CarouFredsel), чтобы еще раз лениво загрузить следующий и предыдущий слайды, соответствующие новому текущему слайду. Я не уверен на 100%, как это можно сделать, и сам работаю над этим, но, вероятно, «активный» класс должен быть добавлен ко всем видимым элементам (даже в случае переменных видимых элементов (минимум и максимум)), а затем JS следует использовать для проверки индексов элементов с активным классом и ленивой загрузки элемента с 1 более высоким индексом, чем последний элемент с активным, и ленивой загрузки элемента с 1 более низким индексом, чем первый элемент с активным.

Я напишу, когда получу ответ, но если кто-то прочитает это сегодня или завтра и получит ответ, пожалуйста, дайте нам знать. ТАКЖЕ, пожалуйста, не забудьте включить корректировку высоты из исходного вопроса samhdir. Кажется, он фиксирует высоту контейнера ползунка, чтобы она равнялась первому слайду (надеюсь, он также сочетает это со сценарием, который делает все слайды равными самому высокому слайду). мне это тоже понадобится. Мой сайт разработки: uo-new.unaomnia.com и мой основной сайт: unaomnia.com

person OMNIA Design and Marketing    schedule 15.11.2014