qq_45093594 2019-05-28 15:44 采纳率: 100%
浏览 343
已采纳

js图片切换,附图绿框中的小点触发mouseover时对应图片不一致,麻烦大神们指点

做个实例,js中发现了些问题!当我点击图中两侧的向左向右按钮后,再onmouseover触发图下的小点时,对应的图片不一致了,onmouseout后又正常了。

图片说明

<!doctype HTML>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <meta name="description" content="">
        <meta name="keywords" content="">
        <style type="text/css">
        *{
            padding:0;
            margin:0;
        }
        a{
            text-decoration:none;
        }
        li{
            list-style:none;
        }
        img{
            border:0;
        }
        #scrollAdvWrap{
            width:340px;
            height:240px;
            overflow:hidden;
            border:1px solid #000;
            margin:0 auto;
            position:relative;
        }
        #adv{
            position:absolute;
            top:0;
            left:0;
        }
        #adv li{
            float:left;
        }
        #adv img{
            width:340px;
            height:240px;
            vertical-align:top;
        }
        #prev,#next{
            position:absolute;
            width:30px;
            height:40px;
            top:100px;
            z-index:1;
            opacity:0.5;
            filter:alpha(opacity=50);
        }
        #prev{
            left:0;
            background:url(images/news_arr_l.png);
        }
        #next{
            right:0;
            background:url(images/news_arr_r.png);
        }
        #dotBtn{
            position:absolute;
            bottom:10px;
            left:50%;
            transform:translate(-50%,0);
            -webkit-transform:translate(-50%,0);
            -moz-transform:translate(-50%,0);
            -o-transform:translate(-50%,0);
            -ms-transform:translate(-50%,0);
        }
        #dotBtn li{
            float:left;
            width:10px;
            height:10px;
            background:silver;
            cursor:pointer;
            margin:0 4px;
        }
        #dotBtn .active{
            background:red;
        }
        </style>
        <script>
        window.$=HTMLElement.prototype.$=function(selector){
            return (this==window?document:this).querySelectorAll(selector);
        }

        window.onload=function(){
            app.tabAdv();
        }

        var app={};

        app.tabAdv=function(){
            var lBtn=$("#prev")[0];
            var rBtn=$("#next")[0];
            var oUl=$("#adv")[0];
            var oLi=oUl.$("li");
            var oImg=oUl.$("img");
            var dot=$("#dotBtn")[0];
            var dotLi=dot.$("li");
            var oneWidth=oLi[0].offsetWidth;
            var arr=[];
            var dotArr=[];
            var timer=null;

            function getWidth(){
                var widths=oneWidth*oLi.length;
                oUl.style.width=widths+"px";
            }
            getWidth();

            for(var i=0;i<oLi.length;i++){
                var image=oLi[i].getElementsByTagName("img")[0];
                var imgSrc=image.src;
                arr.push(imgSrc);
            }
            console.log(arr);

            for(var i=0;i<dotLi.length;i++){
                dotArr.push(dotLi[i].className);
            }
            console.log(dotArr);

            timer=setInterval(toNext,3000);

            for(var i=0;i<oLi.length;i++){
                oLi[i].onmouseover=dotLi[i].onmouseover=lBtn.onmouseover=rBtn.onmouseover=function(){
                    clearInterval(timer);
                }

                oLi[i].onmouseout=dotLi[i].onmouseout=lBtn.onmouseout=rBtn.onmouseout=function(){
                    timer=setInterval(toNext,3000);
                }
            }

            lBtn.onmouseover=rBtn.onmouseover=function(){
                clearInterval(timer);
                this.style.opacity=1;
                this.style.filter="alpha(opacity=100)";
            }

            lBtn.onmouseout=rBtn.onmouseout=function(){
                timer=setInterval(toNext,3000);
                this.style.opacity=0.5;
                this.style.filter="alpha(opacity=50)";
            }

            lBtn.addEventListener("click",toPrev);
            rBtn.addEventListener("click",toNext);

            function toPrev(){
                arr.unshift(arr[arr.length-1]);
                arr.pop();

                dotArr.push(dotArr[0]);
                dotArr.shift();

                for(var i=0;i<oImg.length;i++){
                    oImg[i].src=arr[i];
                }
                for(var i=0;i<dotLi.length;i++){
                    dotLi[i].className=dotArr[i];
                }
            }

            function toNext(){
                arr.push(arr[0]);
                arr.shift();

                dotArr.unshift(dotArr[dotArr.length-1]);
                dotArr.pop();

                for(var i=0;i<oImg.length;i++){
                    oImg[i].src=arr[i];
                }
                for(var i=0;i<dotLi.length;i++){
                    dotLi[i].className=dotArr[i];
                }
            }

            for(var i=0;i<dotLi.length;i++){
                dotLi[i].index=i;
                dotLi[i].onmouseover=function(){
                    clearInterval(timer);
                    for(var i=0;i<dotLi.length;i++){
                        dotLi[i].className="";
                    }
                    this.className="active";
                    oImg[0].src=arr[this.index];//小点对应的图片不正确,出现混乱;
                }
            }
        }
        </script>
    </head>

    <body>
        <div id="scrollAdvWrap">
            <ul id="adv">
                <li>
                    <a href="#" target="_blank"><img src="images/2019030312_db55ca2f155f4d19aeca24361d0c9d81_7129_mwpm_03200403.jpg" /></a>
                </li>
                <li>
                    <a href="#" target="_blank"><img src="images/2019030301_5f23d23f8b6743c2be80bdce17d80b11_2742_mwpm_03200403.jpg" /></a>
                </li>
                <li>
                    <a href="#" target="_blank"><img src="images/l21S-hrvcwnk5207891.jpg" /></a>
                </li>
                <li>
                    <a href="#" target="_blank"><img src="images/lpfY-hrvcwnk5211656.jpg" /></a>
                </li>
                <li>
                    <a href="#" target="_blank"><img src="images/pjCb-hrvcwnk5230787.jpg" /></a>
                </li>
            </ul>
            <a href="javascript:;" id="prev"></a>
            <a href="javascript:;" id="next"></a>
            <ul id="dotBtn">
                <li class="active"></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </body>
</html>
  • 写回答

1条回答 默认 最新

  • 听楼一夜雨 2019-05-28 16:37
    关注

    因为你用的push和shift导致图片顺序一直在变,相当于图片地址在不断改变,但是下面的焦点又是按照li的顺序来的,就有冲突了,对应当前的位置可能图片地址已经换了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序