Jump to content

Summary Block: How can I set the Carousel to "autoplay"?

Go to solution Solved by clayyount,

Recommended Posts

Hey. So code works fine, but I can't get my 9 pictures to show up. It always cuts off the last one and shows only 8. I anyway replaced the code with the "var totalGroups=carousel.get('totalGroups');" but does´t help. Thanks for feedback!

Link to comment

Hey. So code works fine, but I can't get my 9 pictures to show up. It always cuts off the last one and shows only 8. I anyway replaced the code with the "var totalGroups=carousel.get('totalGroups');" but does´t help. Thanks for feedback!

Link to comment
  • 3 months later...
  • 2 weeks later...

Just wanted to thank you for this bit of code and function, I've implemented it throughout my site (combatdocket.com), and seen a marked improvement in visitor engagement and retention by providing a rotating summary carousel in several key places, very "eye catching", draws visits to other posts quite nicely.

Link to comment
  • 4 months later...
  • 2 months later...
  • 4 weeks later...
  • 3 weeks later...

Thanks for the code @ghostcat @WTCOC Is it possible for this to work on a page within an index? I'm using the Clay template and I have a couple of Carousel blocks on the homepage, which are part of an index, that I would love to have scrolling. When I view the pages outside of the index the auto scrolling works (with the code in this thread) but not within in the index. If anyone could help I would be so grateful.

Link to comment

This really helped me out — thanks!Is it possible to make this loop when you reach the end, instead of scrolling back to slide 1?So the first slide would be on the right side of the last slide, and it would just start over

Link to comment
  • 4 weeks later...
  • 2 months later...
  • 1 month later...

@benf @socialxdata @barney

This code is working.


<script>
   Y.on('domready', function () {
       var galleries = Y.Squarespace.GalleryManager.getGalleries();
       var duration = 4000;
       var gallery=galleries[0];
       var carousel=gallery["gallery-design"];
       var totalGroups=carousel.get('totalGroups');
       var currentGroup=0
       var container=gallery.get("container");
       var nextBtn=Y.one(gallery.get("elements.next")._nodes[0]).on("click",function(e){
           e.preventDefault();
           e.stopPropagation();
           advanceCarousel()
       })
       var prevBtn=Y.one(gallery.get("elements.previous")._nodes[0]).on("click",function(e){
           e.preventDefault();
           e.stopPropagation();
           backupCarousel()
       })
       Y.one(container._node).get('parentNode').on("mouseover",function(){
           clearInterval(myInterval)
       })
       Y.one(container._node).get('parentNode').on("mouseout",function(){
           clearInterval(myInterval)
           setMyInterval()
       })
       var myInterval;
       function setMyInterval(){
           myInterval = setInterval(function(){
               advanceCarousel()
           },duration)
       }
       setMyInterval();
       function advanceCarousel(){
           if(currentGroup==(totalGroups-1)){
               currentGroup=0;
           }else{
               currentGroup++;
           }   
           carousel.goToGroup(currentGroup);
       }
       function backupCarousel(){
           if(currentGroup==0){
               currentGroup=totalGroups-1
           }else{
               currentGroup--;
           }
           carousel.goToGroup(currentGroup);
       }
   });
</script>


Link to comment
  • 3 weeks later...

I can confirm that the code from @WTCOC is working. Furthermore, if you want to add a source to your testimonial slider, simply paste the person's name into the Tags field, and then when you set your Summary Block, Choose Primary Metadata = Tags. Here's some custom code to stop the tags being clickable, and also to add a long dash before the tag/person's name:


.summary-metadata-item--tags a:before {
 content: "–  ";
}
.summary-metadata-item--tags a{
  pointer-events: none;
  cursor: default;
}


Link to comment

And here's some more to add curly quotes before/after the excerpt, if you don't wanna type them every time:


.sqs-block-summary-v2 .summary-excerpt p:before {
   content: "“";
}
.sqs-block-summary-v2 .summary-excerpt p:after {
   content: "”";
}


Link to comment
  • 2 weeks later...
  • 2 weeks later...
  • 4 weeks later...

Thanks @WTCOC, that code works for me. Two questions though - 1) is there a way to make it shift only one image at a time, rather than all at once? and 2) is there a way to make it display only one column when viewed on mobile? Thanks in advance for your guidance!

Link to comment
  • 2 weeks later...

SOLUTION FOR MULTIPLE GALLERIES

Using the code from @WTCOC, you can hack the autoplay to work on multiple galleries by duplicating the whole code and replacing one line:

In the duplicated code, change:


var gallery=galleries[0];

to:


var gallery=galleries[1];

You should be able to do this as many times necessary for the number of galleries on your page by repeating the code and changing the number. It may not be the most concise approach but it get's the job done with little effort, especially if you're not comfortable modifying the body of the code!

Link to comment
  • 1 month later...

Hi @wtcoc @benf @ghostcat,I've tried this code (this one here => Answer by WTCOC · Nov 13, 2017 at 04:24 PM) and the very first one on this post by @ghostcat and it seems to work on my site while I'm logged in inside Squarespace, but when I test it from the out, it doesn't scroll.I'm using Bedford. Also, I don't even need it to loop - would be great, but not fussed about the loop. It can be a simple autoplay for my summary carousel (of testimonials saved as 'blogs'). Could you help? Here's the page in question: innovatorsbox.comThanks in advance.

Link to comment
  • 1 month later...

In case someone wants to customize a specific gallery, you can find it by section name. You can make a section with a slug, for example: "home-testimonials". Then, find the gallery that resides inside this container.

Example:


<script>  
 Y.on('domready', function () {
   try {
     var container = Y.one("#home-testimonials");
     var gallery = Y.Squarespace.GalleryManager.getGalleryByContainer(container);
     gallery.setAttrs({
       "autoplay":true,
       "autoplayOptions": {
         "timeout":20000,
         "randomize": true
       }
     });
   } catch (e) {
     console.error("Could not configure Gallery autoplay.", e);
   }
 });
</script>




Edited by Guest
Initial Revision
Link to comment
  • 2 months later...

It works great but it scrolls between the gallery entries way too fast. If you change the duration variable it just changes the rate at which the gallery transitions between slides.

Does anyone know how to add a pause in between changes? So after it switches to a new item, wait X amount of seconds?

Also is there a way to temporarily disable the function when a user manually clicks the scroll to the next gallery item?

Link to comment
  • 6 months later...

I've been using this code for a few years now and it seems that it just recently broke on [my site][1]. I didn't initially notice the carousel had broken, but that my top navigation links had disappeared, a bug that I've encountered before with bad code injection.

I haven't been able to figure out how to fix the carousel but by changing the first line from

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

×
×
  • Create New...

Squarespace Webinars

Free online sessions where you’ll learn the basics and refine your Squarespace skills.

Hire a Designer

Stand out online with the help of an experienced designer or developer.