Because defining fancy right-click menus should be easy
- Easy to use
- Framework independent
- Can be configured to open on
click
orcontextmenu
events - Menu items can contain
<input>
elements with first class support fortype="checkbox"
andtype="radio"
- Full keyboard navigation support
- Animatable
You can add the dropdown-list-element
package as a dependency of your npm project. Just be sure to import it
somewhere so that the custom elements will be registered.
If you run npm install && npm run build-standalone
after cloning this repository, you will have a self-contained
version of this library bundled with the one (1) external function depended upon that you can use in a normal
<script>
tag. (Woah, old school!)
Quickstart example:
<div>This div has a context menu</div>
<dropdown-menu linked-elements="div:has(+ #this)">
<dropdown-menu-item value="1">Option 1</dropdown-menu-item>
<dropdown-menu-item value="2">Option 2</dropdown-menu-item>
<dropdown-menu-item value="3">Option 3</dropdown-menu-item>
<dropdown-menu-item>
Nested options
<dropdown-menu-inner>
<dropdown-menu-item value="4">Option 4</dropdown-menu-item>
<dropdown-menu-item disabled value="5">Disabled option 5</dropdown-menu-item>
<dropdown-menu-item value="6">Option 6</dropdown-menu-item>
</dropdown-menu-inner>
</dropdown-menu-item>
</dropdown-menu>
divWithContextMenu.addEventListener("dropdownSelect", (ev) => {
const {
selectedElement, // The <active-dropdown-menu-item> selected.
selectedElementOriginal, // The `<dropdown-menu-item>` used to create the `selectedElement`.
selectedValue, // The value of the `value` attribute of the `selectedElementOriginal`, `undefined` if not set.
dropdownMenu, // The <dropdown-menu> used to make the menu selection.
triggeringElement // The linked element which triggered the opening of the menu.
} = ev.detail;
alert("Option " + selectedValue + " was selected!");
});
A more detailed example can be found in the tests/test.html
file. If you wish to try it out yourself, you must run
npm run build-standalone
after cloning this repository.
This project is full of tsdoc comments for your contextual viewing pleasure, even with the custom DOM events!
A good place to start would be taking a look at the documentation for the <dropdown-menu>
element via the
DropdownMenuElement
class
Because Apple "thinks different", dropdown menus containing
<form>
elements will not work properly on Safari at the time of writing. However, <dropdown-menu>
elements which
are optionally children of <form>
elements while also being grandparents of <input>
elements will still work as
intended. As a side-note, An earlier version of this library extended upon <ul>
and <li>
elements to define the
menus.