关于作业的问题

关于作业的问题

<!--轮播图-->
<div class="banner">
    <a href="">
        <div class="banner-slide slide1 slide-active"></div>
    </a>
    <a href="">
        <div class="banner-slide slide2 "></div>
    </a>
    <a href="">
        <div class="banner-slide slide3"></div>
    </a>
    <a href="">
        <div class="banner-slide slide4"></div>
    </a>
    <a href="">
        <div class="banner-slide slide5"></div>
    </a>
</div>
var pics = $('.banner').find('div');

var dots = $('span');

// 图片切换单独封装成函数
function changeImg(index) {
    
    pics.eq(index).addClass('slide-active').siblings().removeClass('slide-active');

    dots.eq(index).addClass('active').siblings().removeClass('active');

}
.banner-slide{
    width:1200px;
    height:460px;
    background-repeat:no-repeat;
    float:left;
    display:none;
}

.slide-active{
    display:block;
}

老师帮忙看一下问题在哪,我在控制台打印可以看到图片 div 上面是添加 了让图片显示的 slide-active 的样式属性,但是切换到下一张的时候removeClass()方法无法清除 slide-active样式,导致图片切换不了。小圆点下面是可以正常切换的

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
正在想名字呢 2018-02-16 17:06:42

同学,你这js和jq的方法混在一起了吧~

<body>
    <div class="pic">
        <div class="inner">
            <img src="img/1.jpg" alt="">
            <img src="img/2.jpg" alt="">
            <img src="img/3.jpg" alt="">
            <img src="img/4.jpg" alt="">
            <img src="img/5.jpg" alt="">
        </div>
        <ul>
            <li><a href="#" class="active"></a></li>
            <li><a href="#"></a></li>
            <li><a href="#"></a></li>
            <li><a href="#"></a></li>
            <li><a href="#"></a></li>
        </ul>
        <a href="#" class="prev"><img src="img/slider-prev.png" alt=""></a>
        <a href="#" class="next"><img src="img/slider-next.png" alt=""></a>
    </div>
</body>
<style>
    ul{
        list-style: none;
        position: absolute;
        bottom: 0;
        left: 175px;
    }
    ul li{
        float: left;
    }
    ul li a{
        display: block;
        width: 20px;
        height: 20px;
        border-radius: 50%;
        background-color: #ffbeaa;
        margin-left: 5px;
        opacity: 0.6;
    }
    ul li a.active{
        background-color: red;
    }
    .inner{
        width: 3000px;
        height: 400px;
    }
    .inner img{
        display: block;
        float: left;
    }
    .pic{
        width: 600px;
        overflow: hidden;
        position: relative;
    }
    .prev,.next{
        position: absolute;
        top: 190px;
        opacity: 0.6;
    }
    .next{
        right: 0;
    }
    </style>
<script>
        var num=0;
        var timer=null;
        var timeout=null;
        // 设置鼠标悬浮在按钮切换事件
        $("ul li a").mouseenter(function(event){
            //设置定时器前应先判断有没有定时器,有就清除
            if(timeout){
                clearTimeout(timeout);
                timeout=null;
            }
            num=$(this).parent().index();
            //设置悬浮时500毫秒时切换,不足500毫秒时不会切换
            timeout=setTimeout(changgeMg,500);
            return false;
        })
        //悬浮在窗口时停止轮播
        $(".pic").mouseenter(function(){
            //清除定时器
            clearInterval(timer);
        })
        //鼠标移除窗口时开始轮播
        $(".pic").mouseleave(function(){
            //设置一个3秒的自动轮播定时器
            timer=setInterval(changeTab,1000);
        })
        //点击next切换
        $(".next").click(function(){
            //设置定时器前应先判断有没有定时器,有就清除
            if(timeout){
                clearTimeout(timeout);
                timeout=null;
            }
            if(num<4){
                num++;
            }else{
                num=0;
            }
            //设置点击后500毫秒去切换,如果点击间隔小于500毫秒不停点击则不会切换
            timeout=setTimeout(changgeMg,500);
            //不让a元素去默认跳转
            return false;
        })
        //点击prev切换
        $(".prev").click(function(){
            if(timeout){
            clearTimeout(timeout);
            timeout=null;
            }
            if(num>0){
                num--;
            }else{
                num=4;
            }
            //设置点击后500毫秒去切换,如果点击间隔小于500毫秒不停点击则不会切换
            timeout=setTimeout(changgeMg,500);
            return false;
        })
        //轮播定时器
        timer=setInterval(changeTab,1000);
        //移动盒子和给当前索引上色
        function changgeMg(){
            var movePx=num*-600+"px";
            $(".inner").animate({"marginLeft":movePx},500);
            $("ul li").eq(num).find("a").addClass("active").parent().siblings().find("a").removeClass("active");
        }
        //定时器函数    
        function changeTab(){            
            if (num<4){                
                num++;
            }else{
                num=0;
            }
             changgeMg();
        }
    </script>

我写了一个jq的,你看看~

  • 提问者 鱼蛋肠粉 #1
    你好童鞋,你轮播图切换图片的方式是通过左右位移图片位置的方式来切换的么,还有就是你在定时器函数里面 num < 4 的条件应该是判断图片所处的位置下标吧?但是这样写定在4上面,是不是过于静态了呢,后面如果需要加图片的话,那还是需要到这里把4给更改的吧?
    2018-02-16 19:54:18
提问者 鱼蛋肠粉 2018-02-16 12:57:12
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> jQuery 实现轮播图特效</title>
    <link rel="stylesheet" href="CSS/style.css">
</head>
<body>
<!--主体盒子-->
<div class="main">

 <!--轮播图盒子-->
 <div class="banner">
        <a href="#">
            <div class="banner-slide slide1 slide-active"></div>
        </a>
        <a href="#">
            <div class="banner-slide slide2 "></div>
        </a>
        <a href="#">
            <div class="banner-slide slide3 "></div>
        </a>
        <a href="#">
            <div class="banner-slide slide4 "></div>
        </a>
        <a href="#">
            <div class="banner-slide slide5 "></div>
        </a>
    </div>

 <!--上一张-->
 <a href="javascript:void(0)" class="button prev" ></a>

 <!--下一张-->
 <a href="javascript:void(0)" class="button next" ></a>

 <!--圆点导航-->
 <div class="dots">
        <span class="active"></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
    </div>

 <!--导入 jQuery 库文件-->
 <script src="JQ/jquery-3.3.1.js"></script>
 <!--导入 JavaScript 脚本-->
 <script src="JS/javaScript.js"></script>

</div>
</body>
</html>
/*清除间隙*/
{
    margin:0;
    padding:0;
}

/*取消 a 标签默认下划线*/
a{
    text-decoration: none;
}

/*主体样式*/
body{
    font-family:"微软雅黑";
    color: #14191e;
    background-color: #bbb;
}

/*主体盒子*/
.main{
    width:1200px;
    height:460px;
    margin:30px auto;
    position:relative;
    overflow:hidden;
}
/*轮播图盒子*/
.banner{
    width:1200px;
    height:460px;
    overflow:hidden;
    position:relative;
}
/*轮播图样式*/
.banner-slide{
    width:1200px;
    height:460px;
    background-repeat:no-repeat;
    float:left;
    display:none;
}
/*图片显示*/
.slide-active{
    display:block;
}
/*图片1*/
.slide1{
    background-image:url(../IMG/1.jpg);
}
/*图片2*/
.slide2{
    background-image:url(../IMG/2.jpg);
}
/*图片3*/
.slide3{
    background-image:url(../IMG/3.jpg);
}
/*图片4*/
.slide4{
    background-image:url(../IMG/4.jpg);
}
/*图片5*/
.slide5{
    background-image:url(../IMG/5.jpg);
}

/*切换按钮*/
.button{
    position: absolute;
    top: 50%;
    height: 80px;
    width: 40px;
    margin-top:-40px;
}
/*上一张*/
.prev{
    left: 0;
    background:url(../IMG/pre2.png) center center no-repeat;
}

/*下一张*/
.next{
    background:url(../IMG/pre.png) center center no-repeat;
    right:0;
}
/*按钮鼠标覆盖样式*/
.button:hover{
    background-color:#333;
    opacity: 0.4;
    filter:alpha(opacity=80);
}

/*小圆点盒子*/
.dots {
    position: absolute;
    bottom: 24px;
    right: 0;
    text-align: right;
    padding-right: 24px;
    line-height: 12px;
}

/*小圆点*/
.dots span {
    display: inline-block;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    margin-left: 8px;
    background-color: rgb(140, 144, 148);
    cursor: pointer;
    box-shadow: 0 0 0 1px rgb(255, 255, 255);
}


/*小圆点选中样式*/
.dots span.active{
    box-shadow: 0 0 0 1px rgba(7, 17, 27, 0.4) inset;
    background-color: #ffffff;
}
/**
 * Created by josany on 2018/2/13.
 */

$(function () {

    var index = 0,

     timer = null,

     size = $('.banner').find('div').length,

     pics = $('.banner').find('div'),

     dots = $('span');

    // 鼠标移开自动轮播
    $('.main').mouseout(function () {
        timer = setInterval(function () {
            index++;
            if(index >= size){
                index = 0;
            }
            changeImg(index);
        },2000);
    });


    // 在页面打开即开始自动轮播
    $('.main').mouseout();


    // 鼠标覆盖停止轮播
    $('.main').mouseover(function () {
        clearInterval(timer);
    });


    // 图片切换单独封装成函数
    function changeImg(index) {

        dots.eq(index).addClass('active').siblings().removeClass('active');

        pics.eq(index).addClass('slide-active').siblings().removeClass('slide-active');


        console.log(pics.eq(index));

        console.log(dots.eq(index));

    };
    
    // 点击下一张切换图片
    $('.next').click(function () {

        index++;

        if(index >= size) index = 0;

        changeImg(index);
    });
    
    // 点击上一张切换图片
    $('.prev').click(function () {
        index--;
        if(index < 0) index = size - 1;
        changeImg(index);
    });

    // 点击导航圆点切换图片
    dots.click(function () {
        index = $(this).index();
        changeImg(index);
    });

});

这是全部的代码

卡布琦诺 2018-02-16 09:33:22

建议你把代码贴全了,以便于大家更准确的发现问题,并帮你解答~

  • 提问者 鱼蛋肠粉 #1
    好的,代码我贴全在下一个回答了,麻烦帮我检测一下,谢谢!
    2018-02-16 12:57:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师