js 轮播图(透明度)

js 轮播图(透明度)

用透明度的方式来实现轮播图

先说下思路,我们首先应该考虑下页面的结构。
第一,我们在做网站的时候,不可能一个页面都是轮播图,所以我们首先需要一个大的盒子,来把轮播图包起来,这里我用的是div
第二,因为使用透明度做的,所以轮播图的切换方式也是透明度,也就是说一个隐藏,一个显示,那么也就意味着,这些用来做轮播图的图片是在同一个位置上,一个压着一个的。这个效果可以用position:absolute来实现,这些图片需要一个共同的祖先来设置position:relative,所以我用的是ul>li>a>img
第三,怎么样让图片逐个显示,首先我们可以先将图片全部隐藏,然后在逐个显示,需要注意层级的问题,这个问题可以用z-index解决
最后,剩下的小点和前进、后退,可以直接用定位,定到上方。

然后,我们来考虑下思路

我们需要创建一个选中样式,选中样式的作用就是,将图片显示出来。

然后在js中要做的就是首先定义一个函数,这个函数的功能是,我们往里面传递图片的索引,函数根据索引,找到对应的元素,将选中样式赋值给他

其他的效果,就是参数的不同了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
    }
    ul {
        list-style: none;
    }
    div {
        width: 500px;
        height: 313px;
        border: 1px solid black;
        position: relative;
    }
    .carousel li {
        position: absolute;
        left: 0;
        top: 0;
        opacity: 0;
        transition: opacity .3s;//切换图片时的过度效果
    }
    .carousel li a img {
        width: 500px;
        height: 313px;
    }
   .carousel .selection {//显示的图片需要的类
        opacity: 1;
        z-index: 10;
    }
    .prev,
    .next {//左右箭头的样式
        width: 50px;
        height: 50px;
        font-size: 30px;
        text-align: center;
        line-height: 50px;
        background: white;
        opacity: .3;
        position: absolute;
        top: 50%;
        transform: translateY(-50%);
        z-index: 101;
        cursor: pointer;
        user-select: none;
    }
    .prev:hover,
    .next:hover {
        opacity: .8;
    }
    .prev {
        left: 20px;
    }
    .next {
        right: 20px
    }
    .circle {
        position: absolute;
        height: 8px;
        left: 50%;
        transform: translateX(-50%);
        z-index: 200;
        bottom: 20px;
    }
    .circle li {
        width: 12px;
        height: 12px;
        border-radius: 50%;
        background: rgba(180, 180, 180, .3);
        border: 1px solid transparent;
        float: left;
        margin-left: 10px;
        cursor: pointer;
    }
    .circle .current {//选中小点的样式
        background: rgba(180, 180, 180, .8);
        border: 1px solid rgb(50, 50, 50);
    }
</style>

<body>
    <div>
        <ul class="carousel">
            <li class="selection"><a href="#1"><img src="1.jpg" alt=""></a></li>
            <li><a href="#2"><img src="2.jpg" alt=""></a></li>
            <li><a href="#3"><img src="3.jpg" alt=""></a></li>
            <li><a href="#4"><img src="4.jpg" alt=""></a></li>
            <li><a href="#5"><img src="5.jpg" alt=""></a></li>
        </ul>
        <div class="prev">< </div> //左箭头
        <div class="next">></div>//右箭头
        <ul class="circle">//全部的小点
            <li class="current"></li>//小点
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    <script>
        var currentIndex = 0;//当前图片的索引,我希望从0开始
        var id;
        var len = document.querySelector('.carousel').childElementCount;//得到ul下面li的个数
        function carousel(index) {//建一个函数,用来提供一个索引然后切换到索引对应的图片
            if (currentIndex === len) //判断一下,当前图片索引是否等于li的个数,因为当前索引是从0开始的,所以总数的值是没有的
                currentIndex = index = 0
            }
            if (currentIndex < 0) {
                currentIndex = index = 4
            }
            document.querySelector('.current').className = '';//将页面上有选中样式的小点的样式清空
            document.querySelector('.circle li:nth-child(' + (index + 1) + ')').className = 'current'//根据索引来控制那个小点是显示状态
            document.querySelector('.selection').className = '';//将页面上有选中样式的图片的样式清空
            document.querySelector('.carousel li:nth-child(' + (index + 1) + ')').className = 'selection'//根据索引来控制那张图片显示
        }
        function prev() {//后退函数
            currentIndex--;//当前索引减1
            carousel(currentIndex) //调用carousel函数
        }
        function next() {//前进函数
            currentIndex++;//当前索引加1
            carousel(currentIndex) //调用carousel函数
        }
        var lis = document.querySelectorAll('.circle li');//得到页面上的所有小点
        for (var i = 0; i < lis.length; i++) {//for循环遍历
            lis[i].index = i;//将i值先保存一下
            lis[i].onclick = function () {//
                currentIndex = this.index
                carousel(currentIndex);
            }
        }
        function auto() {//自动切换
            id = setInterval(next, 1000)//间隔函数,每一秒调用一次前进函数
        }
        function stop() {
            clearInterval(id)
        }
        auto();
        document.querySelector('.prev').onclick = prev//后退按钮的点击事件
        document.querySelector('.next').onclick = next//前进按钮的点击事件
        document.querySelector('div').onmouseover = stop//div的鼠标移入事件
        document.querySelector('div').onmouseout = auto//div的鼠标移出事件
    </script>
</body>

</html>

哈哈

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值