Sliders have become an essential part of nearly all the websites we browse through. Generally, they make the webpage appealing to the audience. Today, we’ll learn to build a small 3d slider in ReactJs using the react-slick
library. Documentation can be found here. It is easy to use, and we can create a very attractive slider in only a few minutes.
We use the below command to make a new react application:
npx create-react-app mySlider
Next, we’ll do the necessary cleanup in our application, which includes removing the logo.svg
and tests file from the src
folder.
Next, we need to install some dependencies to use the slick library. We’ll also install react icons, which we’ll use for the next/previous icons in our slider. We’ll run the following command in the terminal to install the packages:
npm i react-icons react-slick slick-carousel
or
yarn add react-icons react-slick slick-carousel
Let’s open the App.js
file and remove all the code in the header element because we’ll be writing our own code. For this application, we create an assets
folder in the src
folder, where we keep a few images to be used in the slider.
First, we’ll import the Slider component ( from ‘react-slick’) and our images from the assets
folder in App.js
, as shown below:
import Slider from "react-slick";
import pic1 from "./assets/Consulting-rafiki.png";
import pic2 from "./assets/Creative writing-rafiki.png";
import pic3 from "./assets/Football Goal-rafiki.png";
import pic4 from "./assets/Researchers-rafiki.png";
import pic5 from "./assets/User research-rafiki.png";
Also, import the previous and next arrows from react-icons library:
import { FaArrowRight, FaArrowLeft } from "react-icons/fa";
Next, we’ll store the images in an array to make it easy to map through them and display on screen:
const images = [pic1, pic2, pic3, pic4, pic5];
We’ll open the Slider
component and map through the images one by one using the map
method inside the return statement of App.js
, as shown below:
<div className="App">
<h1>React 3D Slider</h1>
<Slider>
{images.map((img, idx) => (
<div>
<img src={img} alt={idx} />
</div>
))}
</Slider>
</div>
The slick
library requires us to initialize the settings
object, where we define some rules for our slider. We define the settings
object below and explain the values:
const settings = {
infinite:true, //to allow the slides to show infinitely
lazyLoad: true,
speed: 300, //this is the speed of slider in ms
slidesToShow:3, //number of slides to show up on screen
centerMode: true,
centerPadding: 0,
nextArrow: <NextArrow />, //imported from 'react-icons'
prevArrow: <PrevArrow />, //imported from 'react-icons'
};
Now, in order to iterate through the images one by one we will create an image index and set it to zero initially:
const [imgIndex,setImgIndex] = useState(0)
and in the settings object we will setImgIndex to iterate on next slide:
beforeChange: (current, next) => setImgIndex(next),
We’ll also set the class, ‘active’, to an image if its index is same as the imageIndex
so that it pops up a little on the screen and perform a 3d effect:
return (
<div className="App">
<h1>React 3D Slider</h1>
<Slider {...settings}>
{images.map((img, idx) => (
<div className={idx === imgIndex ? "slide activeSlide" : "slide"}>
<img src={img} alt={idx} />
</div>
))}
</Slider>
</div>
);
Also, we need to define two methods, one for the previous arrow and one for the next arrow, to which we’ll specify the onClick
prop and give the class of next
and prev
for the slides to be shown.
const NextArrow = ({onClick}) => {
return (
<div className="arrow next" onClick={onClick}>
<FaArrowRight />
</div>
)
}
const PrevArrow = ({onClick}) => {
return (
<div className="arrow prev" onClick={onClick}>
<FaArrowLeft />
</div>
)
}
In the App.css
file, we define the styles for the images in each slide and active slides to look bigger than the others. We do not include the stylesheet
here, because we want to keep the article simple. However, click here to view the complete code.
Free Resources