UNPKG

carbon-components

Version:

Carbon Components is a component library for IBM Cloud

118 lines (91 loc) 4.56 kB
### SCSS #### Modifiers Use these modifiers with .bx--overflow-menu-options class. | Selector | Description | | ---------------------------------- | ------------------------------------------- | | `.bx--overflow-menu--flip` | Reverse the direction of the overflow menu. | | `.bx--overflow-menu-options--open` | Displays the overflow menu options. | ### JavaScript #### Getting component class reference ##### ES2015 ```javascript import { OverflowMenu } from 'carbon-components'; ``` ##### With pre-build bundle (`carbon-components.min.js`) ```javascript var OverflowMenu = CarbonComponents.OverflowMenu; ``` #### Instantiating ```javascript // `#my-overflow-menu` is an element with `[data-overflow-menu]` attribute OverflowMenu.create(document.getElementById('my-overflow-menu')); ``` #### Public Methods | Name | Params | Description | | ---------------------- | ----------------- | ------------------------------------------------------------------ | | `shouldStateBeChanged` | `state`: `String` | Return true if the given state is different from the current state | | `release` | | Deletes the instance and removes document event listeners | #### Options | Option | Default Selector | Description | | ------------------------ | ---------------------------- | --------------------------------------------------------------------------------- | | `selectorInit` | `[data-overflow-menu]` | The CSS selector to find menu | | `selectorPlacementScope` | `body` | The CSS selector to find the element you wish the append the menu contents to | | `selectorOptionMenu` | `.bx--overflow-menu-options` | The CSS selector to find the contents of the menu | | `objMenuOffset` | `{ top: 3, left: 61 }` | An object containing the top and left offset values in px | | `objMenuOffsetFlip` | `{ top: 3, left: -61 }` | An object containing the top and left offset values in px for the "flipped" state | ##### Example - Changing menu position by 8 pixels vertically ```javascript // `#my-overflow-menu` is an element with `[data-overflow-menu]` attribute OverflowMenu.create(document.getElementById('my-overflow-menu'), { objMenuOffset(menuBody, direction) { const { objMenuOffset: offset } = OverflowMenu.options; const { top, left } = typeof offset !== 'function' ? offset : offset(menuBody, direction); return { top: top + 8, left, }; }, }); ``` #### Events | Event Name | Description | | --------------------------- | --------------------------------------------------- | | 'floating-menu-beingshown' | The custom event fired before the menu gets open. | | 'floating-menu-shown' | The custom event fired after the menu gets open. | | 'floating-menu-beinghidden' | The custom event fired before the menu gets closed. | | 'floating-menu-hidden' | The custom event fired after the menu gets closed. | ##### Example - Preventing menu from being closed in a certain condition ```javascript document.addEventListener('floating-menu-beinghidden', function(evt) { if (myApplication.shouldMenuKeptOpen(evt.target)) { evt.preventDefault(); } }); ``` ##### Example - Notifying events of all overflow menus being closed to an analytics library ```javascript document.addEventListener('floating-menu-hidden', function(evt) { myAnalyticsLibrary.send({ action: 'Overflow menu closed', id: evt.target.id, }); }); ``` ### HTML By default, the menu body (`ul.bx--overflow-menu-options`) goes right under `<body>`. You can change the behavior by adding `data-floating-menu-container` to one of the DOM ancestors of the root element (`div[data-overflow-menu]`). For example, if you have HTML structure like below, the menu body will go under the second `<div>`: ```html <body> <div> <div data-floating-menu-container> <div> <div data-overflow-menu class="bx--overflow-menu" ...> ... <ul class="bx--overflow-menu-options" ...> ... </ul> </div> </div> </div> </div> </body> ```