2012-02-22 3 views
0

회전식 효과를 만드는 목록을 반복하려고합니다. 수학을 할 수 있도록 먼저 모든 목록의 수를 알아야한다고 생각합니다. 다음과 같은 일을 할 수 있습니다. 다른면에 추가하면 다른면에서 무언가가 제거됩니다. 따라서 첫 번째 목록 항목을 제거하면 마지막 항목이 추가됩니다. 몇 가지 문제 먼저 lastfirst 방법은 당신이 생각하는 방식으로 작동하지 않습니다 거기jquery-carousel 효과를 사용하여 목록을 반복하십시오.

$(function() { 

    $('#up').mouseenter(goUp); 
    $('#down').mouseenter(goDown); 

    function goUp() { 
     $('#list').last('li').remove; 
     $('#list').first('li').append('put the first item here') 
    } 


    function goDown() { 
     $('#list').first('li').remove; 
     $('#list').last('li').append('put the first item here') 
    } 

} 

<a id="up">+</a> 
<ul id="list"> 
    <li>1</li> 
<li>2</li> 
<li>3</li> 
<li>4</li> 
<li>5</li> 

</ul> 

<a id="down">-</a> 
+0

오류가 많습니다. – elclanrs

답변

1

오류가 많으며 논리가 잘못되었다고 생각합니다. .current 클래스를 사용하고 hide() 또는 show() 항목을 사용하려고합니다. 이런 식으로하면 효과가 있습니다.

$items.hide().first().addClass('cur').show(); 

var actions = { 
    getCurIdx: function(){ 
     return $items.filter('.cur').index(); 
    }, 
    goTo: function(idx){ 
     // Something like... 
     $items 
     .removeClass('cur').hide() 
     .eq(idx).addClass('cur').show(); 
    }, 
    next: function(){ 
     var _idx = actions.getCurIdx(); 
     if(_idx < $items.length) { 
      actions.goTo(_idx+1); 
     } else { 
      actions.goTo(0); // Go first 
     } 
    }, 
    prev: function(){ 
     var _idx = actions.getCurIdx(); 
     if(_idx >= 0) { 
      actions.goTo(_idx-1); 
     } else { 
      actions.goTo($items.length-1); // Go last 
     } 
    } 
}; 

$next.click(function(){ actions.next(); }); 
$prev.click(function(){ actions.prev(); }); 
+0

잘못된 요소 인 remove는 실제로 요소를 삭제하지 않고 DOM에서 연결을 끊습니다. 이 객체는 해당 객체가 디핑 될 때까지 선택한 jQuery 객체의 메모리에 유지됩니다. 일단 디 스크립트되면 GC 용 큐에 놓입니다. 즉, 지역 변수로 캡처하면 범위에 보관되며 다시 DOM에 넣을 수 있습니다. –

+0

오, 무슨 뜻인지 알 겠어. 나는 그 대답을 편집했다. 나는 그 객체에 이벤트를 유지하기 때문에 보통'detach()'를 사용한다. 그리고 다시, 나는이 경우에'remove()'가 올바른 접근이라고 생각하지 않는다. – elclanrs

1

, 당신은 그래서 당신이 실제로 무슨 일을하는지 찾아 내고 그들에게 (doc를) 셀렉터를 통과하지 일치하는 셀렉터 내의 마지막 요소는 #list이다. 사용하고자하는 것은 :last 선택 자 (doc) (및 :first)이며 선택자는로 변경됩니다.

다음 remove은 속성이 아닌 메서드이므로 일부 대괄호가 누락되었습니다. 또한 remove은 작업 한 jQuery 객체를 반환하므로 DOM에서 위치를 변경할 수 있습니다.

Here is a jsfiddle 원하는 것을 구현합니다. beforeafter 메서드를 사용하여 새 항목을 DOM에 올바르게 삽입합니다.

관련 문제