2010-07-28 71 views
2

我有一個:last.before()方法沒有在最後一個元素之前插入代碼的一個奇怪的問題。jQuery旋轉木馬跳轉到錯誤的項目


[編輯]
我想出了一個新的問題:/


的問題是(現在的<li>的是按順序) ,旋轉木馬將滾動4個項目,但他們很快跳到下一個項目。

下面的代碼。 (也,我認爲是這樣的:$('#carousel_ul').css({'left' : '0px'});這是做什麼的 - 上線1937

非常感謝

$(document).ready(function() { 
    var numItems = $('#carousel_ul').find('li'); 
    var visibleItems = 4; 
    var difference = visibleItems % numItems.length; 

    $('#carousel_ul li').last().before($('#carousel_ul li:last')+$('#carousel_ul li:last')); 

    while (difference > 1) { 
     $('#carousel_ul li:last').after('<li class="empty" style="background-color: green;"></li>'); 
     difference--; 
    } 

    $('#right_scroll a').click(function(){ 
     var item_width = $('#carousel_ul li').outerWidth() + 10; 
     var left_indent = parseInt($('#carousel_ul').css('left')) - (item_width * 4); 

     $('#carousel_ul:not(:animated)').animate({'left' : left_indent},1500,function(){  
      $('#carousel_ul li:last').after($('#carousel_ul li:first')); 
      $('#carousel_ul').css({'left' : '0px'}); //error here? 
     }); 
     return false; 
    }); 

    $('#carousel_ul li').each(function(intIndex) { 
     var itemName = $(this).attr('name'); 
     $(this).html(itemName); 
     console.log(itemName); 
    }); 

    $('#left_scroll a').click(function(){ 

     var item_width = $('#carousel_ul li').outerWidth() + 10; 
     var left_indent = parseInt($('#carousel_ul').css('left')) + (item_width * 4); 

     $('#carousel_ul:not(:animated)').animate({'left' : left_indent},1500,function(){  
      $('#carousel_ul li:first').before($('#carousel_ul li:last')); 
      $('#carousel_ul').css({'left' : '0px'}); //error here? 
     }); 
     return false; 
    }); 
    $('#tabcontainer > ul').tabs(); 
}); 

而CSS:

#carousel_inner { 
float:left; /* important for inline positioning */ 
width:800px; /* important (this width = width of list item(including margin) * items shown */ 
height: 150px; 
position: relative; 
overflow: hidden; /* important (hide the items outside the div) */ 
/* non-important styling bellow */ 
background: #F0F0F0; 
z-index: 15; 
} 

#carousel_ul { 
position:relative; 
left:0px; /* important (this should be negative number of list items width(including margin) */ 
list-style-type: none; /* removing the default styling for unordered list items */ 
margin: 0px; 
padding: 0px; 
width:9999px; /* important */ 
height: 150px; 
min-height: 150px; 
/* non-important styling bellow */ 
padding-bottom:10px; 
z-index: 15; 
} 

#carousel_ul li{ 
float: left; /* important for inline positioning of the list items */          
width:205px; /* fixed width, important */ 
/* just styling bellow*/ 
padding:0px; 
border: 1px solid black; 
height:150px; 
min-height: 150px; 
z-index: 15; 
} 

#carousel_ul li img { 
.margin-bottom:-4px; /* IE is making a 4px gap bellow an image inside of an anchor (<a href...>) so this is to fix that*/ 
/* styling */ 
cursor:pointer; 
cursor: hand; 
border:0px; 
z-index: 15; 
} 
#left_scroll, #right_scroll{ 
float:left; 
height:130px; 
width:15px; 
background: #C0C0C0; 
z-index: 15; 
} 
#left_scroll img, #right_scroll img{ 
/*styling*/ 
cursor: pointer; 
cursor: hand; 
z-index: 15; 
} 
+0

您確定'#carousel_ul'中有下劃線嗎? – Sarfraz 2010-07-28 19:28:36

+0

@sAc - yup,tis'carousel_ul' – 2010-07-28 19:34:06

+0

已更新的問題。 – 2010-07-28 19:58:19

回答

1

我通過手動設置CSS動畫-160px解決了這個問題。

0

我以前有類似的問題,它是通過使用:last-child和first-child而不是:first和last來解決的,希望這對您有用。我也使用insertBefore()和insertAfter(),它們似乎比after()和before()對我更好。

+0

不,這還沒有改變它::(''歡呼吧 – 2010-07-28 19:36:38

+0

更新的問題。 – 2010-07-28 19:55:59

0

它會工作,而不是像這樣做?

$('#carousel_ul').append('<li class="empty" style="background-color: green;"></li>'); 
+0

Doh!看起來像你打敗了我! – btelles 2010-07-28 19:34:58

+0

不怕,仍然在最後一個元素':(' – 2010-07-28 19:35:26