ArLo182317 2022-11-22 18:42 采纳率: 86.7%
浏览 5
已结题

轮播图离开页面后出现轮播bug

我的轮播图出了点问题。
如果我在当前页面不离开,轮播图是正常播放的,但是我一旦离开页面不看,它就会一直往左播,不停下来,直到图片什么的都看不到了还在播。
有时候我一看,left已经是-10000px多了。非要我在打开那个我暂时缩小没看的页面之后它才会回复正常,有时候又不会恢复正常
怎么解决这个问题?

 var timer;
            var num=[];
            var index=0;
            var arr = document.getElementsByClassName("pin");
            var imglist = document.getElementById("imglist");
            var list = document.getElementsByTagName("li");
            if(list.length>5){
                imglist.style.width = 2500 + (list.length-5)*500 + "px";
            }

            for(var i = 0;i<arr.length;i++){
                arr[i].num = i;
                arr[i].onclick=function(){
                    clearInterval(timer);
                    index = this.num;
                   
                    move(imglist,"left",-index*500,10,function(){
                        autoChange();
                    });
                    arr[index].style.backgroundColor="black";
                    setA();

                }
            }
                autoChange();
                setA();
        
        function autoChange(){
            timer = setInterval(function(){
                index++;
                move(imglist,"left",-index*500,10,function(){
                    setA();
                
                }
                )
            },3500);     
        }
         
        

        function move(obj,attr,target,speed,callback){
        clearInterval(obj.timer)
        var current = parseInt(getComputedStyle(obj,null)[attr])
        if(current > target){
            speed = -speed
        }
        obj.timer = setInterval(function(){
        var oldvalue = parseInt(getComputedStyle(obj,null)[attr]);
        var newvalue = oldvalue +speed;
        if((speed < 0 && newvalue < target) || (speed > 0 && newvalue > target)){
                newvalue = target;
        }
        obj.style[attr] = newvalue + "px";
        if(newvalue == target){
        clearInterval(obj.timer);
            callback();
        }
        },10)
        }

            function setA(){
                if(index >=arr.length){
                    index=0;
                    imglist.style.left = 0;
                    }
                for(var i = 0;i<arr.length;i++){
                    arr[i].style.backgroundColor="";
                    arr[i].style.outline="";
                }
                arr[index].style.backgroundColor="black";   
                arr[index].style.outline="2px solid rgba(255, 255, 255, .3)";
        }
        
        

  • 写回答

3条回答 默认 最新

  • 经海路大白狗 前端领域优质创作者 2022-11-22 18:49
    关注

    用setinterval 了吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月30日
  • 已采纳回答 11月22日
  • 修改了问题 11月22日
  • 创建了问题 11月22日

悬赏问题

  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因