@@ -178,24 +178,17 @@ if (typeof jQuery != 'undefined') {
178178 *
179179 * @return null
180180 */
181- var cloneItems = function ( target )
182- {
183- var $target = $ ( target ) ;
184- var data = getData ( target ) ;
185- var containerWidth = data . $itemContainer . innerWidth ( ) ;
186- var $items = getItems ( target ) ;
181+ var cloneItems = function ( target ) {
182+ var $target = $ ( target ) ;
183+ var data = getData ( target ) ;
184+ var $items = getItems ( target ) ;
187185
188- if (
189- ( containerWidth ) &&
190- ( $items . length ) &&
191- ( data . itemWidth ) &&
192- containerWidth >= ( ( $items . length * data . itemWidth ) / 2 )
193- ) {
194- $items . clone ( ) . appendTo ( data . $itemContainer ) ;
195- cloneItems ( target , containerWidth ) ;
196- }
186+ if ( ! hasEnoughItems ( target ) ) {
187+ var $newItems = $items . clone ( ) . appendTo ( data . $itemContainer ) ;
188+ cloneItems ( target ) ;
189+ }
197190
198- } ;
191+ } ;
199192
200193
201194 /**
@@ -206,29 +199,24 @@ if (typeof jQuery != 'undefined') {
206199 *
207200 * @return null
208201 */
209- var hasEnoughItems = function ( target )
210- {
211- var $target = $ ( target ) ;
212- var data = getData ( target ) ;
213-
214- var numberOfItems = getItems ( target ) . length ;
215- var itemWidth = data . itemWidth ;
216- var containerWidth = data . $itemContainer . innerWidth ( ) ;
217-
218- // Do not scroll if width of all items in scroller is less than container
219- if ( ( numberOfItems ) && ( itemWidth ) && ( containerWidth ) &&
220- ( numberOfItems * itemWidth ) < containerWidth ) {
221- return false ;
222- }
202+ var hasEnoughItems = function ( target ) {
203+ var $target = $ ( target ) ;
204+ var data = getData ( target ) ;
223205
224- // Do not scroll a single item
225- if ( ( numberOfItems ) && numberOfItems == 1 ) {
226- return false ;
227- }
206+ var numberOfItems = getItems ( target ) . length ;
207+ var itemWidth = data . itemWidth ;
228208
229- return true ;
209+ // Do not scroll if width of all items in scroller is less than container
210+ // Do not scroll a single item
211+ return (
212+ (
213+ ( itemWidth <= 0 ) ||
214+ ( numberOfItems === 0 ) || ( numberOfItems > 50 ) ||
215+ ( data . containerWidth < ( ( numberOfItems * itemWidth ) / 2 ) )
216+ ) && ( numberOfItems !== 1 )
217+ ) ;
230218
231- } ;
219+ } ;
232220
233221
234222 /**
@@ -389,6 +377,24 @@ if (typeof jQuery != 'undefined') {
389377 } ;
390378
391379
380+ var resizeTimeout = 0 ;
381+
382+ var onResize = function ( target ) {
383+ if ( resizeTimeout ) clearTimeout ( resizeTimeout ) ;
384+ resizeTimeout = setTimeout ( function ( ) { measureContainer ( target ) ; } , 50 ) ;
385+ } ;
386+
387+
388+ var measureContainer = function ( target ) {
389+ var data = getData ( target ) ;
390+ var $items = getItems ( target ) ;
391+ $items . hide ( ) ;
392+ data . containerWidth = Math . max ( data . $itemContainer . innerWidth ( ) , data . itemWidth ) ;
393+ $items . show ( ) ;
394+ data . $itemContainer . css ( 'max-width' , data . containerWidth + 'px' ) ;
395+ } ;
396+
397+
392398 var methods = {
393399
394400 /**
@@ -419,6 +425,8 @@ if (typeof jQuery != 'undefined') {
419425 removeWhitespaceBetweenTags ( target ) ;
420426 data . itemWidth = getItems ( target ) . first ( ) . outerWidth ( true ) ;
421427
428+ measureContainer ( target ) ;
429+
422430 if ( data . option . showControls ) {
423431 buildControls ( target ) ;
424432 }
@@ -445,11 +453,8 @@ if (typeof jQuery != 'undefined') {
445453
446454 var enoughItems = hasEnoughItems ( target ) ;
447455
448- $ ( window ) . resize ( function ( ) {
449- if ( ( data . resizing || false ) === false ) {
450- data . resizing = true ;
451- data . resizing = false ;
452- }
456+ $ ( window ) . resize ( function ( ) {
457+ onResize ( target ) ;
453458 } ) ;
454459
455460 } ) ;
0 commit comments