2012-11-18 53 views
6

Tôi có một chuỗi các div đang trôi nổi đến vô cùng theo đường ngang. Tôi có một chiều rộng cố định div chứa chúng, tràn: ẩn. Cuối cùng, tôi muốn nhấn div/nút ở bên trái và bên phải để cuộn qua các mục (so với sử dụng thanh cuộn).Cuộn ngang jQuery (nhấp và tạo ảnh động)

Tôi gặp sự cố khi tải .animate() để hoạt động. Tôi muốn mỗi lần nhấp để di chuyển các mục trong danh sách.

Nó sẽ hoạt động tương tự như danh sách "Khách hàng đã mua mặt hàng này cũng được mua" của Amazon mà bạn có thể cuộn qua theo cách tương tự. Tôi đã bị cám dỗ để thử sử dụng .mousedown và có nó di chuyển trong khi giữ (tương tự như cuộn thật) nhưng muốn làm điều này dễ dàng hơn cách tiếp cận đầu tiên.

Đây là fiddle và mã:

http://jsfiddle.net/stfzy/16/

HTML:

<div id="container"> 
<div id="arrowL"> 
</div> 
<div id="arrowR"> 
</div> 
<div id="list-container"> 
    <div class='list'> 
     <div class='item'> 
     </div> 
     <div class='item'> 
     </div> 
     <div class='item'> 
     </div> 
     <div class="item"> 
     </div> 
    </div> 
</div> 

CSS:

#container{ 
width:340px; 
    height:50px; 
} 

#list-container { 
overflow:hidden;  
width: 300px; 
float:left;  
} 

.list{ 
    background:grey; 
min-width:700px; 
    float:left; 
} 


#arrowR{ 
background:yellow; 
    width:20px; 
    height:50px; 
    float:right; 
    cursor:pointer; 
} 


#arrowL{ 
background:yellow; 
    width:20px; 
    height:50px; 
    float:left; 
    cursor:pointer; 
} 

.item{ 
    background:green; 
width:140px; 
    height:40px; 
    margin:5px; 
    float:left; 
} 

jQuery

$(document).ready(function() { 

    $('div#arrowR').click(function(){ 

     $('div.item').animate({'left':'-=300px'}); 

    }); 

    $('div#arrowR').click(function(){ 

     $('div.item').animate({'left':'+=300px'}); 

    }); 

}); 

Mọi sự giúp đỡ được đánh giá cao. Cảm ơn!

Trả lời

17

Thêm position:relative-.item, như vậy:

.item{ 
    background:green; 
    width:140px; 
    height:40px; 
    margin:5px; 
    float:left; 
    position:relative; /* Put me here! */ 
} 

dụ làm việc: http://jsfiddle.net/mattblancarte/stfzy/21/

Có một vài lỗi hơn trong thiết lập của bạn, nhưng điều này sẽ giúp bạn lột. :)

Sửa ::

Dưới đây là một giải pháp nhanh chóng để giải quyết các lỗi mà danh sách sẽ trượt quá xa trong hai hướng:

$(document).ready(function() { 

    var $item = $('div.item'), //Cache your DOM selector 
     visible = 2, //Set the number of items that will be visible 
     index = 0, //Starting index 
     endIndex = ($item.length/visible) - 1; //End index (NOTE:: Requires visible to be a factor of $item.length... You can improve this by rounding...) 

    $('div#arrowR').click(function(){ 
     if(index < endIndex){ 
      index++; 
      $item.animate({'left':'-=300px'}); 
     } 
    }); 

    $('div#arrowL').click(function(){ 
     if(index > 0){ 
      index--;    
      $item.animate({'left':'+=300px'}); 
     } 
    }); 

}); 
+0

Awesome! Và tôi hiểu ý của bạn về nhiều lỗi hơn ... Tôi cho rằng bạn đang đề cập đến thực tế là danh sách của tôi có điểm bắt đầu và kết thúc. Tuy nhiên, nó cần phải lặp lại để hoạt động hiệu quả. Hmmm ... thời gian để tìm ra cái đó. Cảm ơn một lần nữa. – jstacks

+0

Hoặc có thể tôi sẽ khiến các nút mũi tên tắt khi không còn nội dung nữa ... có thể là một lựa chọn tốt hơn. – jstacks

+0

@jstacks Rất vui được trợ giúp! Nếu bạn chưa tìm ra, bạn có thể theo dõi vị trí của cuộn bằng cách gán chỉ mục bắt đầu bằng 0 và sau đó tính chỉ mục tối đa dựa trên số lượng mục nằm trong danh sách. Nếu bạn nhấn min, hãy tắt nút trái. Nếu bạn nhấn tối đa, hãy tắt nút phải. Hy vọng rằng có ý nghĩa! Đó không phải là cách duy nhất để đi về nó, nhưng đó là một giải pháp. :) –

Các vấn đề liên quan