자바 스크립트를 사용하여 GIF
이미지의 어느 프레임이 애니메이션을 표시하고/또는 중지하는지 제어 할 수 있습니까? GIF
을 여러 프레임으로로드하고 그 중 하나만 표시 할 수있게하려고합니다.Javascript로 GIF 애니메이션을 제어 할 수 있습니까?
나는 별개의 많은 이미지를 가지고 그것을 할 수 있다고 알고 있지만, 내가 원하는 것을 할 수 있다면 GIF
으로 할 수있다. 걱정할 파일은 하나 뿐이다.
자바 스크립트를 사용하여 GIF
이미지의 어느 프레임이 애니메이션을 표시하고/또는 중지하는지 제어 할 수 있습니까? GIF
을 여러 프레임으로로드하고 그 중 하나만 표시 할 수있게하려고합니다.Javascript로 GIF 애니메이션을 제어 할 수 있습니까?
나는 별개의 많은 이미지를 가지고 그것을 할 수 있다고 알고 있지만, 내가 원하는 것을 할 수 있다면 GIF
으로 할 수있다. 걱정할 파일은 하나 뿐이다.
CSS sprites을 사용하여 단일 이미지로 처리 할 수 있습니다.
이것은 2D 평면 주위의 다양한 이미지 변형을 분리하고 별도의 프레임으로 분할하지 않는 한 실제로 적용됩니다. – Pointy
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>
(대부분의 코드는 자신의 예에서 직접 촬영)
이 코드는 저에게 적합하지 않습니다. 그것은 sup1.load()로 gif를 재생하고, gif가 끝나면 sup1.move_to (frame)로 첫번째 프레임으로갑니다. 또한'pause()'를 사용하여 시도했지만 첫 번째 프레임에서 gif를 동결하지 않은 것 같습니다. 첫 번째 프레임에서 멈추도록 원본 코드를 편집했지만 코드를 편집하지 않고 첫 번째 프레임에서 GIF를 일시 중지 할 수있는 방법이 있습니까? –
@LeoCHan 예제 코드를 최신 API로 업데이트했습니다. 지금 시도하십시오. – Charlotte
이 대답은 인정 된 것보다 훨씬 좋은 질문입니다. – Wortex17
내가 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
;exploded
은 재생을 중지하고 각 프레임을 나란히 표시합니다.당신이 스프라이트 시트에 GIF 변환에 OK 있다면, 당신은 그것을 (ImageMagick를 사용하여) 이런 식으로 할 수 있습니다 : 새로운 이미지가 될 것으로도 보인다
montage animation.gif -coalesce -tile x1 -geometry +0+0 -background None -quality 100 spritesheet.png
을 더 작은 크기의.
일단 스프라이트 시트가 있으면 CSS 애니메이션을 사용하십시오. 고정 된 프레임 시간을 가진 애니메이션이 여기에 사용됩니다
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>
당신이 애니메이션이 자동으로 시작 animation
규칙의 끝에 paused
를 추가하지 않도록합니다.
이것은이 문제를 해결할 수있는 멋진 방법입니다. – rafaelcastrocouto
큰 이미지로 스프라이트를 사용하여 이미지를 클리핑하여 정확한 스프라이트 만 표시 할 수도 있습니다. – MBO
@MBO에 동의하고 스프라이트는 매우 간단합니다. 관련 질문 : http://stackoverflow.com/questions/1736922/how-to-show-animated-image-from-png-image-javascript-like-gmail – CMS
사운드없이 비디오를 사용하십시오. 마치 9gag – atilkan