191 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			191 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Guide to Build a Sliding Image Gallery | ||
|  | --- | ||
|  | This tutorial will walk you through building an image slider using the <a href='https://jquery.com/' target='_blank' rel='nofollow'>jQuery</a> library. | ||
|  | 
 | ||
|  | [](https://codepen.io/atjonathan/pen/BKMxxq) | ||
|  | 
 | ||
|  | This tutorial will have four parts:   | ||
|  | - [HTML](#html)   | ||
|  | - [SCSS](#scss)   | ||
|  | - [JS](#js)   | ||
|  | - [References](#references) | ||
|  | 
 | ||
|  | ## HTML
 | ||
|  | 
 | ||
|  | We will be using <a href='http://getbootstrap.com/' target='_blank' rel='nofollow'>Bootstrap</a> for this tutorial to keep things looking good, without spending a lot of time. | ||
|  | 
 | ||
|  | Our structure will be as follows: | ||
|  | 
 | ||
|  |     <div class="container"> | ||
|  | 
 | ||
|  |       <!-- The wrapper for our slider --> | ||
|  |       <div class="slider"> | ||
|  |         <ul class="slides"><!-- Each image will be inside this unordered list --></ul> | ||
|  |       </div> | ||
|  | 
 | ||
|  |       <div class="buttons"><!-- Pause and play buttons will go in here --></div> | ||
|  | 
 | ||
|  |     </div> | ||
|  | 
 | ||
|  | Inside our `ul` with the class of `slides` we will have the following: | ||
|  | 
 | ||
|  |     <li class="slide"><img src="#" /></li> | ||
|  |     <li class="slide"><img src="#" /></li> | ||
|  |     <li class="slide"><img src="#" /></li> | ||
|  |     <li class="slide"><img src="#" /></li> | ||
|  |     <li class="slide"><img src="#" /></li> | ||
|  | 
 | ||
|  | Inside our `.buttons` class you should have the following: | ||
|  | 
 | ||
|  |     <button type="button" class="btn btn-default pause"> | ||
|  |     	<span class="glyphicon glyphicon-pause"></span> | ||
|  |     </button> | ||
|  |     <button type="button" class="btn btn-default play"> | ||
|  |     	<span class="glyphicon glyphicon-play"></span> | ||
|  |     </button> | ||
|  | 
 | ||
|  | Here is an example of what your `html` should look like: | ||
|  | 
 | ||
|  | > Note: You should replace the image `src` attribute with your own content.
 | ||
|  | 
 | ||
|  |     <div class="container"> | ||
|  | 
 | ||
|  |       <div class="slider"> | ||
|  |         <ul class="slides"> | ||
|  |           <li class="slide"><img src="https://unsplash.it/1280/720/?image=120" /></li> | ||
|  |           <li class="slide"><img src="https://unsplash.it/1280/720/?image=70" /></li> | ||
|  |           <li class="slide"><img src="https://unsplash.it/1280/720/?image=50" /></li> | ||
|  |           <li class="slide"><img src="https://unsplash.it/1280/720/?image=170" /></li> | ||
|  |           <li class="slide"><img src="https://unsplash.it/1280/720/?image=190" /></li> | ||
|  |         </ul> | ||
|  |       </div> | ||
|  | 
 | ||
|  |       <div class="buttons"> | ||
|  |         <button type="button" class="btn btn-default pause"> | ||
|  |           <span class="glyphicon glyphicon-pause"></span> | ||
|  |         </button> | ||
|  |         <button type="button" class="btn btn-default play"> | ||
|  |           <span class="glyphicon glyphicon-play"></span> | ||
|  |         </button> | ||
|  |       </div> | ||
|  | 
 | ||
|  |     </div> | ||
|  | 
 | ||
|  | ## SCSS
 | ||
|  | 
 | ||
|  | We are using <a href='http://sass-lang.com/' target='_blank' rel='nofollow'>Sass</a> and the SCSS syntax so we can nest and use variables  | ||
|  | 
 | ||
|  | We can use the following SCSS to define our styling: | ||
|  | 
 | ||
|  |     // Variables | ||
|  |     $width: 720px; | ||
|  | 
 | ||
|  |     .slider { | ||
|  |       width: $width; | ||
|  |       height: 400px; | ||
|  |       overflow: hidden; | ||
|  |       margin: 0 auto; | ||
|  |       text-align: center; | ||
|  | 
 | ||
|  |       .slides { | ||
|  |         display: block; | ||
|  |         width: 6000px; | ||
|  |         height: 400px; | ||
|  |         margin: 0; | ||
|  |         padding: 0; | ||
|  |       } | ||
|  | 
 | ||
|  |       .slide { | ||
|  |         float: left; | ||
|  |         list-style-type: none; | ||
|  |         width: $width; | ||
|  |         height: 400px; | ||
|  | 
 | ||
|  |         img { | ||
|  |           width: 100%; | ||
|  |           height: 100%; | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     .buttons { | ||
|  |       margin: 0; | ||
|  |       width: $width; | ||
|  |       position: relative; | ||
|  |       top: -40px; | ||
|  |       margin: 0 auto; | ||
|  | 
 | ||
|  |       .play { | ||
|  |         display: none; | ||
|  |       } | ||
|  | 
 | ||
|  |       .btn { | ||
|  |         display: flex; | ||
|  |         margin: 0 auto; | ||
|  |         text-align: center; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  | ## JS
 | ||
|  | 
 | ||
|  | #### Variables
 | ||
|  | 
 | ||
|  | _In the following code snippet, we define variables used later in our code._ | ||
|  | 
 | ||
|  |     var animationSpeed = 1000; // How quickly the next slide animates. | ||
|  |     var pause = 3000; // The pause between each slide. | ||
|  | 
 | ||
|  | We will use a blank variable where we will call the `setInterval` method:   | ||
|  | 
 | ||
|  |     var interval; | ||
|  | 
 | ||
|  | #### Animation We will wrap our slider animations inside a function:  
 | ||
|  | 
 | ||
|  |     function startSlider() {} | ||
|  | 
 | ||
|  | We are using the `setInterval()` native JavaScript method to automate the contents of the function on a time based trigger.   | ||
|  | 
 | ||
|  |     interval = setInterval(function() {}, pause); | ||
|  | 
 | ||
|  | We use the `pause` variable to see how many milliseconds to wait before calling the function again. Read more on the native `setInterval` method here: https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval. Inside our function we will use jQuery to fade between slides at the speed of the animationSpeed variable:   | ||
|  | 
 | ||
|  |     $('.slides > li:first') | ||
|  |       .fadeOut(animationSpeed) | ||
|  |       .next() | ||
|  |       .fadeIn(animationSpeed) | ||
|  |       .end() | ||
|  |       .appendTo('.slides'); | ||
|  | 
 | ||
|  | - We are targeting the first slide using `$('.slides > li:first')`. - `.fadeOut(animationSpeed)` will fade the first slide out and then using `.next()`, we move to the next slide. - Once we have moved to the next slide, we will fade it in: `.fadeIn(animationSpeed)`. - This sequence will continue until the last slide (`.end()`), then we stop the animation. We will now call the `startSlider` function to start the animation:   | ||
|  | 
 | ||
|  |     startSlider(); | ||
|  | 
 | ||
|  | #### Play and Pause *This feature is optional, but quite easy to implement.* We will hide the play button, so we don't see both the play and pause buttons:  
 | ||
|  | 
 | ||
|  |     $('.play').hide(); // Hiding the play button. | ||
|  | 
 | ||
|  | We will now create our pause button (automatically shown on page load):   | ||
|  | 
 | ||
|  |     $('.pause').click(function() { | ||
|  |     	clearInterval(interval); | ||
|  |     	$(this).hide(); | ||
|  |     	$('.play').show(); | ||
|  |     }); | ||
|  | 
 | ||
|  | - We will call our function every time the pause button is clicked using jQuery. - We will remove the interval using the `clearInterval` method and using our `interval` variable as the parameter, indicating which interval to stop. - Because our slider is paused, we will hide the pause button using `$(this).hide();`. Note: we are using `this`, which will refer to what our parent is calling i.e. `.pause`. - We will then show our play button so the user can resume the animation: `$('.play').show();`. The following code sets up our play button (automatically hidden on page load):   | ||
|  | 
 | ||
|  |     $('.play').click(function() { | ||
|  |     	startSlider(); | ||
|  |     	$(this).hide(); | ||
|  |     	$('.pause').show(); | ||
|  |     }); | ||
|  | 
 | ||
|  | *   We will call our function every time the play button is clicked using jQuery. | ||
|  |     *   We will start or restart the interval using the `startSlider` function. | ||
|  |     *   Because our slider is currently playing, we will hide the play button using `$(this).hide();`. Note: we are using `this`, which will refer to what our parent is calling i.e. `.play`. | ||
|  |     *   We will then show our pause button so the user can stop the animation at will: `$('.pause').show();`. | ||
|  | 
 | ||
|  | ## References
 | ||
|  | 
 | ||
|  | *   Checkout the source code and example on <a href='https://codepen.io/atjonathan/pen/BKMxxq' target='_blank' rel='nofollow'>CodePen</a> for this tutorial. |