前段时间,所写的一个”js无间隙滚动效果“,当页面离开后,重新返回时,会出现动画的错乱。我以为是因为我代码逻辑的原因导致的,但是,当在火狐浏览器上进行浏览时却没有动画错乱的问题。

于是乎,在网上查找是否有人遇到相似的问题。效果似乎不是很理想,刚开始发现仅仅有一个人遇到和我相似的问题,解决办法是用window的blur和focus事件进行处理,如下图:

,当然了,这种方法是行得通的,但是,当使用双屏显示时,你的文档页面是可见的,当发生blur事件时,会清除动画,但是此时因为双屏的原因,你的浏览器的视图仍然可见。此时,便发生了比较尴尬的事:视图可见,但是动画却停止了。

从而只能另寻他法,

visibilitychange事件。

简单的说,当用户最小化网页或移动到另一个标签时,API会发送 visibilitychange 有关该网页的可见性的事件。你可以检测到该事件并执行一些操作或行为。例如:标签页隐藏的时候停止播放音乐视频、停止一些不必要的轮询,还有停止一些诸如轮播等循环动画效果等等。这些可以节省服务器和本地的开销;

此时要解决上述问题仍然不够,还需要一个属性进行监管控制就是:

document的可见性属性

Page Visibility (Second Edition) 中定义了2个只读的 document 属性:hidden 和 visibilityState

其中 document.hidden 是一个布尔值,简单的表示标签页显示或者隐藏。而 document.visibilityState 属性更为详细,目前有四个可能的值:

visible : 页面内容至少部分可见。这意味着在实际情况中,该网页是一个非最小化窗口的可见标签页。

hidden : 页面内容是对用户不可见。实际上,这意味着该文档是后台标签页或最小化窗口的一部分,或者系统锁屏是时的状态。

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

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

一般情况下我们使用 document.hidden 就能满足通常的需求。

visibilitychange监听事件

你可以在 document对象上注册一个监听 visibilitychange 事件,根据 document.hidden 或者 document.visibilityState 属性做一些业务逻辑:

var time=  setInterval(function () {
_this.setAnimatedEleHeight()
},_this.settings.delay);
document.addEventListener('visibilitychange',function(){ //浏览器切换事件
if(document.visibilityState=='hidden') { //状态判断
clearInterval(time)
}else {
time=setInterval(function () {
_this.setAnimatedEleHeight()
},_this.settings.delay);
}
}); 此时,通过document的监听事件visibilitychange来判断浏览器视图的显隐,从而控制动画的清除与执行,就可以完美解决上述问的动画问题;

浏览器页面的显隐对js的setInterval()执行所产生的bug的更多相关文章

  1. JS/jquery实现鼠标控制页面元素显隐

    最近网站要上一个活动广告横幅,当用户鼠标划过时显隐二维码.像这种鼠标事件控制页面元素显隐的情况,码农们会经常遇到,可以通过javascript或jquery代码实现,下面就几种常见需求一起归纳一下. ...

  2. Uipath 获取当前浏览器页面URL

    文章来源东京IT青年前线 http://www.rpatokyo.com   Uipath 获取当前浏览器页面URL的方法 Inject Js Script   因为目前没有直接获取页面URL的Act ...

  3. 浏览器页面左上角出现undefined

    浏览器页面左上角出现undefined, js文档中: let list; list += html代码; 解决办法: let list = html代码;

  4. js代码的执行顺序及运算

    代码执行顺序:从上往下,一行一行的执行(也叫一个模块一个模块的执行) 变量的提升(它不是变量的功能,而是浏览器的功能) js代码如何执行? js代码执行前,浏览器会给他一个全局的环境 叫window, ...

  5. JS学习笔记:(一)浏览器页面渲染机制

    浏览器的内核主要分为渲染引擎和JS引擎.目前市面上常见的浏览器内核可以分为这四种:Trident(IE).Gecko(火狐).Blink(Chrome.Opera).Webkit(Safari).这里 ...

  6. Js 日期选择,可以的一个页面中重复使用本JS日历,兼容IE及火狐等主流浏览器,而且界面简洁、美观,操作体验也不错。

    <html> <head> <title>Js日期选择器并自动加入到输入框中</title> <meta http-equiv="con ...

  7. js禁止浏览器页面后退功能

    js禁止浏览器页面后退功能: <script> $(function(){ ) { //防止页面后退 history.pushState(null, null, document.URL) ...

  8. Vue-cli中使用vConsole,以及设置JS连续点击控制vConsole按钮显隐功能实现

    最近发现了一个鹅厂的仓库,实现起来比我这个方便[捂脸].https://github.com/AlloyTeam/AlloyLever 一.vue-cli脚手架中搭建的项目引入vConsole调试 1 ...

  9. 浏览器页面区域大小的js获取方法

    浏览器页面区域大小的获取:  /在IE.FireFox.Opera下都可以使用  document.body.clientWidth  document.body.clientHeight  //即可 ...

随机推荐

  1. knn的python代码

    import heapq import random class Classifier: def __init__(self, bucketPrefix, testBucketNumber, data ...

  2. ASP.NET WEBAPI设计(文摘)

    HTML5和移动应用推动WEB API的发展 第1部分 基础知识 第1章 因特网,万维网和HTTP协议 1.1 WEB体系结构 资源,URI(统一资源标识符)和表示 URI分为两种类型:URL(统一资 ...

  3. 8 求s=a+aa+aaa+aaaa+aa...a的值

    题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字. * 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制.程序分析:关键是计算出每一项的 ...

  4. # 20155327 2016-2017-4 《Java程序设计》第9周学习总结

    20155327 2016-2017-4 <Java程序设计>第9周学习总结 20155327 2016-2017-4 <Java程序设计>第9周学习总结 教材学习内容总结 了 ...

  5. CSS定位DIV(一)一列样式

    前记:CSS样式核心就是DIV布局,一些基础知识省略不记,接下来的日志只关注最核心的布局问题. 一.一列布局 1.固定宽高 直接声明宽高,或用百分比表示. width:400px; 或 width:7 ...

  6. PHP(四)表单的基本处理

  7. 一个GIS系统需具备的功能

    数据的存储(数据结构) 图形显示 功能:拓扑分析 开源的GIS系统:QGIS,SharpMap 各个功能组件

  8. JAVA常见面试题及解答

    JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...

  9. django def validate_column和validate

    VIewDemo class RegUserSet(mixins.CreateModelMixin,viewsets.GenericViewSet): serializer_class = RegUs ...

  10. @componentscan注解的用法和作用

    刚刚开始学习spring boot,在application中忘记加上@componentscan,倒置web请求一直没有都是404,@componentscan的作用如下: @ComponentSc ...