html+css+javascript实现渐隐轮播

实现效果:

图片自动轮播,点击左右按钮会操作图片向前或向后,图片与小圆点相互呼应,具有交互效果。

编写思想:

实现交互时使用了排他思想,同选项卡的功能;

自动轮播采用了setInterval();

具体步骤参详代码:

代码:

css:

css 复制代码
    <style>
        * {
            padding: 0;
            margin: 0;
            list-style: none;
            box-sizing: border-box;
        }

        #focus {
            width: 600px;
            height: 400px;
            background-color: orange;
            margin: 100px auto;
            position: relative;
            overflow: hidden;
        }

        #focus .pics {
            width: 100%;
            height: 100%;
        }

        #focus .pics li {
            width: 600px;
            height: 100%;
            text-align: center;
            font-size: 30px;
            line-height: 400px;
            opacity: 0;
            position: absolute;
            top:0;
            left:0;
            transition: all 0.3 ease;
        }
        #focus .pics li.on{
            opacity: 1;
        }

        #focus .circle {
            position: absolute;
            bottom: 20px;
            left: 50%;
            transform: translateX(-50%);

        }

        #focus .circle li {
            width: 16px;
            height: 16px;
            border-radius: 50%;
            float: left;
            margin-left: 5px;
            background-color: #fff;
            text-align: center;
            line-height: 16px;
            box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
        }

        #focus .circle li.active {
            background-color: orange;
        }

        #focus .prev, .next {
            position: absolute;
            top: 50%;
            transform: translateY(-50%);
            display: block;
            width: 28px;
            height: 56px;
            background-color: rgba(255, 255, 255, 0.7);
            border-radius: 0 56px 56px 0;
            line-height:56px;
            font-size:20px;
            color:#fff;
        }

        #focus .next {
            right: 0;
            border-radius: 56px 0 0 56px;
            padding-left:8px;
        }
    </style>

html:

html 复制代码
<div id="focus">
        <ul class="pics">
            <li style="background-color: rgb(179, 115, 115);" class="on">0</li>
            <li style="background-color: rgb(122, 122, 206);">1</li>
            <li style="background-color: rgb(92, 162, 92);">2</li>
        </ul>
        <ol class="circle">
        </ol>
        <span class="prev">&lt;</span>
        <span class="next">&gt;</span>
    </div>

js:

javascript 复制代码
<script>
        //1.查节点
        var focus = document.querySelector('#focus');
        var pics = document.querySelector('.pics');
        var lis = document.querySelectorAll('.pics li');
        var circle = document.querySelector('.circle');
        var prev = document.querySelector('.prev');
        var next = document.querySelector('.next');
        //获取li宽度
        var liW = lis[0].offsetWidth;
        var time = null;
        //动态生成小圆点
        for (var i = 0; i < lis.length; i++) {
            var li = document.createElement('li');
            li.setAttribute('idx', i);
            circle.appendChild(li);
            //排他思想 选项卡
            li.onclick = function () {
                var active = document.querySelector('.circle li.active');
                active.classList.remove('active');
                this.classList.add('active');
                var idx = this.getAttribute('idx');
                //解决index与idx与cir之间的关系
                index = idx;
                cir = idx;
                document.querySelector('.pics li.on').classList.remove('on');
                lis[idx].classList.add('on');
            }
        }
        circle.children[0].classList.add('active');

        //2.添加功能
        //鼠标经过
        focus.onmouseenter = function () {
            prev.style.display = "block";
            next.style.display = "block";
            //鼠标经过时停止自动轮播
            clearInterval(time);
        }
        //鼠标离开
        focus.onmouseleave = function () {
            prev.style.display = "none";
            next.style.display = "none";
            //自动轮播
            time = setInterval(function () {
                next.onclick();
            }, 2500)
        }
        var index = 0;
        var cir = 0;
        //单击next箭头
        next.onclick = function () {
                if (index == lis.length - 1) {
                    //return;//图片到最后一张不再继续往下
                    index = -1;     
                }
                index++;

                document.querySelector('.pics li.on').classList.remove('on');
                lis[index].classList.add('on');

                //右按钮控制小圆点
                cir++;
                if (cir == circle.children.length) {
                    cir = 0;
                }
                run(cir);
            }
        //单击prev箭头
        prev.onclick = function () {
                if (index == 0) {
                    //return;//图片到最后一张不再继续往下
                    index = lis.length;
                    
                }
                index--;
                document.querySelector('.pics li.on').classList.remove('on');
                lis[index].classList.add('on');
               
                //左按钮控制小圆点
                cir--;
                if (cir == -1) {
                    cir = circle.children.length - 1;
                }
                run(cir);
            }
        //自动轮播
        time = setInterval(function () {
            next.onclick();
        }, 2500)

        // 左右箭头控制小圆点
        function run(cir) {
            // cir当前小圆点的索引号
            var active = document.querySelector('.circle li.active');
            active.classList.remove('active');
            // circle.children[cir]对应索引号的孩子
            circle.children[cir].classList.add('active');
        }
    </script>

运行结果:

相关推荐
真的很上进2 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
噢,我明白了6 小时前
同源策略:为什么XMLHttpRequest不能跨域请求资源?
javascript·跨域
Hello_WOAIAI6 小时前
批量将 Word 文件转换为 HTML:Python 实现指南
python·html·word
sanguine__6 小时前
APIs-day2
javascript·css·css3
关你西红柿子6 小时前
小程序app封装公用顶部筛选区uv-drop-down
前端·javascript·vue.js·小程序·uv
济南小草根6 小时前
把一个Vue项目的页面打包后再另一个项目中使用
前端·javascript·vue.js
小木_.7 小时前
【python 逆向分析某有道翻译】分析有道翻译公开的密文内容,webpack类型,全程扣代码,最后实现接口调用翻译,仅供学习参考
javascript·python·学习·webpack·分享·逆向分析
LUwantAC7 小时前
CSS(一):选择器
前端·css
Aphasia3117 小时前
一次搞懂 JS 对象转换,从此告别类型错误!
javascript·面试
m0_748256567 小时前
Vue - axios的使用
前端·javascript·vue.js