完美解决setInterval在浏览器切换时加速的问题

JavaScript中当我们切换浏览器的时候,setInterval会加快速度

导致这个原因是

发现这是因为浏览器本着节省内存的性质,当切换到其他页面时,采油系统页面的定时器不运动,但是动画依然排列,当切换回来的时候,动画加速运动,出现错误,在轮播图之类的页面经常会发生这样的情况

在这里我们需要用到以下三个知识点

  • document.onvisibilitychange :

只要页面发生变化,不管是切换到其他的页面还是把浏览器缩小,都会触发这个事件。

  • document.hidden

这个是指当页面不是当前页面时为true,否则为false

  • document.visibilityState:

这个属性有四个值,分为是:visible,hidden,prerender,unloaded

visible 表示当前网页是可见或者是部分可见的。

hidden:当前网页是不可见的

prerender 网页内容被预渲染并且用户不可见

unloaded 如果文档被卸载,那么这个值将被返回

实际操作效果如下:

 
  1. document.onvisibilitychange=function(){

  2. console.log("hidden"+":"+document.hidden);

  3. console.log("visibilityState"+":"+document.visibilityState);

  4. }

  5. 复制代码

执行效果如下:

 

 

 

解决setInterval在浏览器切换中的问题:

思路:如果页面是不可见的,那么我们就会清除定时器,如果页面是可见的,那么我们就重新开启定时器。

所以我们需要用document.onvisibilitychange进行监听,然后用document.visibilityState或者是document.hidden进行判断。

实际操作:

 
  1. document.onvisibilitychange=function(){

  2. if(document.visibilityState=="visible"){

  3. timer=setInterval(slidemove, 1000);

  4. }else{

  5. clearInterval(timer);

  6. }

  7. }

  8. 复制代码

 

jq中animate的解决

如果用的是jq的animate这个方法,就只需要到这个方法的前面加上stop(true,true)

 
  1. $(".slidePanel").stop(true,true).animate({

  2. "left": -iNow*varWidth+"px",

  3. "speed":300

  4. });

 

 

原文链接:https://juejin.im/post/5b30a4a451882574ba421b68

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值