2010-07-15 2 views
0

제 코드를 사용하면 div로 4 개의 이미지를 스크롤 할 수 있습니다. 코드, 다른 이미지로 스크롤하려면 '.next'추가 유지해야합니다. jquery 통해 스크롤 할 이미지의 양을 결정하고 싶지 않아, jquery 많은 div 이미지를 가지고 있고, 스크롤하여 모든 것을 스크롤 한 다음 맨 위로 스크롤합니다. 코드를 살펴 보겠습니다. 다른 플러그인을 사용하고 싶지는 않습니다. 여러 KB 플러그인과 비교했을 때 코드 줄이 더 복잡합니다.Jquery : ".next(). next(). next() 등을 넣지 않아도 다음 이미지를 계속 선택 했습니까?

ps : 왜 '-165px'가 필요한지 잘 모르겠지만 그림 사이를 스크롤 할 때 완벽하게 정렬됩니다.

JQuery와 :

JQuery와 :

$(document).ready(function(){ 
    $('.rotate_container').everyTime(10, function(){ 
     $('.rotate_container').animate({scrollTop: $('img').offset().top - 165}, 2000).delay(1000) 
     .animate({scrollTop: $("img").next().offset().top - 165}, 2000).delay(1000)     
     .animate({scrollTop: $("img").next().next().offset().top - 165}, 2000).delay(1000) 
     .animate({scrollTop: $("img").next().next().next().offset().top - 165}, 2000).delay(1000) 
    }); 
}); 

어떤 아이디어?

+0

HTML 코드도 붙일 수 있습니까? – cji

+0

게시했습니다. ".everytime"은 내가 찾은 timers.js 플러그인의 일부입니다. 그걸 어떻게 처리해야할지 모르기 때문에 반복됩니다. –

답변

2

나는 그것을 테스트하지 않았다하지만 내 솔루션은 당신이 당신의 용기와 하나의 CSS 규칙 내에서 하나의 추가 div를 넣어 필요

$(document).ready(function(){ 
    var container = $('.rotate_container'); 
    var images = container.find('img'); 
    container.everyTime(10, function(){ 
     images.each(function() { 
      container.animate({scrollTop: $(this).offset().top - 165}, 2000).delay(1000); 
     }); 
    }); 
}); 
+0

그 대답은 내가 찾고 있던, 당신은 끝내. 왜 물어 보면 어떨까요? 처음에는 왜 두 변수가 맞습니까? 코드를 재사용하는 것만으로도 충분하다고 생각했지만, 각각 "컨테이너"와 "이미지"를 한 번씩 사용합니다. 다른 이유가 있습니까? 그것은 코드 또는 뭔가를 빠르게합니까? 고마워, 네 도움에 정말 감사한다. –

+0

아, 움직이지 않을 때 마우스가 이미지 위로 움직일 때 일시 중지하는 방법을 알고 있습니까?그래서 다음 이미지로 미끄러 져 사람이 넘어갈 경우 슬라이딩하는 이미지에 도달하면 사람이 마우스를 제거 할 때까지 멈추고 다음 이미지로 계속 슬라이드됩니다. 정말 고마워요. –

+0

그래, 재사용을 위해 jQuery 객체를 캐시하는 것이 항상 좋은 습관이다. 나는 돌아가서 코드를 여러 번 다시 팩해야했기 때문에 이제 캐싱으로 시작한다. 또한'$ ('. rotate_container')'를 두 번 사용 했으므로 캐쉬 할 가치가있었습니다. 잠시 멈추는 질문에 대해 생각하고 다시 생각해 보겠습니다. – Stephen

0

작동처럼이 보인다. 다음과 같이 바뀝니다.

<script type="text/javascript"> 
$(document).ready(function(){ 
    var top = 0; 
    var up = true; 
    var wrap = $(".rotate_container > div ") // shortcut :) 

    function slide() { 
     wrap.animate({ "top" : top+"px" }, 400); 

     if(Math.abs(top) > wrap.height()){ // if all inner_wrap is outside container 
      up = false; 
     } 
     else if(top >= 0) { 
      up = true 
     } 
     if(up) top -= 165; 
     else top += 165; 

     setTimeout(slide, 500) // call function slide after 500 ms 
    } 
    setTimeout(slide, 500) // call function slide after 500 ms 
}); 
</script> 

<style type="text/css"> 
.rotate_container { 
    max-height:292px; 
    max-width:760px; 
    height:292px; 
    width:760px; 
    overflow:hidden; 
    padding:0; 
    margin:0;} 

.rotate_container > div { 
    position: relative; 
    top: 0; left: 0; 
} 

.rotate_container img { 
    height:292px; 
    width:760px;} 
</style> 


<div class="rotate_container grid_12"> 
    <div id="inner_wrap"> 
     <img src="{{ MEDIA_URL }}/employlogo.png" class="top" /> 
     <img src="{{ MEDIA_URL }}/employlogo.png" class="middle" /> 
     <img src="{{ MEDIA_URL }}/employlogo.png" class="midbottom" /> 
     <img src="{{ MEDIA_URL }}/employlogo.png" class="bottom" /> 
     <img src="{{ MEDIA_URL }}/employlogo.png" class="verybottom" /> 
    </div> 
</div> 

글쎄, 꽤 좋지는 않지만 작동합니다. 처음에 스 니펫을 오해했습니다. 죄송합니다.

+0

안녕하세요. 작고 멋집니다. 내가 할 수있는 한 가지 더 궁금한 점이 있다면,이 줄을 어떻게 바꿔 가면서 위로 점진적으로 위로 스크롤하기 시작 하든지, 하나의 부드러운 애니메이션에서 맨 위로 돌아가도록 할 수 있습니다. ... "else top + = 165;" –

+0

'else top + = 165; 대신'else top = 0;'을 써라. 아니면'else {top = 0; wrap.animate ({ "top": top + "px"}, 2000); setTimeout (슬라이드, 2000); 반환; }'이 애니메이션이 더 오랜 시간 동안 걸리길 원한다면. – cji

0

손쉬운 효과로 이미지를 스크롤하는 jCarousel 또는 jCarouselLite의 jCarouselLite를 확인하십시오.

위의 해결 방법은 첫 번째 img를 변수에 할당 한 다음 콜백에서 값을 증가시킬 수 있습니다. 다음 코드에서 경고 출력은 '두 번째'입니다 : 그래서

<div>First</div> 
<div>Second</div> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    var test = $('div'); 
     test = test.next(); 
     alert(test.html()); 
}); 
</script> 

, 코드 수정 :

$(document).ready(function(){ 
    var img = $('.rotate_container img'); 
    $('.rotate_container').everyTime(10, function(){ 
     $('.rotate_container').animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000) 
     .animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000) 
     .animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000) 
      .animate({scrollTop: img.offset().top - 165}, 2000,null,function() { img = img.next(); }).delay(1000) 
    }); 
}); 

등을

아마 함수를 사용하여 그것을조차 할 것을 수정할 수 있습니다 청소기도.

0

재귀. 당신이 원하는 것을하기위한 함수를 작성하라. (나는 특정 코드를 도울 것이다. 그러나 나는 당신이 무엇을 할 것인지 모른다.) 함수가 첫 번째 이미지를 가져 오도록하십시오. 함수에서 원하는 것을 수행하고 함수 호출을 닫기 전에 함수를 호출하고 .next() 변수를 보냅니다.

+0

내가 원했던 모든 것은 몇 초 동안 1 개의 이미지를 보여주고 다음 이미지가 보여지는 이미지 스크롤러입니다. 여기에 제가 제작하고자하는 것을 정확히 발견했습니다. http://papermashup.com/demos/jquery-slideshow/ -하지만 위의 코드와 함께, 그것은 잘 작동, 유일한 문제는 jquery 코드에서 정확히 얼마나 많은 이미지를 말할 필요가있다. 아래로 스크롤하여 마지막 세 줄이 같지만 각 줄마다 ".next()"를 추가하여 스크립트를 통해 이미지를 계속 볼 수 있도록하는 방법을 모르겠습니다. 지금 당장은 얼마나 많은 사람들이 손을 잡을지를 결정합니다. –