菜鸟教程小白 发表于 2022-12-11 19:35:07

javascript - 动画播放状态在 Safari 上不起作用


                                            <p><p>我不知道出了什么问题,但我遇到的每个错误都与 Safari 相关,而且非常烦人。我在我的网站上有一个代码,当用户鼠标不在页面主体上时,例如在另一个选项卡中或物理上不在页面上,圆形动画暂停,当用户鼠标再次返回主体时,css 动画恢复它停止的地方。它在 Chrome、Firefox 上完美运行......但在 Safari 上......它有蓝色背景,当你离开 body 时会弹出,当你返回时它会变得疯狂并立即开始所有颜色。有时它甚至不会在完成后启动,您必须刷新。这是我录制的 GIF。</p>

<p>当蓝色背景出现时:</p>

<pre><code>https://gyazo.com/1d063cb8ccce17481df858330b5c8a80
</code></pre>

<p>当所有颜色同时开始时:</p>

<pre><code>https://gyazo.com/9b77fe0746c34aeae73af970aec9e75b
</code></pre>

<p>它的样子</p>

<pre><code>https://gyazo.com/cdcebb77327b166d0995b2598938e6d7
</code></pre>

<p>这是我的代码。</p>

<p>代码笔
<a href="https://codepen.io/anon/pen/dWvwKR" rel="noreferrer noopener nofollow">https://codepen.io/anon/pen/dWvwKR</a> </p>

<p>Java 脚本</p>

<pre><code>$(&#34;body&#34;).on(&#34;mouseleave&#34;,function(){
                  console.log(&#34;MOUSE IS OUT&#34;);
                  $(&#34;#firstCircle&#34;).css({&#34;animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#firstCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#firstCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#firstCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#firstCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;paused&#34;});

                  $(&#34;#secondCircle&#34;).css({&#34;animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#secondCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#secondCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#secondCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#secondCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;paused&#34;});

                  $(&#34;#thirdCircle&#34;).css({&#34;animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#thirdCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#thirdCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#thirdCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#thirdCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;paused&#34;});

                  $(&#34;#fourthCircle&#34;).css({&#34;animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#fourthCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#fourthCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#fourthCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#fourthCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;paused&#34;});

                  $(&#34;#fifthCircle&#34;).css({&#34;animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#fifthCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#fifthCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#fifthCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#fifthCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;paused&#34;});

                  $(&#34;#sixthCircle&#34;).css({&#34;animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#sixthCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#sixthCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#sixthCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;paused&#34;});
                  $(&#34;#sixthCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;paused&#34;});
                  });


                  $(window).on(&#34;mouseenter&#34;,function(){
                  console.log(&#34;MOUSE IS IN&#34;);
                  $(&#34;#firstCircle&#34;).css({&#34;animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#firstCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#firstCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#firstCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#firstCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;running&#34;});

                  $(&#34;#secondCircle&#34;).css({&#34;animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#secondCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#secondCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#secondCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#secondCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;running&#34;});

                  $(&#34;#thirdCircle&#34;).css({&#34;animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#thirdCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#thirdCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#thirdCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#thirdCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;running&#34;});

                  $(&#34;#fourthCircle&#34;).css({&#34;animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#fourthCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#fourthCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#fourthCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#fourthCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;running&#34;});

                  $(&#34;#fifthCircle&#34;).css({&#34;animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#fifthCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#fifthCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#fifthCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#fifthCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;running&#34;});

                  $(&#34;#sixthCircle&#34;).css({&#34;animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#sixthCircle&#34;).css({&#34;-webkit-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#sixthCircle&#34;).css({&#34;-ms-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#sixthCircle&#34;).css({&#34;-moz-animation-play-state&#34;:&#34;running&#34;});
                  $(&#34;#sixthCircle&#34;).css({&#34;-o-animation-play-state&#34;:&#34;running&#34;});
                  });


            });
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您好@thatoneguy90,这是因为 Safari 会在 1000 毫秒(1 秒)后暂停非事件选项卡上的 JS 以保留 CPU。您需要解决 <code>setInterval</code> 和 <code>requestAnimationFrame</code> 的自动暂停问题。当您在视口(viewport)外滚动时,这也可能导致蓝色。</p>

<p>一定要访问这个以获取有关如何使其工作的 JS 示例:
<br/> <a href="https://stackoverflow.com/questions/5927284/how-can-i-make-setinterval-also-work-when-a-tab-is-inactive-in-chrome" rel="noreferrer noopener nofollow">How can I make setInterval also work when a tab is inactive in Chrome?</a> </p>

<p>您可能还会发现这有助于了解有关该主题的更多信息:
<br/> <a href="https://stackoverflow.com/questions/15871942/how-do-browsers-pause-change-javascript-when-tab-or-window-is-not-active" rel="noreferrer noopener nofollow">How do browsers pause/change Javascript when tab or window is not active?</a> </p>

<p>此外,如果这接近最终结果,您也可以使用 CSS 来实现。</p></p>
                                   
                                                <p style="font-size: 20px;">关于javascript - 动画播放状态在 Safari 上不起作用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/43691545/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/43691545/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: javascript - 动画播放状态在 Safari 上不起作用