Jquery slider pagination

យើងរៀនធ្វើ slider និង pagination សម្រាប់វែបសាយដោយយើងប្រើ html, css និង jquery សម្រាប់ឲ្យវាដើរស្វ័យប្រវត្តិ

CSS
/* MARK: Slider image */

.slide-bar{
    margin-top: 15px;
    height: 450px;
}
.slide-bar .box{
    height: 100%;
    width: 100%;
    background-color: yellowgreen;
    position: relative;
}
.btnSlide{
    position: absolute;
    padding: 10px;
    background-color: rgba(255, 127, 80, 0.593);
    color: white;
    top: 50%;
    transform: translateY(-50%);
    cursor: pointer;
    z-index: 2;

}
.backBtn{
    left: 0;
}
.nextBtn{
    right: 0;
}

.slide-bar .box .slider{
    width: 100%;
    height: 100%;
    background-color: beige;
    float: left;
    position: relative;
}
.slide-bar .box .slider img{
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.slide-bar .box .slider h1{
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background-color: rgba(0, 0, 0, 0.225);
    color: white;
    font-size: 18px;
    padding: 10px;
}
.slide-bar .box .pagenetion{
    position: absolute;
    background-color: coral;
    bottom: 0%;
    left: 50%;
    transform: translate(-50%);
    padding: 5px;
    border-radius: 5px 5px 0px 0px;
    z-index: 1;
}
.slide-bar .box .pagenetion ul li{
    float: left;
    width: 25px;
    height: 25px;
    border-radius: 50%;
    background-color: rgba(0, 0, 0, 0.627);
    color: white;
    justify-content: center;
    align-items: center;
    font-size: 10px;
    margin: 3px;
    display: flex;
    cursor: pointer;
}
.slide-bar .box .pagenetion ul li.active{
    background-color: black;
}

HTML
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.slim.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.2/css/bootstrap.min.css">
    <link rel="stylesheet" href="style.css">
    <title>sliderPagenetion</title>
  </head>
  <body>
    <!--MARK: Slider -->
            <div class="col-xl-9 main-article slide-bar">
                <div class="box">
                    <!-- <div class="slider">
                        <img src="../../img/cat.webp" alt="">
                        <h1>Cat 1</h1>
                    </div> -->
                     <div class="btnSlide nextBtn">
                        Next
                    </div>
                    <div class="btnSlide backBtn">
                        Back
                    </div>

                    <div class="pagenetion">
                        <!-- Number of pagenetion -->
                    </div>
                </div>
            </div>
        </div>
    </div>
  </body>
  <script src="javaScript.js" ></script>
</html>
Jquery
var animal = [{"NAME":"Cat 1","IMAGE":"cat.webp"},
               {"NAME":"Cat 2","IMAGE":"cat3.jpg"},
               {"NAME":"Dog 3","IMAGE":"dog3.jpeg"},
               {"NAME":"Dog 1","IMAGE":"Dog1.webp"},
               {"NAME":"Dog 6","IMAGE":"Dog6.jpeg"},
                ]

$(document).ready(function(){
    let txt = ""
    let txtl = ""
    let page = 0
    animal.map((i) => {
        page++;
        txt +=`<div class="slider">
                    <img src="../img/${i.IMAGE}" alt="">
                    <h1>${i.NAME}</h1>
                </div>`;
        txtl +=`<li>${page}</li>`
    })
    $(".slide-bar").find('.box').append(txt)
    $(".pagenetion").html(`<ul>${txtl}</ul>`)


    var slise = $(".slider")
    var num = 0
    var slideLength = slise.length
    $(".pagenetion ul li").eq(num).addClass('active')

    slise.hide()
    slise.eq(num).show()

    
    $(".nextBtn").click(function(){
        nextBTN()
    })
    function nextBTN(){
        slise.eq(num).hide()//0
        num++ //0->1->2->3
        if(num === slideLength){// 0 == 3?
            num = 0
        }
        slise.eq(num).show()//1
        /* Pagenetion  */
        $(".pagenetion ul li").removeClass('active')
        $(".pagenetion ul li").eq(num).addClass('active')
    }
    $(".backBtn").click(function(){
        slise.eq(num).hide()
       num--
       if(num<0){
        num = slideLength-1 // 3-1 = 2 (2 is index 3th)
       }
       slise.eq(num).show()
       /* Pagenetion  */
       $(".pagenetion ul li").removeClass('active')
       $(".pagenetion ul li").eq(num).addClass('active')
    })
    $(".pagenetion").on("click", 'ul li', function(){
        slise.eq(num).hide()
        //Remove class active from list non active
        $(this).parent().find('li').eq(num).removeClass('active')
        num = $(this).index()
        slise.eq(num).show()

        // $(".pagenetion ul li").removeClass('active')
        //Add class active list on click
        $(this).addClass('active')
        /* NOTE: this is (ul li) */
    })
    /* SetInterval of image */
   var setTime = setInterval(()=>{
        nextBTN()
    },4000)
    $(".slide-bar").mouseover(()=>{
       clearInterval(setTime)
    })  
    $(".slide-bar").mouseleave(()=>{
        setTime = setInterval(()=>{
            nextBTN()
        },4000)
     })  

})

Post a Comment

0 Comments