javascript实现轮播图

7 篇文章 0 订阅
5 篇文章 0 订阅

实现效果图:在这里插入图片描述
实现功能:
1. 点击左右切换
2. 鼠标悬浮在小圆点自动切换

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>轮播图</title>
    <link rel="stylesheet" href="./lunbo.css">

</head>
<body>
    <!-- 轮播图整体,隐藏的作用,超出部分隐藏 -->
    <div class="wrapper">
        <!-- 1.轮播区域 -->
        <ul class="lb">
            <li class="item"><img src="./juhua.webp" alt=""></li>
            <li class="item"><img src="./taohua.webp" alt=""></li>
            <li class="item"><img src="./rose.webp" alt=""></li>
            <li class="item"><img src="./sky.webp" alt=""></li>
            <li class="item"><img src="./soshu.webp" alt=""></li>
            <!-- 为了首尾衔接 -->
            <li class="item"><img src="./juhua.webp" alt=""></li>
        </ul>
        <!-- 2.按钮组 -->
        <div class="lbtn"></div>
        <div class="rbtn"></div>
        <!-- 小白点区域 -->
        <ul class="spots">
            <li class="dot active"></li>
            <li class="dot"></li>
            <li class="dot"></li>
            <li class="dot"></li>
            <li class="dot"></li>
        </ul>
    </div>
    <script src="./lunbo.js"></script>
</body>
</html>

js代码:

// 从start运动到end
function move(dom, prop, start, end) {
    var speed = 7;
    if(end < start) {
        speed = -7;
    }
    dom.style[prop] = start + 'px';
    var tid = setInterval(function () {
        var val = parseInt(getComputedStyle(dom)[prop]);
        val += speed;
        dom.style[prop] = val + 'px';
        if (speed > 0 && val >= end || speed < 0 && val <= end) {
            clearInterval(tid);
            dom.style[prop] = end + 'px';
        }
    }, 2);
}

//DOM
//整个轮播区域
var lb = document.getElementsByClassName('lb')[0];

// 获取左右按钮
var lbtn = document.getElementsByClassName('lbtn')[0];
var rbtn = document.getElementsByClassName('rbtn')[0];

// 小白点区域
var spots = document.getElementsByClassName('spots')[0];
var dots = spots.getElementsByClassName('dot');
var activeDot = spots.getElementsByClassName('active')[0];

// 当前页
var nowPage = 0;
// 左按钮
lbtn.onclick = function() {
    var orign = nowPage;
    if (nowPage > 0) {
        nowPage --;
    }else {
        nowPage = 4;
    }
    lb.style.left = -nowPage * 700 + 'px';
    changePage(origin, nowPage);
}
// 右按钮
rbtn.onclick = function() {
    var orign = nowPage;
    if (nowPage < 4) {
        nowPage ++;
    } else {
        nowPage = 0;
    }
    lb.style.left = -nowPage * 700 + 'px';
    changePage(origin, nowPage);
}

// 从fromPage到toPage
function changePage(fromPage, toPage) {
    // a. 元素切换动画
    if (fromPage + 1 == toPage || fromPage - 1 == toPage){
        move(lb, 'left', -fromPage * 700, -toPage * 700);
    }else if ((fromPage == 0 && toPage == 4) || (fromPage == 4 && toPage == 0)){
        if (toPage < fromPage) {
            // 4 -> 0
            move(lb, 'left', -fromPage * 700, -(fromPage + 1) * 700);
        }else {
            // 0 -> 4
            move(lb, 'left', -(toPage + 1) * 700, -toPage * 700);
        }
    }else {
        move(lb, 'left', -fromPage * 700, -toPage * 700);
    }
    // b. 白点切换
    activeDot.className = 'dot';
    activeDot = dots[toPage];
    activeDot.className = 'dot active';
}


spots.onmouseover = function (e) {
    console.log(e.target.tagName);
    if(e.target.tagName == 'LI'){
        var fromPage = nowPage;
        nowPage = [].indexOf.call(dots, e.target);
        changePage(fromPage, nowPage);
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值