Как только изображение загружено в память, все другие объекты, которые запрашивают это изображение, используя тот же URL, получают ссылку на изображение из кэша браузера.Это позволяет избежать загрузки одного и того же изображения несколько раз.В случае gif одной из метаданных, которые нужно отслеживать, является текущий кадр, который хранится не в элементе <img>
dom, а скорее на уровне браузера в структуре, которую он использует для хранения этого gif.
При загрузке этот индекс кадра сбрасывается.Таким образом, пока браузер обрабатывает цикл gif, загрузка второго изображения устанавливает индекс текущего кадра в начало, следовательно, оба изображения синхронизируются.
Это реализация браузера, и, похоже, большинство браузеров следуют этой реализации.Одним из преимуществ этого является то, что если у вас есть тысячи маленьких картинок (с одного и того же URL) на одной странице, браузер будет выполнять намного меньше вычислений для их визуализации, поскольку он будет изменять только один индекс кадра, а не тысячи.
Редактировать: чтобы исправить ваш код, вам нужно добавить что-нибудь случайное в конец вашего изображения.
function changE(x)
{var image=document.getElementById (x);
image.src="animated.gif?" + Math.random();
}
Так что браузер думает, что это другое изображение (т.е. другой URL).