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

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

原文连接:完美解决setInterval在浏览器切换时加速的问题

致使这个缘由是浏览器

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

在这里咱们须要用到如下三个知识点post

  • document.onvisibilitychange :

只要页面发生变化,无论是切换到其余的页面仍是把浏览器缩小,都会触发这个事件。动画

  • document.hidden

这个是指当页面不是当前页面时为true,不然为falsespa

  • document.visibilityState:

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

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

hidden:当前网页是不可见的blog

prerender 网页内容被预渲染而且用户不可见事件

unloaded 若是文档被卸载,那么这个值将被返回ip

实际操做效果以下:

document.onvisibilitychange=function(){
	console.log("hidden"+":"+document.hidden);
	console.log("visibilityState"+":"+document.visibilityState);
}
复制代码

执行效果以下:

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

思路:若是页面是不可见的,那么咱们就会清除定时器,若是页面是可见的,那么咱们就从新开启定时器。

因此咱们须要用document.onvisibilitychange进行监听,而后用document.visibilityState或者是document.hidden进行判断。

实际操做:

document.onvisibilitychange=function(){
  if(document.visibilityState=="visible"){
      timer=setInterval(slidemove, 1000);
  }else{
      clearInterval(timer);
  }
}
复制代码

jq中animate的解决

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

$(".slidePanel").stop(true,true).animate({
	"left": -iNow*varWidth+"px",
	"speed":300
});
复制代码
相关文章
相关标签/搜索