# Page switches, particleSystem reset

**URL:** <https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065>\
**Category:** Questions\
**Created:** [August 14, 2025, 10:07am UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065 "2025-08-14T10:07:59Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![jp\_sun](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/jp_sun/32/43090_2.png) [@jp\_sun](https://forum.babylonjs.com/u/jp_sun)\
**Post date:** [August 14, 2025, 10:07am UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065/1 "2025-08-14T10:07:59Z")

</div>

> **[Babylon.js Playground](https://playground.babylonjs.com/#8G58GS)**
>
> Babylon.js playground is a live editor for Babylon.js WebGL and WebGPU 3D scenes

When the page switches,particleSystem seems to be reset,

 ![image](https://us1.discourse-cdn.com/flex024/uploads/babylonjs/original/3X/c/9/c9232afd934ef69c65e2df9c6087f53315e844d2.png)

use visibilitychange paused , doesn’t resolve the issue

```auto
document.addEventListener("visibilitychange", () => {
            if (document.hidden) {
                this.scene.particleSystems.forEach(ps => ps.paused = true);
            } else {
                this.scene.particleSystems.forEach(ps => ps.paused = false);
            }
 });

```

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 14, 2025, 3:04pm UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065/2 "2025-08-14T15:04:41Z")

</div>

Can you try with this:

```auto
window.addEventListener("blur", () => {
  console.log("Window lost focus");
});

window.addEventListener("focus", () => {
  console.log("Window gained focus");
});

```

---

<div class="post-metadata">

**Author:** ![jp\_sun](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/jp_sun/32/43090_2.png) [@jp\_sun](https://forum.babylonjs.com/u/jp_sun)\
**Post date:** [August 15, 2025, 3:46am UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065/3 "2025-08-15T03:46:11Z")

</div>

> **[Babylon.js Playground](https://playground.babylonjs.com/#8G58GS%232)**
>
> Babylon.js playground is a live editor for Babylon.js WebGL and WebGPU 3D scenes

when switch the chrome tab,issue still exists

 ![image](https://us1.discourse-cdn.com/flex024/uploads/babylonjs/original/3X/a/0/a07697aaf693f209b4066ca263f2b38e38785848.png)

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 15, 2025, 4:31pm UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065/4 "2025-08-15T16:31:14Z")

</div>

ok the best way in your case is to do this:

```javascript
engine._deterministicLockstep = true;

```

This is a hack for the PG. In your code, simply create your engine with this:

```javascript
this.engine = new BABYLON.Engine(theCanvas, true, {
  deterministicLockstep: true
});

```

---

<div class="post-metadata">

**Author:** ![jp\_sun](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/jp_sun/32/43090_2.png) [@jp\_sun](https://forum.babylonjs.com/u/jp_sun)\
**Post date:** [August 17, 2025, 5:21am UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065/5 "2025-08-17T05:21:00Z")

</div>

Thanks, this fixed the tab switching problem!  
But I noticed the particles move faster now.  
I get the general reason, but how can I keep the particle speed the same as 60 FPS when running at higher frame rates?  
In 170FPS it very fast

> **[Babylon.js Playground](https://playground.babylonjs.com/#8G58GS%234)**
>
> Babylon.js playground is a live editor for Babylon.js WebGL and WebGPU 3D scenes

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 18, 2025, 3:24pm UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065/6 "2025-08-18T15:24:56Z")

</div>

By default the timestep is 1/60 but you can control it with engine.\_timeStep

---

<div class="post-metadata">

**Author:** ![AncientA](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/ancienta/32/46615_2.png) [@AncientA](https://forum.babylonjs.com/u/AncientA)\
**Post date:** [August 19, 2025, 9:01am UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065/7 "2025-08-19T09:01:39Z")

</div>

You could try using Animation Ratio

---

<div class="post-metadata">

**Author:** ![jp\_sun](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/jp_sun/32/43090_2.png) [@jp\_sun](https://forum.babylonjs.com/u/jp_sun)\
**Post date:** [August 19, 2025, 2:33pm UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065/8 "2025-08-19T14:33:19Z")

</div>

engine.\_timeStep has no effect on particles …

---

<div class="post-metadata">

**Author:** ![jp\_sun](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/jp_sun/32/43090_2.png) [@jp\_sun](https://forum.babylonjs.com/u/jp_sun)\
**Post date:** [August 19, 2025, 2:35pm UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065/9 "2025-08-19T14:35:16Z")

</div>

Could you please be more detailed? particleSystem has no “Animation Ratio” properties

---

<div class="post-metadata">

**Author:** ![Deltakosh](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/deltakosh/32/26635_2.png) [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Post date:** [August 19, 2025, 3:49pm UTC](https://forum.babylonjs.com/t/page-switches-particlesystem-reset/60065/10 "2025-08-19T15:49:54Z")

</div>

Here we are:

[Babylon.js Playground](https://playground.babylonjs.com/#8G58GS#5)

I overloaded scene.getAnimationRatio so you can control the speed when tab is switching
