Hello Coders! Welcome to another JavaScript Blog. In this, we're going to see how to create a Custom Pagination Arrows. You have seen such pagination designs in many websites which allows you to see more relatable content on the next page. This is a design of pagination for you to use in your project as well.
Here's a preview -
That being said, let us get started.
Step - 1: Like always, create 3 files - index.html, style.css and script.js.
Step - 2: Copy the below HTML code and paste it into your code editor.
HTML
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>Flexing pagination arrows</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
<link rel="stylesheet" href="./style.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
</head>
<body>
<div class="counter"></div>
<button class="paginate left"><i></i><i></i></button>
<button class="paginate right"><i></i><i></i></button>
<script src="./script.js"></script>
</body>
</html>
Step - 3: Below is the CSS code for styling.
CSS
@import url('https://fonts.googleapis.com/css?family=Poppins:300,400,900&display=swap');
body {
background: #f6f7fc;
}
button {
-webkit-appearance: none;
background: transparent;
border: 0;
}
.paginate {
outline: none;
position: relative;
margin: 10px;
width: 50px;
height: 50px;
cursor: pointer;
position: absolute;
top: 50%;
margin-top: -20px;
}
.paginate i {
position: absolute;
top: 40%;
left: 0;
width: 50px;
height: 5px;
border-radius: 2.5px;
background: #463f57;
transition: all 0.15s ease;
}
.paginate.left {
right: 58%;
}
.paginate.left i {
transform-origin: 0% 50%;
}
.paginate.left i:first-child {
transform: translate(0, -1px) rotate(40deg);
}
.paginate.left i:last-child {
transform: translate(0, 1px) rotate(-40deg);
}
.paginate.left:hover i:first-child {
transform: translate(0, -1px) rotate(30deg);
}
.paginate.left:hover i:last-child {
transform: translate(0, 1px) rotate(-30deg);
}
.paginate.left:active i:first-child {
transform: translate(1px, -1px) rotate(25deg);
}
.paginate.left:active i:last-child {
transform: translate(1px, 1px) rotate(-25deg);
}
.paginate.left[data-state=disabled] i:first-child {
transform: translate(-5px, 0) rotate(0deg);
}
.paginate.left[data-state=disabled] i:last-child {
transform: translate(-5px, 0) rotate(0deg);
}
.paginate.left[data-state=disabled]:hover i:first-child {
transform: translate(-5px, 0) rotate(0deg);
}
.paginate.left[data-state=disabled]:hover i:last-child {
transform: translate(-5px, 0) rotate(0deg);
}
.paginate.right {
left: 58%;
}
.paginate.right i {
transform-origin: 100% 50%;
}
.paginate.right i:first-child {
transform: translate(0, 1px) rotate(40deg);
}
.paginate.right i:last-child {
transform: translate(0, -1px) rotate(-40deg);
}
.paginate.right:hover i:first-child {
transform: translate(0, 1px) rotate(30deg);
}
.paginate.right:hover i:last-child {
transform: translate(0, -1px) rotate(-30deg);
}
.paginate.right:active i:first-child {
transform: translate(1px, 1px) rotate(25deg);
}
.paginate.right:active i:last-child {
transform: translate(1px, -1px) rotate(-25deg);
}
.paginate.right[data-state=disabled] i:first-child {
transform: translate(5px, 0) rotate(0deg);
}
.paginate.right[data-state=disabled] i:last-child {
transform: translate(5px, 0) rotate(0deg);
}
.paginate.right[data-state=disabled]:hover i:first-child {
transform: translate(5px, 0) rotate(0deg);
}
.paginate.right[data-state=disabled]:hover i:last-child {
transform: translate(5px, 0) rotate(0deg);
}
.paginate[data-state=disabled] {
opacity: 0.3;
cursor: default;
}
.counter {
text-align: center;
position: absolute;
width: 100%;
top: 50%;
margin-top: -15px;
font-size: 30px;
font-weight: 600;
font-family: 'Poppins', sans-serif;
text-shadow: 0px 2px 0px rgba(0, 0, 0, 0.2);
color: #463f57;
}
Step - 4: Below is the JavaScript code which is the most important part in this Pagination.
JS
// basic paging logic to demo the buttons
var pr = document.querySelector( '.paginate.left' );
var pl = document.querySelector( '.paginate.right' );
pr.onclick = slide.bind( this, -1 );
pl.onclick = slide.bind( this, 1 );
var index = 0, total = 6;
function slide(offset) {
index = Math.min( Math.max( index + offset, 0 ), total - 1 );
document.querySelector( '.counter' ).innerHTML = ( index + 1 ) + ' / ' + total;
pr.setAttribute( 'data-state', index === 0 ? 'disabled' : '' );
pl.setAttribute( 'data-state', index === total - 1 ? 'disabled' : '' );
}
slide(0);
And that's it. You're done.
Let me know in the comments if you have any doubt related to this.
Follow @creocodigo for more projects and web related content.
If you find this useful, below are some other posts that I am sure you'll love.