2011-01-31 4 views
5

내 페이지에 <img> 요소가 하나만 있습니다. 이 이미지의 src 속성을 7 초마다 변경합니다.JQuery를 사용하여 페이드 효과 또는 이미지 전환 효과를 추가하는 방법은 무엇입니까?

나는 7 초마다 새로운 이미지를 본다. 그러나 새로운 이미지를로드 할 때 페이딩이나 트랜지션 효과를 추가 할 수 있다면 더 좋을 것이다.

일부 스크립트에는이 스크립트가 있습니까?

플러그인이 필요하지 않습니다. 그것을하기위한 단서가 있거나 몇 줄의 샘플이 필요합니다.

답변

9

KaiQing 언급 무엇에도 불구하고, 당신은 당신이 그것을 변경하는 동안 인/아웃 이미지를 페이드하기 위해 jQuery를의 콜백 기능을 사용할 수 있습니다. 이것은과 같이 수행 할 수 있습니다과 같이 #frontImg 뒤에 수 #backImg을 설정

<img id="backImg" /> 
<img id="frontImg" /> 

: http://www.jsfiddle.net/bradchristie/HsKpq/1/

$('img').fadeOut('slow',function(){ 
    $(this).attr('src','/path/to/new_image.png').fadeIn('slow'); 
}); 
+0

그것을 시도하십시오. 이 코드는 실제로 작아 보입니다. 작동한다면, 나는 그것을 받아 들일 것이다. – kheya

+1

나는 그것을 시험해 보았다. 그것은 페이딩을하지만 페이딩은 거의 없습니다. 나는 전체 지역이 짧은 순간 (초의 분수) 동안 희끄무레 해지는 것을 본다. 그런 다음 새로운 이미지를로드합니다. 보기 흉하게. 이미지 전환이 매우 빠르게 이루어지는 곳에서 다른 사람들이 잘하고있는 것을 보았습니다. – kheya

+0

나는 "빠름"도 시도했다. 별로 다르지 않습니다. – kheya

0

하나의 이미지로는이 작업을 수행 할 수 없습니다.

에 체크를 아웃 :

<div id="main_over"></div> 
    <div id="main_img"></div> 
    <div id="himg" style="display:none; clear:both; margin-top:40px;"> 

      <img id="si_15" src="http://website.com/media/uploaded/home_slideshow/53/dummy_image_large_1__large.jpg" alt="dummy_image_large_1" /> 

      <img id="si_16" src="http://website.com/media/uploaded/home_slideshow/53/dummy_image_large_2__large.jpg" alt="dummy_image_large_2" /> 

      <img id="si_17" src="http://website.com/media/uploaded/home_slideshow/53/dummy_image_large_3__large.jpg" alt="dummy_image_large_3" /> 

      <img id="si_18" src="http://website.com/media/uploaded/home_slideshow/53/dummy_image_large_4__large.jpg" alt="dummy_image_large_4" /> 

    </div> 
<style> 
#main_over{position:absolute; z-index:10; width:800px; height:600px; background:#fff; display:block;} 
</style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    var i = 0; 
    $('#himg img').each(function(){ 
     if(i == 0) 
     { 
      $('#main_over').html('<img src="' + $(this).attr('src') + '" alt="" />'); 

     } 
     if(i == 1) 
     { 
      $('#main_img').html('<img src="' + $(this).attr('src') + '" alt="" />'); 
     } 
     i ++; 

     slide.arr.push($(this).attr('src')); 
    }); 

    setTimeout(function(){ 
     if(slide.arr.length < 2) 
      slide.fade(0); 
     else 
      slide.fade(2); 
    }, 3000); 
}); 

var slide = { 
    arr: Array(), 
    fade: function(i) 
    { 
     $('#main_over').fadeOut("medium"); 
     setTimeout(function(){slide.next(i);}, 1000); 
    }, 
    next: function(i) 
    { 
     $('#main_over').html($('#main_img').html()); 
     $('#main_over').css('display', 'block'); 

     $('#main_img').html('<img src="' + slide.arr[i] + '" alt="" />'); 

     i++; 
     if(i >= slide.arr.length) 
      i = 0; 

     setTimeout(function(){slide.fade(i);}, 3000); 
    } 
} 

</script> 
+0

[누구가 말하나?] (http://www.jsfiddle.net/bradchristie/HsKpq/) –

+0

그게 완전히 퇴색하고 사라진다. 나는 그가 과도기적 fx-crossfades 또는 그런 것을 요구하고 있다고 생각했다. –

+1

내가 물었던 것 : 새로운 이미지가로드되면, 페이딩 효과로 오래된 이미지를 숨기고 페이드 효과로 새로운 이미지를로드하고 싶습니다. 그렇게하면 사용자가 갑자기 이미지를 보지 않게됩니다. 미안, 내가 충분히 명확하지 않은 경우. – kheya

1

당신은이 개 이미지를 사용하는 것이 좋습니다

#backImg 
{ 
    position: absolute; 
} 

그런 다음에 7 초마다 발동하는 코드, fadeOut 전면 이미지 ... 이것은 백 이미지가 이미 뒤에로드되어 있기 때문에 크로스 페이드 효과를 자동으로 수행합니다. 페이드가 완료되면, 뒷면 이미지의 SRC에 전면 이미지의 소스를 설정을 보여주고, 뒷면 이미지로 다음 이미지를 사전로드 :

function transitionImages(preloadImgUrl) 
{ 
    $("#frontImg").fadeOut("slow", function() 
    { 
     $("#frontImg").attr("src", $("#backImg").attr("src")).show(); 
     $("#backImg").attr("src", preloadImgUrl); 
    } 
} 

을이 모든 이미지는 동일 크기의 가정합니다. 그렇지 않다면 CSS로 좀 더 정교 해지고 페이드 아웃되는 div에서 이미지를 래핑하는 것이 좋습니다.

+0

방금 ​​하나의 이미지가 있습니다. 예상대로 아무 것도 작동하지 않는다면 이것을 최후의 수단으로 보게 될 것입니다. 답장을 보내 주셔서 대단히 감사합니다. – kheya

관련 문제