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日

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: