1
我想創建一個不依賴於固定寬度的水平手風琴風格的滑塊。我的問題是:在jQuery寬度動畫上閃爍的邊緣
- 動畫期間在右側列表項「忽隱忽現邊緣」
- (取決於滑塊的最大寬度集)在滑塊的最後一個項目,有時敲其餘下方的滑塊。
我最初的想法是,在動畫期間,所有列表項的添加寬度值必須始終等於100%,但我沒有關於如何強制執行此操作的想法。
...我已經尋找類似的問題在網上沒有運氣,所以任何幫助或想法,將不勝感激。
,這裏是我的jQuery簡化(道歉任何明顯的錯誤,我還在學習):
(function($) {
$.fn.horizontalSlider = function(options) {
var defaults = {
openWidth: 65, // Initial list item width
delay: 500, // Delay before items open
easing: 'linear' // Type of easing for animation
};
var options = $.extend(defaults, options);
return this.each(function() {
// Variables
var listItems = $(this).children('li'); // Select children
var articles = listItems.children('article'); // Select articles
var listNum = listItems.size(); // Count list items
var openWidth = options.openWidth; // Width of open item
var closedWidth = (100 - openWidth)/(listNum - 1); // Width of closed item
// Close all but first item
listItems.css({
'width': closedWidth + '%',
'float': 'left',
'overflow': 'hidden'
}).first().addClass('open').css({
'width': openWidth + '%'
});
var articleWidth = listItems.first().width(); // Width of content hidden by item
// Set width of articles within each item
$(this).find('article').css({'width': articleWidth});
listItems.mouseenter(function() {
// Set variable for current list item
var currentItem = $(this);
if (currentItem.hasClass('open')) { /* Do nothing */ }
else {
hoverTimeout = setTimeout(function() {
// Slide closed open list items
listItems.removeClass('open')
.animate({
'width': closedWidth + '%'
}, { duration: 800, easing: options.easing, queue: false });
currentItem.addClass('open')
.animate({
'width': openWidth + '%'
}, { duration: 800,
queue: false,
easing: options.easing,
complete: function() { /* Callback function */ }
});
}, options.delay);
}
});
listItems.mouseleave(function() {
if(window.hoverTimeout) {
clearTimeout(hoverTimeout);
};
});
});
};
})(jQuery);
我的HTML:
<script type="text/javascript">
$(document).ready(function() {
$('.horizontalSlider').horizontalSlider();
});
</script>
<section>
<ul class="horizontalSlider cf">
<li>
<article>
<img src="image1" />
</article>
</li>
<li>
<article>
<img src="image2" />
</article>
</li>
<li>
<article>
<img src="image3" />
</article>
</li>
<li>
<article>
<img src="image4" />
</article>
</li>
</ul><!-- /.horizontalSlider -->
</section>
和css:
img {max-width: 100%;}
section {display: block; max-width: 1000px; padding: 10px; margin: 60px auto; background: #ccc;}