var positioner=0;
var ames=setInterval(animate, 100);
function animate(){
if (positioner < 1536){
document.getElementsByTagName('img')[0].style.backgroundPosition='-'+positioner+'px';positioner += 256;}
else{document.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 width = "256px" height = "256px" 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>Это мой код, и я хочу спросить:
@PraveenKumarPurushothaman Мне кажется, что изображение становится полностью белым после окончания каждого цикла, а затем снова появляется заметное количество времени спустя
Что значит «не гладкий»? Пожалуйста, не задавайте несколько вопросов.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам просто нужно изменить условие, потому что позиционер находился в пустой части изображения. Теперь позиционер становится равным 0 до того, как будет показана пустая деталь. Вам нужно установить positioner <= 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;}
else{document.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 width = "256px" height = "256px" 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>Вопрос был в том, «почему это не гладко». Вы исправили это (предположительно), теперь объясните, почему / как
@ Лиам Я объяснил.
Примечание: Ответ на ваши первые вопросы - ваша анимация установлена на 100, но ваша позиция, когда анимация заканчивается / начинается, - 1536, измените ее на 1000.
Второй вопрос - попробуйте следующее:
<img onmouseout = "animate(this)" onmouseout = "dontAnimate(this)" src = "smiley.gif" alt = "Smiley">
function dontAnimate() {
// Do your thingy!
// Stop the animation
};
При замедлении стало очевидно, что в конце вы показываете пустой кадр. Если вы измените свой код, чтобы оценить, превышает ли 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 width = "256px" height = "256px" 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>
#NoReproЭээ ... Мне кажется, все в порядке. Здесь используется довольно тупая машина ... Моя машина чертовски медленная. И это нормально.:)