老师这里面给小圆点添加点击事件发现实现不了?我把鼠标移动事件放move函数里面或者外面发现都没影响,主要是小圆点的data-n属性显示不出来。

老师这里面给小圆点添加点击事件发现实现不了?我把鼠标移动事件放move函数里面或者外面发现都没影响,主要是小圆点的data-n属性显示不出来。

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>

<script src="js/banner.js"></script>


css部分:

.banner .banner-1 img{

    width100%;

    height650px;

   positionrelative;

   


}

.banner .banner-1 ul li{

    positionabsolute;

    top0;

    left0

    width100%;

    height650px

    

    transitionall 3s linear 0s

    opacity0;

    

}

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

    opacity1;

}

.banner .banner-1 {

    positionrelative;

    width100%;

    height650px;

    margin-bottom38.3px;

}

.banner .banner-1 .yuandian{

    positionabsolute;

    bottom0;

    left50%;

    margin-left-25px;

    margin-bottom50px;

    width:80px;

    height10px;

    z-index999;

    

}


.banner .banner-1 .yuandian li{

    floatleft;

    width10px;

    height10px;

    border-radius10px;

    background-color:  #fff;  

    margin-right10px;

}

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

    background-color: rgb(6692238);

    transitionall 2s ease 0s;

}

.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 yuandian=document.getElementById('yuandian')

    var ydLis=yuandian.getElementsByTagName('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;    //这里之前出现了错误,只有三张图片故idx=0,1,2

            lis[idx].style.opacity=1;


            setCircle();  //定时器每执行一次小圆点也执行一次

        },2000)

        bn_2.onmouseenter=function(){

            clearInterval(timer)

        };

        bn_2.onmouseleave=function () {

            move();    

        }

    }

    

    设置小圆点current类

  

      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

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

2回答
好帮手慕慕子 2020-11-25 14:07:46

同学你好, 不可以。

因为定时器的作用主要是为了开启自动轮播的效果,小圆点点击事件的作用是为了点击时,切换图片。在点击小圆点时,鼠标已经移入图片区域,停止自动轮播了。所以不可以将定时器封装成函数放在小圆点的点击事件中。

祝学习愉快~

  • 提问者 Vigorous阿炎 #1
    嗯嗯,是的额。
    2020-11-25 14:22:04
好帮手慕慕子 2020-11-25 10:27:30

同学你好,对于你的问题,解答如下:

  1. 因为bn_2下的元素绝对定位,脱离了文档流,导致bn_2元素的高度无法被子元素撑开,高度默认为0 ,如下图所示:

    http://img1.sycdn.imooc.com//climg/5fbdbe3209eb51a714460768.jpg

    由于元素高度为0,页面中鼠标根本无法移入元素,所以给bn_2元素绑定的移入移出事件不会生效。

    当鼠标移入整个banner区域,没有停止自动轮播,导致点击小圆点无法实现效果。

    建议:直接给大盒子绑定鼠标移入移出事件, 先获取banner元素,然后绑定事件,如下:

    http://img1.sycdn.imooc.com//climg/5fbdbede0939a00d12310385.jpg

  2. 鼠标移入移出事件放在move函数内部或者外部都是可以的,由于事件绑定一次就可以了,推荐将鼠标移入移出事件放在move函数外,让代码更加规范。

  3. 同学编写的代码,是可以正常获取到小圆点的data-n属性值的,可以直接将获取的属性值赋值给idx,然后调用setCircle方法,设置小圆点样式就可以了。示例:

    http://img1.sycdn.imooc.com//climg/5fbdbc010967cb4311140397.jpg

  4. 将设置图片显示隐藏的代码单独分装为函数,方便调用,示例:

    http://img1.sycdn.imooc.com//climg/5fbdbf3809f4e6cf11140439.jpg

    在定时器中直接调用这个函数就可以了

    http://img1.sycdn.imooc.com//climg/5fbdbf690998703412700636.jpg

    小圆点事件监听中也调用这个函数,点击小圆点的时候,图片也会跟着改变了

    http://img1.sycdn.imooc.com//climg/5fbdbf91091408db08610327.jpg

  5. js代码中的提示性语句,需要添加 // 或者 /**/ 符号注释起来,如下:

    http://img1.sycdn.imooc.com//climg/5fbdbff8091ad8bc04790186.jpg

祝学习愉快~

  • 提问者 Vigorous阿炎 #1
    感谢老师的细心解答,在给那个图片变化添加函数那个地方,自己做的话可能会想不出来。 可不可以直接把定时器封装成函数然后调用到data-n事件监听里面呢?
    2020-11-25 11:41:30
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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