首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让定时器页面最小化的时候不执行?

}, [delay]); } setTimeout setInterval 的问题 首先,setTimeout setInterval 作为事件循环中宏任务的“两大主力”,它的执行时机不能跟我们预期一样准确的...根据 当浏览器切换到其他标签页或者最小化时,你的js定时器还准时?[2] 这篇文章的实践结论如下: 谷歌浏览器,当页面处于不可见状态时,setInterval 的最小间隔时间会被限制为 1s。...ie浏览器不可见状态前后的间隔时间不变。 这个结论,没有验证过,但看起来差异挺大,其中还提到了另外一个选择,就是 requestAnimationFrame。...思考与总结 关于定时器,我们平时用得不少,但经常有同学容易忘记清除定时器,结合 useEffect 返回清除副作用函数这个特性,我们可以将这类逻辑一起封装到 hook ,让开发者使用更加方便。...另外,假如希望页面不可见的时候,不执行定时器,可以选择 useRafInterval useRafTimeout,其内部是使用 requestAnimationFrame 进行实现。

1.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

打字机效果的实现与应用

前言 web 应用,模拟编辑器或者模拟输入框中文字啪啦啪啦输入的效果,往往能够吸引人们的眼球,让用户的注意力聚焦输入的内容上,其实使用的是 web 动画模拟打字机效果,本文将大家探讨打字机效果的实现方式以及应用...代码效果图如下: setTimeout 实现 setInterval 一样,setTimeout 也可以实现 /* 产生光标闪烁的效果 */ #content::after...动态简历 之前知乎上看到@方应杭用 vue 写了一个会动的简历,也是运用了打字机效果,将输入输出完美的展现在浏览器里,若不了解其原理会觉得很高大上,但实现代码却很简单,源码在这里 学以致用 之前使用...关于代码原理就就不贴了,大致和 Sildev 差不多,只不过使用的是 react 来实现,代码已经开源,若对你有帮助, 可以点个 star,感谢您的支持!...以上就是本文全部内容,希望这篇文章对大家有所帮助,也可以参考往期的文章或者评论区交流你的想法心得,欢迎一起探索前端。

2.4K20

浏览器实现JavaScript计时器的4种创新方式

Web Worker中使用无限同步循环 由于 Web Worker 本质上是Web线程,因此你可以在其中无限循环而不阻塞主线程。这使你可以访问微秒级的时间分辨率。...这对于 Worker 做出时间关键的决策是特别实用的,可以让主线程准确的知道什么时候合适。例如:只要微秒是质数,就渲染某些东西。要访问微秒,你可以使用 performance.now。 ?...你可以订阅其 animationiteration 事件,并在事件 animation-duration 回调时得到通知。 ? 优点 自动暂停时,标签不在焦点。当标签不在焦点上时,事件根本不会触发。...从 DOM 删除隐藏的 div 时,将自动进行清理。例如,如果你有一个可渲染时间的 React 组件,则无需卸载时做任何事情。该 div 将被删除,该事件将不再触发。...使用 Web Animations API ? Web Animations API 允许你 JavaScript 为 DOM 元素设置动画。 有趣的是,你可以使未渲染完的元素具有动画效果!

1.8K30

通过 React Hooks 声明式地使用 setInterval

所以有一些示例虽然看起来可以有捷径可走,但是我们还是一步步来。 如果你是 Hooks 新手,不太明白纠结啥,不妨读一下 React Hooks 的介绍官方文档。...可是为什么 Hooks 里使用 setInterval clearInterval 这么让人恼火? 回到刚开始的计时器例子,我们尝试手动去实现它。...React 默认会在每次渲染时,都重新执行 effects。这是符合预期的,这机制规避了早期 React Class 组件存在的一系列问题。...先把问题整理下: 第一次渲染的时候,使用 callback1 进行 setInterval(callback1, delay) 下一次渲染的时候,使用 callback2 可以访问到新的 props ...这段代码可以处理各种可能的变更了:延时值改变、暂停继续。虽然 useEffect() API 需要我们前期花更多的精力进行设置清理工作,添加新能力却是轻松了。

7.4K220

优化了进度条,页面性能竟提高了70%

前言 大家好,是零一。最近准备组里进行代码串讲,所以我梳理了下项目之前的业务代码。...梳理的过程看到了有个进度条组件写的非常好,这又想起刚开始学前端时写的进度条的代码,跟这个比起来真的差距太大了(大部分的初学者应该都想不到,而且第一次家实习公司带的mentor亦是如此)。...: 进度条随着视频的长度而进行增长,视频暂停,进度条的动画也会随之暂停 接下来看看大部分人是怎么写的,为什么说思路性能不好。...其实还有一个造成卡顿的原因,你们不妨猜猜看,我们放到最后一起讲,想知道答案的小伙伴可以直接滑到下面 推荐的写法 这里推荐的就是阅读代码时看到的比较优秀的方案了,接下来分享给大家 组件部分 // index.jsx...,就可以实现进度条从0开始递增 同时我们还设置了两个类名的样式,分别用于控制动画的播放暂停 播放完成时,播放次数+1的功能可以通过事件animationend来监听即可 同样的,来看一下这套方案的效果图

87220

优化了进度条,页面性能竟提高了70%

前言 大家好,是零一。最近准备组里进行代码串讲,所以我梳理了下项目之前的业务代码。...梳理的过程看到了有个进度条组件写的非常好,这又想起刚开始学前端时写的进度条的代码,跟这个比起来真的差距太大了(大部分的初学者应该都想不到,而且第一次家实习公司带的mentor亦是如此)。...进度条随着视频的长度而进行增长,视频暂停,进度条的动画也会随之暂停 接下来看看大部分人是怎么写的,为什么说思路性能不好。...其实还有一个造成卡顿的原因,你们不妨猜猜看,我们放到最后一起讲,想知道答案的小伙伴可以直接滑到下面 推荐的写法 这里推荐的就是阅读代码时看到的比较优秀的方案了,接下来分享给大家 组件部分 // index.jsx...,就可以实现进度条从0开始递增 同时我们还设置了两个类名的样式,分别用于控制动画的播放暂停 播放完成时,播放次数+1的功能可以通过事件animationend来监听即可 同样的,来看一下这套方案的效果图

77030

优化了进度条,页面性能竟提高了70%

Part1前言 最近准备组里进行代码串讲,所以我梳理了下项目之前的业务代码。...梳理的过程看到了有个进度条组件写的非常好,这又想起刚开始学前端时写的进度条的代码,跟这个比起来真的差距太大了(大部分的初学者应该都想不到,而且第一次实习的公司带的mentor亦是如此)。...,如图中底部的箭头所示: 进度条随着视频的长度而进行增长,视频暂停,进度条的动画也会随之暂停 接下来看看大部分人是怎么写的,为什么说思路性能不好。...其实还有一个造成卡顿的原因,你们不妨猜猜看,我们放到最后一起讲,想知道答案的小伙伴可以直接滑到下面 Part4推荐的写法 这里推荐的就是阅读代码时看到的比较优秀的方案了,接下来分享给大家 组件部分...,就可以实现进度条从0开始递增 同时我们还设置了两个类名的样式,分别用于控制动画的播放暂停 播放完成时,播放次数+1的功能可以通过事件animationend来监听即可 同样的,来看一下这套方案的效果图

1K40

5个常见的JavaScript内存错误

脚本执行在此过程暂停 它为不可访问的资源释放内存 它是不确定的 它不会一次检查整个内存,而是多个周期中运行 它是不可预测的,但它会在必要时执行 这是否意味着无需担心资源内存分配问题?当然不是。...在这个例子中使用React,但这适用于任何FE框架。...setInterval 的返回值是一个间隔 ID,我们可以用它来取消这个间隔。在这种特殊情况下,我们可以组件卸载后调用 clearInterval。...这里使用的是React,我们可以把所有这些逻辑都包装在一个自定义的 Hook 。...尽管它很强大,但我们也要谨慎的使用它。一旦完成了对对象的观察,就要记得不用的时候取消它。

1.4K20

setInterval hooks 撞在一起,翻车了~

一个 setInterval可以解决问题。于是,不假思索写下的功能代码,测试都懒得测直接部署移测。...(这种行为是愚蠢而不负责任的,千万不要效仿~) 功能代码是使用 react hooks 写的,setInterval 并没有如我所愿的实现轮询的功能,然后怀疑人生了???...问题分析 由于需求很急,于是把代码暂时改成了 Class 组件的形式,重新发了一版,问题便解决了~ 但是事情不能这样子过去,得思考下,为什么 setInterval hooks 一起使用就滑铁卢了呢...delay : null); return {count}; } 到现在,我们的 useInterval 可以处理各种可能的变更了:延时值改变、暂停继续,可比原来的 setInterval...总结 Hooks Class 是两种不同的编程模式,我们使用 Hooks 时候可能会遇到一些奇怪的问题,但是不要慌,我们需要的是发现问题的根本原因,然后改变思维去解决它,而不是使用旧有思维。

1.3K20

早读《Making setInterval Declarative with React Hooks》

https://overreacted.io/making-setinterval-declarative-with-react-hooks/ 这是Dan的一篇文章,详细阐述了如何在Hooks中使用setInterval...我们 effects 中直接使用定时器会重复启动然后清除,effects 每次渲染时都会被调用,因此我们需要一个传递一个空数组来保证它只会被调用一次,此时获取 count 新值就会很困难。...; // 通过 null 来控制不创建 interval 其实通过这个 callback 案例来看,useReducer 也能解决这个问题, reducer 我们可以访问到当前最新的 state... props ,本身 dispatch 也不会改变,所以我们可以从其中提取我们想要的。...最后结论: (Dan)希望这篇文章可以帮助你理解带有 setInterval() 等 API 的 Hooks 的相关常见问题、可以帮助你克服它们的模式、及享用建立它们之上更具表达力的声明式 APIs

61840

你会在浏览器打断点?我会!

「如果大家对这些概念熟悉,可以直接忽略」 同时,由于阅读文章的群体有很多,所以有些知识点可能「视之若珍宝,尔视只如草芥,弃之如敝履」。以下知识点,请「酌情使用」。...换句话说,我们可以里面找到最权威的解释说明使用方式。...日志代码行断点 使用「日志代码行断点」(logpoints)可以「不暂停执行且不用在代码添加console.log()调用的情况下」,将消息输出到控制台。...如果我们想要在调试Axios的接口,我们就需要把这项给取消掉。 处理完后,别记得把这个关闭掉,要不然bundle的debugger也会会触发。...事件监听器断点 当我们希望事件被触发后运行的事件监听器代码上暂停时,请使用事件监听器断点。我们可以选择特定的事件,比如 click,或事件的类别,比如所有鼠标事件

31710

你是否有一个梦想?用JavaScript开发一款自定义配置视频播放器

实战 我会把完整源码放在github上,欢迎来star,地址文末。 首先,我们会使用最原生的JavaScript来实现,老大哥肯定要打头阵啊!...,你可以通过改样式文件还有部分逻辑文件来实现一个自定义配置视频播放器,但是这种效果不太好,所以我们将通过使用Es6的Class类来重写这个自定义配置视频播放器。...,逻辑文件的每一个方法函数还非常的简单明了,可以说是达到我们要求的目的了。...通过将 Babel babel-sublime 包(package)一同使用可以让源码的语法渲染上升到一个全新的水平。 <!...项目中主要难点在于拖拽那块,大家可以先自己尝试着去理解,将会在下一篇主要讲述本项目所遇到的一些问题以及解决方法。

1K20

2016 年的一些总结

因为 Emacs 就是伪装成编辑器的操作系统, Emacs ,你可以编辑、浏览网页、看电影、......但是函数式编程,很多时候是使用匿名函数的,那么这个时候 Y 组合因子的作用就体现出来了,我们需要递归条用这个匿名函数的时候怎么办。Y 组合因子就是来解决这个问题的。...当然还可以才用观察者模式,采用这种方式编写的化,会存在一个问题。就是事件的 bind 、unbind 以及事件的命名空间问题,因为当事件多了,必须采用命名空间来触发屏蔽一些事件。...本应该所有的变化依赖数据状态,编程了都依赖于事件,而事件本身又传递数据,其实增加了组件事件的耦合性。 事件应该作为一个改变状态数据的方式传递状态数据工具。...事件去关系数据的变化,然后通知给其他组件。这样做的化,组件之和状态数据偶性,不用去事件耦合了,不是更低的耦合性?! Redux React 状态机思想,就牵扯到状态数据的流向。

19830

【JS】1676- 重学 JavaScript API - Page Visibility API

在前端开发,我们经常需要根据页面的可见性来控制资源的使用提高页面的性能响应速度。...如果页面不可见,可以通过暂停视频来节省资源带宽。当页面重新变为可见时,可以恢复播放。...自动保存表单数据 如果用户表单上输入了大量数据,而且填写过程离开了页面,我们可以使用 Page Visibility API 确定何时离开页面,并自动保存表单数据,以便以后再次访问。...游戏应用程序 如果我们正在开发一个基于 Web 的游戏,就可以使用 Page Visibility API 暂停恢复游戏,以便玩家能够离开游戏时不会丢失任何进度。...总结 通过本文的介绍,我们了解了 Page Visibility API 的概念、使用方法、兼容性实际应用案例。实际开发,我们可以根据页面的可见性来控制资源的使用,提高用户体验性能优化。

13920

react源码解析2.react的设计理念

解决方案 如何解决这个问题呢,试想一下,如果我们日常的开发单线程的环境,遇到了比较耗时的代码计算会怎么做呢,首先我们可能会将任务分割,让它能够被中断,在其他任务到来的时候让出执行权,当其他任务执行后...实现 刚才的解决方案中提到了任务分割,异步执行,并且能让出执行权,由此可以带出react的三个概念 Fiber:react15的更新是同步的,因为它不能将任务分割,所以需要一套数据结构让它既能对应真实的...,react这部分叫做scheduler。...提问:我们都写过获取数据的代码,获取数据前展示loading,数据获取之后取消loading,假设我们的设备性能网络状况都很好,数据很快就获取到了,那我们还有必要在一开始的时候展示loading?...我们知道generator也可以做到程序的暂停恢复啊,那用generator不行就行了吗,但是generator暂停之后的恢复执行,还是得把执行权交换给直接调用者,调用者会沿着调用栈继续上交,所以也是有传染性的

21630

react源码解析2.react的设计理念

解决方案 如何解决这个问题呢,试想一下,如果我们日常的开发单线程的环境,遇到了比较耗时的代码计算会怎么做呢,首先我们可能会将任务分割,让它能够被中断,在其他任务到来的时候让出执行权,当其他任务执行后...实现 刚才的解决方案中提到了任务分割,异步执行,并且能让出执行权,由此可以带出react的三个概念 Fiber:react15的更新是同步的,因为它不能将任务分割,所以需要一套数据结构让它既能对应真实的...,react这部分叫做scheduler。...提问:我们都写过获取数据的代码,获取数据前展示loading,数据获取之后取消loading,假设我们的设备性能网络状况都很好,数据很快就获取到了,那我们还有必要在一开始的时候展示loading?...我们知道generator也可以做到程序的暂停恢复啊,那用generator不行就行了吗,但是generator暂停之后的恢复执行,还是得把执行权交换给直接调用者,调用者会沿着调用栈继续上交,所以也是有传染性的

31860
领券