是否有可能使用JavaScript來控制圖像的哪個幀正在顯示和/或停止動畫。我想能夠加載一個GIF
幾幀,只顯示其中之一。你可以用Javascript控制GIF動畫嗎?
我知道我可以用很多單獨的圖片來做,但如果我可以做我想要的GIF
,它只會是一個需要擔心的文件。
是否有可能使用JavaScript來控制圖像的哪個幀正在顯示和/或停止動畫。我想能夠加載一個GIF
幾幀,只顯示其中之一。你可以用Javascript控制GIF動畫嗎?
我知道我可以用很多單獨的圖片來做,但如果我可以做我想要的GIF
,它只會是一個需要擔心的文件。
您可以使用單個圖像使用CSS sprites來做到這一點。
這是真的,只要人們想要做的是在2D平面周圍分割圖像的不同變化,而不是將其分割爲獨立的幀。 – Pointy 2010-03-05 08:11:41
您可以使用libgif庫。
它允許您啓動/停止gif並控制gif所在的幀。
<script type="text/javascript" src="./libgif.js"></script>
<img src="./example1_preview.gif" rel:animated_src="./example1.gif"
width="360" height="360" rel:auto_play="1" rel:rubbable="1" />
<script type="text/javascript">
$$('img').each(function (img_tag) {
if (/.*\.gif/.test(img_tag.src)) {
var rub = new SuperGif({ gif: img_tag });
rub.load(function(){
console.log('oh hey, now the gif is loaded');
});
}
});
</script>
(大部分代碼是直接從他們的榜樣拍攝)
我用x-gif它很酷,易於安裝。
從Github:
<x-gif src="probably_cats.gif"></x-gif>
,您可以添加以下的屬性:
speed="1.0"
(默認模式)通過的值乘以速度屬性;sync
延遲迴放到外部對象;bpm="120"
將GIF同步到給定的每分鐘節拍;選項:
stopped
防止GIF動畫從;
fill
導致GIF擴展到覆蓋其容器;
n-times="3.0"
(僅速度模式)在設定的次數後停止播放(通過添加停止的屬性);snap
(同步&僅適用於bpm模式)而不是允許更長的GIF同步到多個節拍,強制它們只適合一個;ping-pong
從前到後播放GIF,然後回到前端;debug
接通從所述的Gif爆器輸出調試;exploded
停止播放,並將每個幀並排顯示。從他們的[Github](https://github.com/geelen/x-gif)頁面可以像這樣工作:<你可以添加幾個屬性到這個標籤播放模式,選項和調試。我試圖編輯你的答案,提供[總結](http://stackoverflow.com/review/suggested-edits/9071628),但它被拒絕了,如果你有時間,你可以自己編輯它。 – Armfoot 2015-08-06 19:48:22
謝謝@Armfoot – insan3 2015-08-07 18:12:53
不,謝謝你insan3! :) – Armfoot 2015-08-07 19:25:59
如果你和你的GIF轉換爲精靈表OK,你可以做這樣(使用ImageMagick):
montage animation.gif -coalesce -tile x1 -geometry +0+0 -background None -quality 100 spritesheet.png
它甚至可能是新的形象會尺寸較小。
一旦你有一個精靈表,使用CSS動畫。如果你希望動畫不會自動啓動,加paused
到animation
統治結束
var el = document.getElementById('anim');
function play() {
el.style.animationPlayState = 'running';
}
function pause() {
el.style.animationPlayState = 'paused';
}
function reset() {
el.style.animation = 'none';
el.offsetHeight; /* trigger reflow to apply the change immediately */
el.style.animation = null;
}
function stop() {
reset();
pause();
}
#anim {
background-image: url('https://i.stack.imgur.com/J5drY.png');
width: 250px;
height: 188px;
animation: anim 1.0s steps(10) infinite;
}
@keyframes anim {
100% { background-position: -2500px; }
}
<div id="anim" title="Animated Bat by Calciumtrice"></div>
<button onclick="play()">Play</button>
<button onclick="pause()">Pause</button>
<button onclick="reset()">Reset</button>
<button onclick="stop()">Stop</button>
:具有固定幀時間的動畫在這裏使用。
這是一個真棒和簡單的方法來解決這個問題,gratz! – rafaelcastrocouto 2017-09-01 17:25:56
你也可以做一個大的圖像與精靈,只顯示精確的精靈通過剪輯圖像 – MBO 2010-03-05 07:40:23
同意@MBO,與精靈很簡單,檢查相關的問題:http://stackoverflow.com/questions/1736922/how-to-show-animated-image-from-png-image-using-javascript-like-gmail – CMS 2010-03-05 07:45:31
使用沒有聲音的視頻。就像9gag – atilkan 2016-09-08 13:25:19