一个简单的轮播图代码

#轮播图dome

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./css/index.css">
</head>
<body>
    <div class="lbbox">
        <ul class="oUl">
            <a href="">
                <li><img src="./imager/1.jpg" alt=""></li>
            </a>
            <a href="">
                <li><img src="./imager/2.jpg" alt=""></li>
            </a>
            <a href="">
                <li><img src="./imager/3.jpg" alt=""></li>
            </a>
            <a href="">
                <li><img src="./imager/4.jpg" alt=""></li>
            </a>
            <a href="">
                <li><img src="./imager/5.jpg" alt=""></li>
            </a>
            <a href="">
                <li><img src="./imager/1.jpg" alt=""></li>
            </a>
        </ul>
        <span class="lf"></span>
        <span class="rg"></span>
        <div class="raidusYuan">
            <span class="yuanS"></span>
            <span class=""></span>
            <span class=""></span>
            <span class=""></span>
            <span class=""></span>
        </div>
    </div>
    <script src="./js/index.js"></script>
</body>
</html>
*{
    padding: 0;
    margin: 0;
    text-decoration: none;
    list-style: none;
}
.lbbox{
    width:980px;
    height:420px;
    margin: 80px auto;
    position: relative;
    overflow: hidden;
}
.oUl{
    
    width: 9999999px;
    height:420px;
    position: absolute;
    top: 0;
    left: 0;
}
.oUl a{
    display: block;
    width: 980px;
    height:420px;
    float: left;
}
.oLi a li img{
    width: 980px;
    height:420px;
}
.lf,.rg{
    width: 50px;
    height: 50px;
    position: absolute;
    background: black;
    text-align: center;
    font-weight: bold;
    line-height: 50px;
    font-size:30px;
    color: rgb(255, 255, 255);
    opacity: 0.4;
    cursor: pointer;
}
.lf{
    left: 0;
    top:210px;
}
.rg{
    right: 0;
    top:210px;
}
.yuanS{
    background: black;
}
.raidusYuan{
    width: 300px;
    height: 30px;
    position: absolute;
    left: 327px;
    top: 347px;
}
.raidusYuan span{
    cursor: pointer;
    margin-left: 30px;
    height: 20px;
    border-radius: 50%;
    width: 20px;
    display: block;
    float: left;
    border: solid 1px rgb(255, 255, 255)
}
var timer = null;
//创建定时器的开关
var sliderPage = document.getElementsByClassName('oUl')[0];
//获取ul标签
var moverWidth = sliderPage.children[0].offsetWidth;
//获取一张轮播图的宽度
var num = sliderPage.children.length - 1;
//获取所以轮播图的张数
var leftBtn = document.getElementsByClassName('lf')[0];
//获取左按钮
var rightBtn = document.getElementsByClassName('rg')[0];
//获取右按钮
var oSPan = document.getElementsByClassName('raidusYuan')[0].getElementsByTagName('span')
//获取圆点
var key = true;
//锁
var index = 0;
//创建一个变量用来判断样式圆点在那个位置

function changeIndex(_index){
    //给圆点添加样式函数
    for(var i = 0; i < oSPan.length; i ++){
        //获取每个圆点的位置
        oSPan[i].className = ' ';
        //让当前所有的圆点的class变为空
    }
    oSPan[_index].className = "yuanS"
    //让当前的index的值也就是当前轮播图圆点变为黑色。
}


for(var i = 0; i < oSPan.length; i ++){
    //给当前每一个圆点加点击事件
        (function(i){
            //会触发闭包,使用立即执行函数
            oSPan[i].onclick = function(){
                //添加事件
                key = false;
                //将锁关上
                clearTimeout(timer);
                //清楚定时器
                index = i;
                //让当前的Index等于当前点击按钮对等轮播图的位置
                startMove(sliderPage, {left: - index * moverWidth,},function(){
                    //starMove函数是dom运动函数,让当前ul的位置 减去点击的位置的数字* 宽度
                    key = true;
                    //将锁打开
                    timer = setTimeout(autoMove,1500);
                    //执行图片自己动
                    changeIndex(index)
                    //改变圆点样式
                })
            }
        }(i))
    }


function autoMove(direction){
    //轮播图自左向右自动运动
    clearTimeout(timer)
    //清除定时器
    if(key){
        //先看锁开了没有,如果锁是关着的则不执行,防止两个定时器一起动发生冲突。
        key = false;
        //将锁关闭
        if(!direction || direction == "left->right"){
            //如果当前的值是"left->right"
            index ++;
            //让index加一个值
            startMove(sliderPage,{left : sliderPage.offsetLeft - moverWidth}, function () {
                //图片运动函数,让当前Ul的宽度减去初始的moveWidth宽度
                if(sliderPage.offsetLeft == -num * moverWidth){
                    //如果越界了,当前Ul的宽度等于所有轮播图的张数的宽度
                    index = 0;
                    //让圆点值等于1
                    sliderPage.style.left = '0px';
                    //让轮播图归位第一张
                }
                changeIndex(index);   
                //执行圆点样式
                timer = setTimeout(autoMove,1500);
                //再一次执行自动轮播
                key = true;
                //将锁打开
                console.log(index)
                
            })
        }else if(direction == "right->left"){
            //如果点击是自右向左
            if(sliderPage.offsetLeft == 0){
                //先判断当前的Ul轮播图是不是第一张
                sliderPage.style.left = - num * moverWidth + 'px';
                //如果是让当前ul的宽度值直接等于所有轮播图的最后一张的宽度值
                index = num;
                ///让圆点等于最后一张轮播图位置数字的值
            }
            index --;
            //如果不是第一张就index --一个值
            startMove(sliderPage,{left : sliderPage.offsetLeft + moverWidth,}, function () {
                //执行动画
                changeIndex(index);
                //执行圆点样式
                timer = setTimeout(autoMove,1500);
                //执行自动定时器
                key = true;
                //让锁打开
            })
            
        }
    } 
}

leftBtn.onclick = function(){
    //给左按键添加点击事件
autoMove('right->left');
//传入参数自右向左
}
rightBtn.onclick = function(){
    //给右键添加点击事件
autoMove('left->right');
//传入参数自左向右
}




setTimeout(autoMove,1500);
//初始自动加载函数

//获取当前元素的class值的方法
function getStyle (dom, attr){
    if(window.getComputedStyle){
        return window.getComputedStyle(dom, null)[attr];
    }else{
        return dom.currentStyle[attr];
    }
}
//动画方法,看之前的博客文章有写到
function startMove(dom, attrObj, callback) {
    clearInterval(dom.timer);
    var iSpeed = null, iCur = null;
    dom.timer = setInterval(function () {
        var bStop = true;
        for (var attr in attrObj) {
            if (attr == 'opacity') {
                iCur = parseFloat(getStyle(dom, attr)) * 100
            } else {
                iCur = parseFloat(getStyle(dom, attr));
            }
            iSpeed = (attrObj[attr] - iCur) / 7;
            iSpeed = iSpeed > 0 ?  Math.ceil(iSpeed) : Math.floor(iSpeed);
            if(attr == 'opacity'){
                dom.style.opacity = (iCur + iSpeed) / 100;
            }else{
                dom.style[attr] = iCur + iSpeed + 'px'
            }
            if( iCur != attrObj[attr]){
                bStop = false;
            }
        }
        if(bStop) {
            clearInterval(dom.timer);
            typeof callback == 'function' && callback()
        }
    }, 30)
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的网页轮播图代码实例: HTML代码: ``` <div id="slider"> <div class="slides"> <img src="slide1.jpg"> <img src="slide2.jpg"> <img src="slide3.jpg"> </div> </div> ``` CSS代码: ``` #slider { width: 100%; overflow: hidden; } .slides { display: flex; width: 300%; transition: transform 0.4s ease-in-out; } .slides img { width: 33.333%; float: left; } #slider input[name='slide-dot'] { display: none; } #slider label { display: inline-block; height: 10px; width: 10px; border-radius: 50%; background: #ddd; margin: 0 10px; cursor: pointer; } #slider input[name='slide-dot']:checked + label { background: #222; } ``` JavaScript代码: ``` var slideIndex = 0; showSlides(); function showSlides() { var i; var slides = document.getElementsByClassName("slides")[0].getElementsByTagName("img"); for (i = 0; i < slides.length; i++) { slides[i].style.width = "0"; } slideIndex++; if (slideIndex > slides.length) {slideIndex = 1} slides[slideIndex-1].style.width = "100%"; setTimeout(showSlides, 3000); // 轮播时间,单位为毫秒 } ``` 解释: 1. HTML部分: 网页轮播图的主要元素是包含轮播图图像的div(这里的id是“slider”)和内部的img元素(这里只有三张图像)。为了用户能够手动控制轮播图的展示,我们还需要在html中添加一些控制按钮,比如这里用的是checkbox和label。 2. CSS部分: CSS主要是为轮播图和控制按钮设置样式。我们设置slider的宽度为100%(这样轮播图会自适应不同设备的屏幕大小),overflow为hidden,以便超出slider宽度的图像不会显示在屏幕上。slides是一个包含img元素的div,每个img元素宽度为slider宽度的1/3,float设为left。控制按钮的初始化样式设置是显示为灰色,并为每个控制按钮设置了10像素宽的圆点,之后我们根据用户选择的控制按钮修改样式。 3. JavaScript部分: 这是一个执行轮播图JavaScript函数。我们首先定义一个“slideIndex”变量,指示当前显示的图片在slides数组中的索引,初始化为0。后面我们调用“showSlides”函数时,它会自动执行以下操作: - 获取slides元素的img元素集合,设置索引小于“slideIndex”的所有img宽度为0,将“slideIndex”加1,并重新计算其mod(slides.length),因为我们需要按循环方式展示图片。 - 将当前img元素的宽度设置为slider的宽度,以100%的宽度实现图像的展示。 - 在setTimeout函数里将showSlides函数调用的时间设置为3000毫秒(即3秒),这样每3秒就会执行一次轮播操作。 以上就是网页轮播图代码及其解释。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值