Spec-Zone.ru › jQuery UI

Виджет меню

Виджет менюверсия добавлена: 1.9

Описание: Тематическое меню с взаимодействием мышью и клавиатурой для навигации.

Быстрая навигацияПримеры

Параметры

классы
отключено
иконки
элементы
меню
позиция
роль

Методы

blur
свернуть
свернуть все
удалить
отключить
включить
развернуть
фокус
экземпляр
первый элемент
последний элемент
следующий
следующая страница
параметр
предыдущий
предыдущая страница
обновить
выбрать
виджет

Точки расширения

_closeOnDocumentClick
_isDivider

События

blur
создание
фокус
выбор

Меню можно создать из любого допустимого разметки, при условии, что элементы имеют строгие отношения родитель/дочерний. Наиболее часто используемый элемент — неупорядоченный список (<ul>). Кроме того, содержимое каждого пункта меню должно быть заключено в элемент DOM уровня блока. В примере ниже <div> используются в качестве обёртки:

<ul id="menu">
  <li>
    <div>Item 1</div>
  </li>
  <li>
    <div>Item 2</div>
  </li>
  <li>
    <div>Item 3</div>
    <ul>
      <li>
        <div>Item 3-1</div>
      </li>
      <li>
        <div>Item 3-2</div>
      </li>
      <li>
        <div>Item 3-3</div>
      </li>
    </ul>
  </li>
  <li>
    <div>Item 4</div>
  </li>
  <li>
    <div>Item 5</div>
  </li>
</ul>

Если вы используете структуру, отличную от <ul>/<li>, включая использование одного и того же элемента для меню и пунктов меню, используйте параметр menus, чтобы указать способ различения двух элементов, например, menus: "div.menuElement".

Любой пункт меню можно отключить, добавив класс ui-state-disabled к этому элементу.

Иконки

Чтобы добавить иконки в меню, включите их в разметку:

<ul id="menu">
  <li>
    <div><span class="ui-icon ui-icon-disk"></span>Save</div>
  </li>
</ul>

Меню автоматически добавляет необходимый отступ к пунктам без иконок.

Разделители

Элементы разделителей можно создать, включив пункты меню, содержащие только пробелы и/или дефисы:

<ul id="menu">
  <li>
    <div>Item 1</div>
  </li>
  <li>-</li>
  <li>
    <div>Item 2</div>
  </li>
</ul>

Взаимодействие с клавиатурой

  • ENTER/SPACE: Выполнить действие выделенного пункта меню, которое может заключаться в открытии подменю.
  • UP: Переместить фокус на предыдущий пункт меню.
  • DOWN: Переместить фокус на следующий пункт меню.
  • RIGHT: Открыть подменю, если оно доступно.
  • LEFT: Закрыть текущее подменю и переместить фокус на родительский пункт меню. Если не в подменю, ничего не делать.
  • ESCAPE: Закрыть текущее подменю и переместить фокус на родительский пункт меню. Если не в подменю, ничего не делать.

Ввод буквы перемещает фокус на первый элемент, заголовок которого начинается с этой буквы. Повтор ввода той же буквы циклически перебирает соответствующие элементы. Ввод дополнительных символов в течение таймера в одну секунду соответствует этим символам.

Отключенные элементы могут получить фокус клавиатуры, но не допускают никакого другого взаимодействия.

Стиль

Виджет меню использует фреймворк CSS jQuery UI CSS framework для стилизации своего внешнего вида. Если требуется специфическая стилизация меню, для переопределений или в качестве ключей для classes параметра можно использовать следующие имена классов CSS:

  • ui-menu: Внешний контейнер меню, а также любое вложенное подменю. Этот элемент верхнего уровня будет дополнительно иметь класс ui-menu-icons , если меню содержит иконки.
    • ui-menu-item: Контейнер для отдельных пунктов меню. Он содержит элемент для самого текста пункта, а также элемент для подменю.
      • ui-menu-item-wrapper: Элемент обёртки внутри каждого отдельного пункта меню, содержащий текстовое содержимое и значок, указывающий на подменю.
        • ui-menu-icon: Значки подменю, установленные через параметр icons.
    • ui-menu-divider: Элементы разделителей между пунктами меню.

Зависимости

  • UI Core
  • Фабрика виджетов
  • Позиция

Дополнительные заметки:

  • Для работы данного виджета требуется функциональный CSS. Если вы создаете пользовательскую тему, используйте специфический CSS-файл виджета в качестве отправной точки.

Параметры

классы

Тип: Объект
По умолчанию: {}

Укажите дополнительные классы для добавления к элементам виджета. Любой из классов, указанных в разделе Стилизация, может быть использован в качестве ключей для переопределения их значения. Чтобы узнать больше об этом параметре, ознакомьтесь со статьей статьёй о параметре classes.

Примеры кода:

Инициализируйте меню с заданным параметром classes, изменяя стили для класса ui-menu:

$( ".selector" ).menu({
  classes: {
    "ui-menu": "highlight"
  }
});

Получите или установите свойство параметра classes, после инициализации, здесь считываем и изменяем стили для класса ui-menu:

// Getter
var themeClass = $( ".selector" ).menu( "option", "classes.ui-menu" );
 
// Setter
$( ".selector" ).menu( "option", "classes.ui-menu", "highlight" );

отключено

Тип: Булево
По умолчанию: false
Отключает меню, если установлено в true.
Примеры кода:

Инициализируйте меню с заданным параметром disabled:

$( ".selector" ).menu({
  disabled: true
});

Получите или установите параметр disabled после инициализации:

// Getter
var disabled = $( ".selector" ).menu( "option", "disabled" );
 
// Setter
$( ".selector" ).menu( "option", "disabled", true );

иконки

Тип: Объект
По умолчанию:
{
  submenu: "ui-icon-carat-1-e"
}
Иконки для использования для подменю, соответствующие иконкам, предоставляемым фреймворком jQuery UI CSS.
Примеры кода:

Инициализируйте меню с заданным параметром icons:

$( ".selector" ).menu({
  icons: { submenu: "ui-icon-circle-triangle-e" }
});

Получите или установите параметр icons после инициализации:

// Getter
var icons = $( ".selector" ).menu( "option", "icons" );
 
// Setter
$( ".selector" ).menu( "option", "icons", { submenu: "ui-icon-circle-triangle-e" } );

элементы

Тип: Строка
По умолчанию: "> *"

Селектор для элементов, которые служат пунктами меню.

Примечание: Параметр items не должен изменяться после инициализации.
(версия добавлена: 1.11.0)
Примеры кода:

Инициализируйте меню с заданным параметром items:

$( ".selector" ).menu({
  items: ".custom-item"
});

Получите параметр items после инициализации:

// Getter
var items = $( ".selector" ).menu( "option", "items" );

меню

Тип: Строка
По умолчанию: "ul"

Селектор для элементов, которые служат контейнерами меню, включая подменю.

Примечание: Параметр menus не должен изменяться после инициализации. Существующие подменю не будут обновлены.
Примеры кода:

Инициализируйте меню с заданным параметром menus:

$( ".selector" ).menu({
  menus: "div"
});

Получите параметр menus после инициализации:

// Getter
var menus = $( ".selector" ).menu( "option", "menus" );

позиция

Тип: Объект
По умолчанию: { my: "left top", at: "right top" }
Определяет позицию подменю относительно связанного родительского пункта меню. Параметр of по умолчанию устанавливается на родительский пункт меню, но вы можете указать другой элемент для позиционирования. Для получения более подробной информации о различных параметрах вы можете обратиться к утилите jQuery UI Position.
Примеры кода:

Инициализируйте меню с заданным параметром position:

$( ".selector" ).menu({
  position: { my: "left top", at: "right-5 top+5" }
});

Получите или установите параметр position после инициализации:

// Getter
var position = $( ".selector" ).menu( "option", "position" );
 
// Setter
$( ".selector" ).menu( "option", "position", { my: "left top", at: "right-5 top+5" } );

роль

Тип: Строка
По умолчанию: "menu"

Настройте ARIA-роли, используемые для меню и пунктов меню. По умолчанию используется "menuitem" для элементов. Установка параметра role в "listbox" приведет к использованию "option" для элементов. Если установлено значение null, роли не будут установлены, что полезно, если меню управляется другим элементом, который поддерживает фокус.

Примечание: Параметр role не должен изменяться после инициализации. Существующие (под)меню и пункты меню не будут обновлены.
Примеры кода:

Инициализируйте меню с заданным параметром role:

$( ".selector" ).menu({
  role: null
});

Получите параметр role после инициализации:

// Getter
var role = $( ".selector" ).menu( "option", "role" );

Методы

blur( [event ] )Возвращает: jQuery (только для плагина)

Удаляет фокус с меню, сбрасывает стили активного элемента и вызывает событие меню blur.
  • event
    Тип: Event
    Что вызвало размытие меню.
Примеры кода:

Вызов метода blur:

$( ".selector" ).menu( "blur" );

collapse( [event ] )Возвращает: jQuery (только для плагина)

Закрывает текущее активное подменю.
  • event
    Тип: Event
    Что вызвало закрытие меню.
Примеры кода:

Вызов метода collapse:

$( ".selector" ).menu( "collapse" );

collapseAll( [event ] [, all ] )Возвращает: jQuery (только для плагина)

Закрывает все открытые подменю.
  • event
    Тип: Event
    Что вызвало закрытие меню.
  • all
    Тип: Boolean
    Указывает, должны ли быть закрыты все подменю, или только подменю ниже и включая меню, которое содержит или содержит целевой элемент срабатывания события.
Примеры кода:

Вызов метода collapseAll:

$( ".selector" ).menu( "collapseAll", null, true );

destroy()Возвращает: jQuery (только для плагина)

Полностью удаляет функциональность меню. Это вернет элемент в его состояние до инициализации.
  • Этот метод не принимает аргументов.
Примеры кода:

Вызов метода destroy:

$( ".selector" ).menu( "destroy" );

disable()Возвращает: jQuery (только для плагина)

Отключает меню.
  • Этот метод не принимает аргументов.
Примеры кода:

Вызов метода disable:

$( ".selector" ).menu( "disable" );

enable()Возвращает: jQuery (только для плагина)

Включает меню.
  • Этот метод не принимает аргументов.
Примеры кода:

Вызов метода enable:

$( ".selector" ).menu( "enable" );

expand( [event ] )Возвращает: jQuery (только для плагина)

Открывает подменю ниже текущего активного элемента, если оно существует.
  • event
    Тип: Event
    Что вызвало раскрытие меню.
Примеры кода:

Вызов метода expand:

$( ".selector" ).menu( "expand" );

focus( [event ], item )Возвращает: jQuery (только для плагина)

Активирует указанный элемент меню и вызывает событие меню focus. Открывает подменю элемента меню, если оно существует.
  • event
    Тип: Event
    Что вызвало получение фокуса элементом меню.
  • item
    Тип: jQuery
    Элемент меню, которому нужно присвоить фокус/активацию.
Примеры кода:

Вызов метода focus:

$( ".selector" ).menu( "focus", null, menu.find( ".ui-menu-item" ).last() );

instance()Возвращает: Объект

Получает объект экземпляра меню. Если у элемента нет связанного экземпляра, возвращается undefined.

В отличие от других методов виджета, instance() можно безопасно вызывать для любого элемента после загрузки плагина меню.

  • Этот метод не принимает аргументов.
Примеры кода:

Вызов метода instance:

$( ".selector" ).menu( "instance" );

isFirstItem()Возвращает: jQuery (только для плагина)

Возвращает логическое значение, указывающее, является ли текущий активный элемент первым элементом в меню.
  • Этот метод не принимает аргументов.
Примеры кода:

Вызов метода isFirstItem:

var firstItem = $( ".selector" ).menu( "isFirstItem" );

isLastItem()Возвращает: jQuery (только для плагина)

Возвращает логическое значение, указывающее, является ли текущий активный элемент последним элементом в меню.
  • Этот метод не принимает аргументов.
Примеры кода:

Вызов метода isLastItem:

var lastItem = $( ".selector" ).menu( "isLastItem" );

next( [event ] )Возвращает: jQuery (только для плагина)

Перемещает активное состояние к следующему элементу меню.
  • event
    Тип: Event
    Что вызвало перемещение фокуса.
Примеры кода:

Вызов метода next:

$( ".selector" ).menu( "next" );

nextPage( [event ] )Возвращает: jQuery (только для плагина)

Перемещает активное состояние к первому элементу меню ниже нижней части прокручиваемого меню или к последнему элементу, если меню не прокручиваемое.
  • event
    Тип: Event
    Что вызвало перемещение фокуса.
Примеры кода:

Вызов метода nextPage:

$( ".selector" ).menu( "nextPage" );

option( optionName )Возвращает: Объект

Получает значение, в настоящее время связанное с указанным optionName.

Примечание: Для параметров, значения которых являются объектами, вы можете получить значение конкретного ключа, используя нотацию точки. Например, "foo.bar" получит значение свойства bar в параметре foo.

  • optionName
    Тип: Строка
    Название параметра для получения.
Примеры кода:

Вызов метода:

var isDisabled = $( ".selector" ).menu( "option", "disabled" );

option()Возвращает: Объект

Получает объект, содержащий пары ключ/значение, представляющие текущий хеш параметров меню.
  • Эта сигнатура не принимает аргументов.
Примеры кода:

Вызов метода:

var options = $( ".selector" ).menu( "option" );

option( optionName, value )Возвращает: jQuery (только для плагина)

Устанавливает значение параметра меню, связанного с указанным optionName.

Примечание: Для параметров, значения которых являются объектами, вы можете установить значение только одного свойства, используя нотацию точки для optionName. Например, "foo.bar" обновит только свойство bar параметра foo.

  • optionName
    Тип: Строка
    Название параметра для установки.
  • value
    Тип: Объект
    Значение для установки параметра.
Примеры кода:

Вызов метода:

$( ".selector" ).menu( "option", "disabled", true );

option( options )Возвращает: jQuery (только для плагина)

Устанавливает один или несколько параметров для меню.
  • options
    Тип: Объект
    Карта пар "параметр-значение" для установки.
Примеры кода:

Вызов метода:

$( ".selector" ).menu( "option", { disabled: true } );

previous( [event ] )Возвращает: jQuery (только для плагина)

Перемещает активное состояние на предыдущий пункт меню.
  • event
    Тип: Event
    Что вызвало перемещение фокуса.
Примеры кода:

Вызов метода previous:

$( ".selector" ).menu( "previous" );

previousPage( [event ] )Возвращает: jQuery (только для плагина)

Перемещает активное состояние на первый пункт меню, расположенный выше верха прокручиваемого меню, или на первый пункт, если меню не прокручивается.
  • event
    Тип: Event
    Что вызвало перемещение фокуса.
Примеры кода:

Вызов метода previousPage:

$( ".selector" ).menu( "previousPage" );

refresh()Возвращает: jQuery (только для плагина)

Инициализирует подменю и пункты меню, которые ещё не были инициализированы. Новые пункты меню, включая подменю, могут быть добавлены в меню, или всё содержимое меню может быть заменено, а затем инициализировано с помощью метода refresh().
  • Этот метод не принимает никаких аргументов.
Примеры кода:

Вызов метода refresh:

$( ".selector" ).menu( "refresh" );

select( [event ] )Возвращает: jQuery (только для плагина)

Выбирает текущий активный пункт меню, сворачивает все подменю и вызывает событие меню select.
  • event
    Тип: Event
    Что вызвало выбор.
Примеры кода:

Вызов метода select:

$( ".selector" ).menu( "select" );

widget()Возвращает: jQuery

Возвращает объект jQuery, содержащий меню.
  • Этот метод не принимает никаких аргументов.
Примеры кода:

Вызов метода widget:

var widget = $( ".selector" ).menu( "widget" );

Точки расширения

Виджет меню создан с помощью фабрики виджетов и может быть расширен. При расширении виджетов у вас есть возможность переопределять или добавлять к поведению существующих методов. Следующие методы предоставляются как точки расширения с такой же стабильностью API, как и перечисленные выше методы плагина. Дополнительную информацию о расширениях виджетов см. в разделе Расширение виджетов с помощью фабрики виджетов.

_closeOnDocumentClick( event )Возвращает: Boolean

Метод, определяющий, следует ли закрывать открытые меню при щелчке по документу. По умолчанию меню закрываются, если щелчок не произошёл по меню.
  • event
    Тип: Event
Примеры кода:

Никогда не закрывать меню при щелчке по документу.

_closeOnDocumentClick: function( event ) {
  return false;
}

_isDivider( item )Возвращает: Boolean

Определяет, должен ли элемент фактически представлять собой разделитель, а не элемент меню. По умолчанию, любой элемент, содержащий только пробелы и/или дефисы, считается разделителем.
  • item
    Тип: jQuery
Примеры кода:

Обрабатывать все элементы как элементы меню без разделителей.

_isDivider: function( item ) {
  return false;
}

События

blur( event, ui )Тип: menublur

Срабатывает, когда меню теряет фокус.
  • event
    Тип: Event
  • ui
    Тип: Object
    • item
      Тип: jQuery
      Текущий активный пункт меню.
Примеры кода:

Инициализировать меню с указанным обратным вызовом blur:

$( ".selector" ).menu({
  blur: function( event, ui ) {}
});

Привязать обработчик событий к событию menublur:

$( ".selector" ).on( "menublur", function( event, ui ) {} );

create( event, ui )Тип: menucreate

Срабатывает при создании меню.
  • event
    Тип: Event
  • ui
    Тип: Object

Примечание: Объект ui пустой, но включён для согласованности с другими событиями.

Примеры кода:

Инициализировать меню с указанным обратным вызовом create:

$( ".selector" ).menu({
  create: function( event, ui ) {}
});

Привязать обработчик событий к событию menucreate:

$( ".selector" ).on( "menucreate", function( event, ui ) {} );

focus( event, ui )Тип: menufocus

Срабатывает, когда меню получает фокус или при активации любого пункта меню.
  • event
    Тип: Event
  • ui
    Тип: Object
    • item
      Тип: jQuery
      Текущий активный пункт меню.
Примеры кода:

Инициализировать меню с указанным обратным вызовом focus:

$( ".selector" ).menu({
  focus: function( event, ui ) {}
});

Привязать обработчик событий к событию menufocus:

$( ".selector" ).on( "menufocus", function( event, ui ) {} );

select( event, ui )Тип: menuselect

Срабатывает при выборе пункта меню.
  • event
    Тип: Event
  • ui
    Тип: Object
    • item
      Тип: jQuery
      Текущий активный пункт меню.
Примеры кода:

Инициализировать меню с указанным обратным вызовом select:

$( ".selector" ).menu({
  select: function( event, ui ) {}
});

Привязать обработчик событий к событию menuselect:

$( ".selector" ).on( "menuselect", function( event, ui ) {} );

Пример:

Простое меню jQuery UI

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>menu demo</title>
  <link rel="stylesheet" href="https://code.jquery.com/ui/1.13.3/themes/smoothness/jquery-ui.css">
  <style>
  .ui-menu {
    width: 200px;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.1.js"></script>
  <script src="https://code.jquery.com/ui/1.13.3/jquery-ui.js"></script>
</head>
<body>
 
<ul id="menu">
  <li>
    <div>Item 1</div>
  </li>
  <li>
    <div>Item 2</div>
  </li>
  <li>
    <div>Item 3</div>
    <ul>
      <li>
        <div>Item 3-1</div>
      </li>
      <li>
        <div>Item 3-2</div>
      </li>
      <li>
        <div>Item 3-3</div>
      </li>
    </ul>
  </li>
  <li>
    <div>Item 4</div>
  </li>
  <li>
    <div>Item 5</div>
  </li>
</ul>
 
<script>
$( "#menu" ).menu();
</script>
 
</body>
</html>

Демо:

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jqueryui.com/menu

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API