Leave a Comment
Алгоритм динамического центрирования меню по нужному элементу
Задача — при возникновении события подсветить нужный пункт меню, показать по 3 пункта сверху и снизу, остальные скрыть.
Это относится и к пагинация (paging).
Если, к примеру, это второй пункт меню, то снизу показать больше.
В общем, чтобы в сумме всегда было показано 7 пунктов.
Решил показать алгоритм, которым воспользовался, чтобы всегда быть уверенным, что показывается столько элементов, сколько нужно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
/** * Показать и подсветить текущий элемент в меню */ function updateMenu( ItemId ) { var selectorItemMenuPrefix = '.js-menu-item-', selectorItemMenu = '.js-menu-item', maxItemsToShow = 7, $itemsToShow, $items = $( selectorItemMenu ); var $currentItem = $( selectorItemMenuPrefix + ItemId ); // открываем пункты в меню так, чтобы текущий элемент была в центре if ( $currentItem.length ) { var position = $items.index( $currentItem ); var startFrom = position > maxItemsToShow ? position - maxItemsToShow : 0, endAt = position < $items.length - maxItemsToShow ? position + maxItemsToShow : $items.length; // вычисляем, какие пункты меню показывать while ( ( endAt - startFrom ) > maxItemsToShow ) { if ( position > ( Math.floor( ( endAt - startFrom ) / 2 ) + startFrom ) ) { startFrom ++; } else { endAt --; } } var itemCounter = 0; $items. each( function() { var $el = $( this ); if ( itemCounter === position ) { $el.toggleClass( 'active', true ); } else { $el.toggleClass( 'active', false ); } if ( itemCounter >= startFrom && itemCounter <= endAt ) { $el.toggleClass( 'hidden', false ); } else { $el.toggleClass( 'hidden', true ); } itemCounter ++; } ); } } //===========================================================================}}} |
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.