老师我这边给小圆点添加current类,发现实现不了。而且圆点点击事件也没出来问题没能找出来

老师我这边给小圆点添加current类,发现实现不了。而且圆点点击事件也没出来问题没能找出来

html部分

    <div class="banner">

        <div class="banner-1">

            <ul class="bn_2" id="bn_2">

                <li><img class="img_1" src="images/banner01.png" alt=""></li>

                <li><img src="images/banner02.png" alt=""></li>

                <li><img src="images/banner03.png" alt=""></li>

            </ul>

            <ol class="yuandian" id="yuandian">

                <li data-n="0" class="current"></li>

                <li data-n="1"></li>

                <li data-n="2"></li>

            </ol>

        </div>


css部分

.banner .banner-1 img{

    width: 100%;

    height: 650px;

   position: relative;

   


}

.banner .banner-1 ul li{

    position: absolute;

    top: 0;

    left: 0; 

    width: 100%;

    height: 650px; 

    

    transition: all 3s linear 0s; 

    opacity: 0;

    

}

.banner .banner-1 ul li:first-child{

    opacity: 1;

}

.banner .banner-1 {

    position: relative;

    width: 100%;

    height: 650px;

    margin-bottom: 38.3px;

}

.banner .banner-1 .yuandian{

    position: absolute;

    bottom: 0;

    left: 50%;

    margin-left: -25px;

    margin-bottom: 50px;

    width:80px;

    height: 10px;

    

    

}


.banner .banner-1 .yuandian li{

    float: left;

    width: 10px;

    height: 10px;

    border-radius: 10px;

    background-color:  #fff;  

    margin-right: 10px;

}

.banner .banner-1 .yuandian li.current{

    background-color: rgb(66, 92, 238);

}

.banner .banner-1 .yuandian li:hover{

    transform: scale(1.5);

}


js部分

(function(){

    var bn_2=document.getElementById('bn_2') //获取ul

    var lis=bn_2.getElementsByTagName('li') //获取li元素

    var idx=0;

    var timer;

    move();   

    function move() {

        clearInterval(timer)

        timer= setInterval(function(){    

            lis[idx].style.opacity=0;

            idx++;

            if(idx>2)idx=0;

            lis[idx].style.opacity=1;


        },2000)

        setCircle();

    }

    

    bn_2.onmouseenter=function(){

        clearInterval(timer)

    };

    bn_2.onmouseleave=function () {

        move();    

    }

    //设置小圆点current类

    var yuandian=document.getElementById('yuandian')

    var ydLis=yuandian.getElementsByTagName('li')

    function setCircle() {

        for(var i=0;i<=2;i++){

            if(i==idx){

             ydLis[i].className='current'

            }else{

                ydLis[i].className='';

            }

        }

    }

//事件监听,小圆点

    yuandian.onclick=function(e) {

        if(e.target.tagName.toLowerCase()=='li'){

            alert(e.target.getAttribute('data-n'))

        }

    }

  


})()

在这里输入代码,可通过选择【代码语言】突出显示

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

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

3回答
好帮手慕久久 2020-11-24 18:57:35

同学你好,老师给你调整后,能够正确弹出data-n:

http://img1.sycdn.imooc.com//climg/5fbce6cc09b777f208400673.jpg
建议同学新建一个问题,把自己调整后的代码粘贴出来,老师再帮你检查。
祝学习愉快!

好帮手慕久久 2020-11-24 17:56:35

同学你好,其实主要原因是经验太少了,所以很多问题,自己找不出来,不要着急。建议多练习,练得多,遇到的问题就会多,对应就会知道哪里容易出问题,可能会出现哪些问题,以及怎么解决问题。在工作中(平时练习也适用),遇到bug时,要先看控制台有没有报错(大概翻译一下报错信息,就能知道报错是什么意思),有报错的话,就看哪里代码报错了,然后对应检查语法拼写是否有错误、代码书写顺序是否有问题,最后再屡逻辑。如果控制台没有报错,那么就优先检查逻辑。

祝学习愉快!

好帮手慕久久 2020-11-24 11:50:33

同学你好,代码中有如下问题:

1. 代码是从上往下执行的,由于获取小圆点的代码,写了在move()下面,所以执行move方法时,内部的setCircle方法会由于找不到小圆点(圆点还没有获取呢)而报错:
http://img1.sycdn.imooc.com//climg/5fbc8203097d9f3308790747.jpg
修改如下:
http://img1.sycdn.imooc.com//climg/5fbc8284090e516508290564.jpg
2. 
setCircle这个方法的作用是改变小圆点的类名,因此定时器每执行一次,就要调用一次它,即定时器每执行一次,小圆点样式也要对应改变,修改如下:
http://img1.sycdn.imooc.com//climg/5fbc82eb0963218105960337.jpg

祝学习愉快!

  • 提问者 Vigorous阿炎 #1
    接连的两个问题老师稍微指点下就豁然开朗。自己整体思路没大问题,涉及到小的底层逻辑问题时却影响到整体的效果实现。当时一直没能找出问题,然后开始怀疑自己整体思路。导致最后自己一遍一遍的去实验各个点。请问以后在工作中我该如何避免呢?
    2020-11-24 17:09:02
  • 提问者 Vigorous阿炎 #2
    老师,最后代码中我给圆点添加点击监听事件咋没能实现呢?如果点击ul的标签项目小写是li元素,则打印出data-n。ul没有被遮盖所以不用设置z-index值。我点击圆点警告框没有弹出来。 要是不是这样那这里的思路应该是咋样的?
    2020-11-24 17:52:29
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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