Javascript 动画不流畅? [关闭]

Posted

技术标签:

【中文标题】Javascript 动画不流畅? [关闭]【英文标题】:Javascript Animation Not Smooth? [closed] 【发布时间】:2019-03-21 05:04:09 【问题描述】:

var positioner=0;
var ames=setInterval(animate, 100);
function animate()
if(positioner < 1536)
document.getElementsByTagName('img')[0].style.backgroundPosition='-'+positioner+'px';positioner += 256;
elsedocument.getElementsByTagName('img')[0].style.backgroundPosition='-'+positioner+'px'; positioner=0;
img  
    background-image: url('https://cdn-images-1.medium.com/max/1600/1*WhDjw8GiV5o0flBXM4LXEw.png');
    background-repeat: no-repeat;
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<img   onmouseover=""/>
<h1>The background-position Property</h1>
<p>Here, the background image will be positioned in the center of the element (in this case, the body element).</p>
</html>

这是我的代码,我想问的是:

    为什么图像不流畅??我说动画就像每隔几秒刷新一次 鼠标悬停时如何让图片移动(onMouseOver)?

【问题讨论】:

#NoRepro Erm... 我觉得没问题。在这里使用一台非常愚蠢的机器......我的机器慢得要命。它渲染得很好。 :) @PraveenKumarPurushothaman 对我来说,看起来图像在每个周期结束后完全变白,然后在很长一段时间后重新出现 “不流畅”是什么意思?也请不要问多个问题。 【参考方案1】:

您只需要更改条件,因为定位器位于图像的空白部分。现在定位器在显示空白部分之前变为 0。如果你不想让gif闪烁,你需要设置positioner &lt;= length of image

var positioner=0;
var ames=setInterval(animate, 100);
function animate()
if(positioner <= 1000)
document.getElementsByTagName('img')[0].style.backgroundPosition='-'+positioner+'px';positioner += 256;
elsedocument.getElementsByTagName('img')[0].style.backgroundPosition='-'+positioner+'px'; positioner=0;
img  
    background-image: url('https://cdn-images-1.medium.com/max/1600/1*WhDjw8GiV5o0flBXM4LXEw.png');
    background-repeat: no-repeat;
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<img   onmouseover=""/>
<h1>The background-position Property</h1>
<p>Here, the background image will be positioned in the center of the element (in this case, the body element).</p>
</html>

【讨论】:

问题是“为什么不流畅”。你已经修复它(大概)现在解释为什么/如何 @Liam 我解释了。【参考方案2】:

注意:您的第一个问题的答案是 - 您的动画设置为 100,但您在动画结束/开始时的位置是 1536 将其更改为 1000

第二个问题 - 试试这个:

<img onmouseout="animate(this)" onmouseout="dontAnimate(this)" src="smiley.gif" >
function dontAnimate() 
 // Do your thingy!
 // Stop the animation
;

【讨论】:

【参考方案3】:

通过放慢速度,很明显你在最后显示了一个空帧。如果您在渲染每个循环后更改代码以评估 positioner 是否超过最大值,这将为您解决问题。

var positioner=0;
var ames=setInterval(animate, 100);
function animate()
  document.getElementsByTagName('img')[0].style.backgroundPosition='-'+positioner+'px';
  positioner += 256;
  if(positioner >= 1536) positioner = 0
img  
    background-image: url('https://cdn-images-1.medium.com/max/1600/1*WhDjw8GiV5o0flBXM4LXEw.png');
    background-repeat: no-repeat;
<img   onmouseover=""/>
<h1>The background-position Property</h1>
<p>Here, the background image will be positioned in the center of the element (in this case, the body element).</p>

【讨论】:

以上是关于Javascript 动画不流畅? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能使这个动画更流畅?

如何使用流畅的动画从页面视图中删除页面?

基于 JavaScript 滚动的动画在移动设备上不稳定

第一次键盘出现时的动画有时不流畅

为啥这个基本的 Canvas 动画不流畅?

Bootstrap 折叠动画不流畅