Нужна помощь - не могу запустить скрипт на два слайдера

#1 16 мая 2019 в 09:52
На сайте хочу реализовать две карусели. Не могу понять что следует подправить в скрипте чтобы работало 2 карусели, то есть на каждую карусель по данному скрипту.
Не работает именно автопрокрутка, все остальное работает. При запуске двух каруселей, одна прокручивается (авто) а вторая нет.

  1.  
  2. <script>
  3. //Обработка клика на стрелку вправо
  4. $(document).on('click', ".carousel-button-right",function(){
  5. var carusel = $(this).parents('.carousel');
  6. right_carusel(carusel);
  7. return false;
  8. });
  9. //Обработка клика на стрелку влево
  10. $(document).on('click',".carousel-button-left",function(){
  11. var carusel = $(this).parents('.carousel');
  12. left_carusel(carusel);
  13. return false;
  14. });
  15. function left_carusel(carusel){
  16. var block_width = $(carusel).find('.carousel-block').outerWidth();
  17. $(carusel).find(".carousel-items .carousel-block").eq(-1).clone().prependTo($(carusel).find(".carousel-items"));
  18. $(carusel).find(".carousel-items").css({"left":"-"+block_width+"px"});
  19. $(carusel).find(".carousel-items .carousel-block").eq(-1).remove();
  20. $(carusel).find(".carousel-items").animate({left: "0px"}, 200);
  21.  
  22. }
  23. function right_carusel(carusel){
  24. var block_width = $(carusel).find('.carousel-block').outerWidth();
  25. $(carusel).find(".carousel-items").animate({left: "-"+ block_width +"px"}, 200, function(){
  26. $(carusel).find(".carousel-items .carousel-block").eq(0).clone().appendTo($(carusel).find(".carousel-items"));
  27. $(carusel).find(".carousel-items .carousel-block").eq(0).remove();
  28. $(carusel).find(".carousel-items").css({"left":"0px"});
  29. });
  30. }
  31.  
  32. $(function() {
  33. //Раскомментируйте строку ниже, чтобы включить автоматическую прокрутку карусели
  34. auto_right('.carousel:first');
  35. })
  36.  
  37. // Автоматическая прокрутка
  38. function auto_right(carusel){
  39. setInterval(function(){
  40. if (!$(carusel).is('.hover'))
  41. right_carusel(carusel);
  42. }, 3000)
  43. }
  44. // Навели курсор на карусель
  45. $(document).on('mouseenter', '.carousel', function(){$(this).addClass('hover')})
  46. //Убрали курсор с карусели
  47. $(document).on('mouseleave', '.carousel', function(){$(this).removeClass('hover')})
  48. </script>
  49.  
#2 16 мая 2019 в 10:05


  1.  
  2. $(function() {
  3. //Раскомментируйте строку ниже, чтобы включить автоматическую прокрутку карусели
  4. auto_right('.carousel:first');
  5. })
auto_right('.carousel:first'); — для первого блока с классом .carousel. Тут цикл $.each() скорей всего понадобится, хз

Виктор

Вот схема вывода, с этим циклом еще не знакома))

  1.  
  2. <div class="carousel shadow">
  3. <div class="carousel-button-left"><a href="#"></a></div>
  4. <div class="carousel-button-right"><a href="#"></a></div>
  5. <div class="carousel-wrapper">
  6. <div class="carousel-items">
  7. {assign var="col" value="1"}
  8. {foreach key=tid item=item from=$items}
  9. {if $col==1} <tr> {/if}
  10. <td valign="top" width="{$colwidth}%">
  11. <div class="item_wrap">
  12. <div class="carousel-block">
  13. <div class="categs">
  14. {if $cfg.show_title}
  15. <div class="titles">
  16. <a style="color: #fff;"href="/shop/{$item.seolink}.html">{$item.title}</a>
  17. </div>
  18. {/if}
  19. <div class="image">
  20. <a href="/shop/{$item.seolink}.html" title="{$item.title}">
  21. <img class="imags"src="/images/photos/small/{$item.filename}" border="0"/>
  22. {if $cfg.show_hit_img && $item.is_hit}<div class="is_hit"></div>{/if}
  23. </a>
  24. </div>
  25. </div>
  26. </div>
  27. </div>
  28. </td>
  29. {if $col==$cfg.cols} </tr> {assign var="col" value="1"} {else} {math equation="x + 1" x=$col assign="col"} {/if}
  30. {/foreach}
  31. </div>
  32. </div>
  33.  
  34.  
#3 16 мая 2019 в 12:21


Попробуйте эти строки заменить (ТОЛЬКО ЭТИ!!!!)


  1.  
  2. $(function() {
  3. //Раскомментируйте строку ниже, чтобы включить автоматическую прокрутку карусели
  4. auto_right('.carousel:first');
  5. })
  6.  
  7. // Автоматическая прокрутка
  8. function auto_right(carusel){
  9. setInterval(function(){
  10. if (!$(carusel).is('.hover'))
  11. right_carusel(carusel);
  12. }, 3000)
  13. }
  14.  
на эти

  1.  
  2. function right_carusel_ANALOG(carusel){
  3. var block_width = carusel.find('.carousel-block').outerWidth();
  4. carusel.find(".carousel-items").animate({left: "-"+ block_width +"px"}, 200, function(){
  5. carusel.find(".carousel-items .carousel-block").eq(0).clone().appendTo(carusel.find(".carousel-items"));
  6. carusel.find(".carousel-items .carousel-block").eq(0).remove();
  7. carusel.find(".carousel-items").css({"left":"0px"});
  8. });
  9. }
  10.  
  11. $(function() {
  12. //Раскомментируйте строку ниже, чтобы включить автоматическую прокрутку карусели
  13. auto_right('.carousel');
  14. })
  15.  
  16. // Автоматическая прокрутка
  17. function auto_right(carusel){
  18. $.each($(carusel),function(i,v){
  19. setInterval(function(){
  20. if (!$(this).is('.hover'))
  21. right_carusel_ANALOG($(this));
  22. }, 3000)
  23. })
  24. }
  25.  

Виктор

Да 1 ветка.
Крутится, но та карусель которую не трогали не прокручивается теперь, только дергается и встает на первичное положение. Наверное другое решение нужно поискать верно, чем с этим возиться?
#4 16 мая 2019 в 18:49


а лучше так даже


  1.  
  2. $(function() {
  3. //Раскомментируйте строку ниже, чтобы включить автоматическую прокрутку карусели
  4. $.each($('.carousel'),function(){
  5. auto_right(this);
  6. });
  7. })
  8.  
  9. // Автоматическая прокрутка
  10. function auto_right(carusel){
  11. setInterval(function(){
  12. if (!$(carusel).is('.hover'))
  13. right_carusel(carusel);
  14. }, 3000)
  15. }
  16.  

Виктор

Спасибо большое. Этот пример заработал. Прокрутка у карусели в которой заменили код идет нормально (выйдет позиция товара, ожидание потом прокрутка на одну позицию вперед). В карусели в которой ничего не трогали (код который по умолчанию) прокрутка изменилась, прокручивается не на 1 позицию вперед а примерно на 2 или 2 с половиной. Видимо где то есть конфликт. В принципе не критично, можно иконки товаров увеличить и все будет помещаться.
Ну в знак благодарности я 25 числа могу Вам скинуть на кофе и мороженное laughпришлите реквизиты в личку.
#5 16 мая 2019 в 20:57


@Dina,

то есть на каждую карусель по данному скрипту.

@Dina
— тоесть код на странице дублируется? можно ссылку на сайт? я просто с 1.х версиями не сталкивался, не знаю: JavaScript-код прописан в файле шаблона карусели в теге , или вынесен в отдельный .js-файл? если код на странице дублируется, то

прокручивается не на 1 позицию вперед а примерно на 2 или 2 с половиной

скорей всего из-за этого scratch

Виктор

Да код на странице дублируется. Код прописываю напрямую в шаблон модуля. Код прописан в файле (шаблона карусели) вот сайт тут
#6 17 мая 2019 в 09:36


да, один надо удалить. только что у себя просмотрел — с одним экземпляром оба слайдера работают нормально. все, что внутри тегов , вынесите в отдельный файл и пропишите в главный файл шаблона ПОСЛЕ СТРОКИ, где подключается jQuery в файле /templates/_default_/template.php на примерно 24 строке, после

  1.  
  2. $this->prependHeadJS('includes/jquery/jquery.js');
  3.  
  1.  
  2. $this->addHeadJS('templates/'.TEMPLATE.'/этот-js-файл.js');
  3.  
(из исходного кода HTML-страницы, примерно такого содержания)

Виктор

Отлично, скрипт хотела вынести позже, после завершения работы. а в итоге надо сразу выносить (буду знать). Спасибо большое за помощь!
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.