Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# https://help.github.com/articles/dealing-with-line-endings/
* text eol=lf
119 changes: 76 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,61 +4,94 @@

## Controls

1. Go to [https://axln.github.io/radial-menu-js/index.html](https://axln.github.io/radial-menu-js/index.html).

1. Go to [radial-menu-js/index.html](https://axln.github.io/radial-menu-js/index.html).
2. Click Open Menu button.

3. You can use mouse, mouse wheel and keyboard for navigation:
* Arrow keys and mouse wheel to select menu item.
* Enter to choose the selected menu item.
* Esc/Backspace to return to parent menu and close menu.

## Usage Example
## Usage Example

```javascript
var svgMenu = new RadialMenu({
parent : document.body,
size : 400,
closeOnClick: true,
menuItems : [
{
id: 'item1',
title: 'Item 1'
},
{
id: 'item2',
title: 'Item 2'
},
{
id: 'more',
title: 'More...',
items: [
{
id: 'subitem1',
title: 'Subitem 1'
},
{
id: 'item2',
title: 'Subitem 2'
}
]
}
],
onClick: function (item) {
console.log('You have clicked:', item);
}
var svgMenu = new RadialMenu([ // menuItems
{id: 'item1', title: 'Item 1'},
{id: 'item2', title: 'Item 2'},
{id: 'more', title: 'More...', items: [
{id: 'subitem1', title: 'Subitem 1'},
{id: 'item2', title: 'Subitem 2'}
]}],
400, // size
{ // params
onClick: function (item) {
console.log('You have clicked:', item);
}
});

var openMenu = document.getElementById('menu');
openMenu.onclick = function () {
var openMenu = document.getElementById('menu');
openMenu.onclick = function () {
svgMenu.open();
};
};

var closeMenu = document.getElementById('close');
closeMenu.onclick = function () {
var closeMenu = document.getElementById('close');
closeMenu.onclick = function () {
svgMenu.close();
};
};
```

## Configuration

```json5
{
closeOnClick: true, // boolean; will menu.close(), after item is selected. [default: true && menu.onClickFallback();]
closeOnClickOutside: true, // true or function(); it will menu.close(), when item is not selected and click is outside of menu. [default: true]

ui: { // ui customization
fontSize: "38%", // text font-size of elements inside {menuContainer}, eg: text in {itemSector} [38%]
classes: {
menuContainer: "menuHolder", // whole radial-menu container, created dynamically! see: {params.parent}
menuCreate: "menu",
menuCreateParent: "inner", // main menu [{menuCreate} inner]
menuCreateNested: "outer", // nested menu [{menuCreate} outer]
menuOpen: "open", // menu is visible [open]
menuClose: "close", // menu is not-visible [close]
itemSectorActive: "sector", // item, which is active and can be selected [sector]
itemSectorNested: "more", // item, which has nested items... [more]
itemSectorDisabled: "dummy", // item, which is not-active/disabled [dummy]
itemSelected: "selected", // item, which is selected [selected]
closeBackButton: "center", // centered {close} or {back} button [centered]
iconsContainer: "icons", // item's icon container [icons]
},
item: { // pre-defined items: {close} and {back} in similar way like: {menuItems}
close: {title: "Close", icon: "#close"},
back: {title: "Back", icon: "#return"},
// FYI:
// 1) if u want to change, eg: 'close' icon, just use item.close.icon = '#myIconId'
// 2) if u want to override default 'icon' generation, see: RadialMenu.defaultValues.ui.item.{close, back}.symbol
// 3) to change item's colors, etc use: CSS:
// svg.{menuCreate} > g.{itemSectorActive} > text,
// svg.{menuCreate} > g.{itemSectorActive} > use {...}
},
nested: { // nested ~ inner-menu behavior
icon: "#return", // string(iconId:'#return') or true(for parentItem.icon)
title: true // show nested title?
},
moveByWheel: true, // navigation by mouse-wheel. [default: true]
moveByKeys: { // navigation by keys. [default: true]
enabled: true,
back: ["escape", "backspace"],
select: ["enter"],
forward: ["arrowRight", "arrowUp"],
backward: ["arrowLeft", "arrowDown"]
}
}
}
```

## License
MIT

[MIT](LICENSE)

## Contributors

* [Alexey Nesterenko](https://github.com/axln)
* [Jan Smid](https://github.com/j3nda)
2 changes: 0 additions & 2 deletions css/RadialMenu.css
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ div.menuHolder {
position: relative;
margin: 10px;
}

svg.icons {
display: none;
}
Expand Down Expand Up @@ -47,7 +46,6 @@ svg.menu > g.sector > use {

svg.menu > g.sector:hover > path {
fill: #F9A602D0;

}

svg.menu > g.sector.selected > path {
Expand Down
115 changes: 115 additions & 0 deletions css/RadialMenuCustom.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
@import url("https://fonts.googleapis.com/css?family=Bitter&subset=latin");
div.menuHolder2
{ /* menu-container */
user-select: none;
-moz-user-select: none;
margin: 10px;

position: fixed;
top: 0px;
left: 0px;
z-index: -1;

font-family: Bitter;
}

div.menuHolder2.open2
{ /* menu-container:open => its visible */
z-index: 11;
}

div.menuHolder2.close2
{ /* menu-container:close => its not visible */
z-index: -1;
visibility: hidden;
}

svg.icons
{
display: none;
}

svg.menu2
{
position: absolute;
overflow: visible;
transition: 0.2s;
transition-timing-function: ease-out;
}

svg.menu2.open2
{ /* menu-items:open => background, transition, gfx... */
/* -- https://www.svgbackgrounds.com/*/
background-color: #ffaa00;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1600 800'%3E%3Cg %3E%3Cpath fill='%23ffb100' d='M486 705.8c-109.3-21.8-223.4-32.2-335.3-19.4C99.5 692.1 49 703 0 719.8V800h843.8c-115.9-33.2-230.8-68.1-347.6-92.2C492.8 707.1 489.4 706.5 486 705.8z'/%3E%3Cpath fill='%23ffb800' d='M1600 0H0v719.8c49-16.8 99.5-27.8 150.7-33.5c111.9-12.7 226-2.4 335.3 19.4c3.4 0.7 6.8 1.4 10.2 2c116.8 24 231.7 59 347.6 92.2H1600V0z'/%3E%3Cpath fill='%23ffbe00' d='M478.4 581c3.2 0.8 6.4 1.7 9.5 2.5c196.2 52.5 388.7 133.5 593.5 176.6c174.2 36.6 349.5 29.2 518.6-10.2V0H0v574.9c52.3-17.6 106.5-27.7 161.1-30.9C268.4 537.4 375.7 554.2 478.4 581z'/%3E%3Cpath fill='%23ffc500' d='M0 0v429.4c55.6-18.4 113.5-27.3 171.4-27.7c102.8-0.8 203.2 22.7 299.3 54.5c3 1 5.9 2 8.9 3c183.6 62 365.7 146.1 562.4 192.1c186.7 43.7 376.3 34.4 557.9-12.6V0H0z'/%3E%3Cpath fill='%23ffcc00' d='M181.8 259.4c98.2 6 191.9 35.2 281.3 72.1c2.8 1.1 5.5 2.3 8.3 3.4c171 71.6 342.7 158.5 531.3 207.7c198.8 51.8 403.4 40.8 597.3-14.8V0H0v283.2C59 263.6 120.6 255.7 181.8 259.4z'/%3E%3Cpath fill='%23ffd914' d='M1600 0H0v136.3c62.3-20.9 127.7-27.5 192.2-19.2c93.6 12.1 180.5 47.7 263.3 89.6c2.6 1.3 5.1 2.6 7.7 3.9c158.4 81.1 319.7 170.9 500.3 223.2c210.5 61 430.8 49 636.6-16.6V0z'/%3E%3Cpath fill='%23ffe529' d='M454.9 86.3C600.7 177 751.6 269.3 924.1 325c208.6 67.4 431.3 60.8 637.9-5.3c12.8-4.1 25.4-8.4 38.1-12.9V0H288.1c56 21.3 108.7 50.6 159.7 82C450.2 83.4 452.5 84.9 454.9 86.3z'/%3E%3Cpath fill='%23ffef3d' d='M1600 0H498c118.1 85.8 243.5 164.5 386.8 216.2c191.8 69.2 400 74.7 595 21.1c40.8-11.2 81.1-25.2 120.3-41.7V0z'/%3E%3Cpath fill='%23fff852' d='M1397.5 154.8c47.2-10.6 93.6-25.3 138.6-43.8c21.7-8.9 43-18.8 63.9-29.5V0H643.4c62.9 41.7 129.7 78.2 202.1 107.4C1020.4 178.1 1214.2 196.1 1397.5 154.8z'/%3E%3Cpath fill='%23ffff66' d='M1315.3 72.4c75.3-12.6 148.9-37.1 216.8-72.4h-723C966.8 71 1144.7 101 1315.3 72.4z'/%3E%3C/g%3E%3C/svg%3E");
background-attachment: fixed;
background-size: cover;

box-shadow: 10px 10px 5px 0px rgba(0, 0, 0, 0.75);
-webkit-box-shadow: 10px 10px 5px 0px rgba(0, 0, 0, 0.75);
-moz-box-shadow: 10px 10px 5px 0px rgba(0, 0, 0, 0.75);
border-radius: 50%;
}

svg.menu2.inner2
{
transform: scale(0.66) rotate(-10deg);
opacity: 0;
visibility: hidden;
}

svg.menu2.outer2
{
transform: scale(1.5) rotate(10deg);
opacity: 0;
visibility: hidden;
}

svg.menu2 > g > path
{
fill: #00000080;
}

svg.menu2 > g.sector > path
{
cursor: pointer;
/*transition: 0.1s;*/
}

svg.menu2 > g.sector > text,
svg.menu2 > g.sector > use
{
cursor: pointer;
fill: white;
text-shadow: 1px 1px 0 #000000A0;
}

svg.menu2 > g.sector:hover > path
{
fill: #9B13CDD0;
}

svg.menu2 > g.sector.selected > path
{
/*fill: #F9A602D0;*/
/*fill: #009900D0 !important;*/
fill: #32CD32D0 !important;
}

svg.menu2 > g.center:hover > circle
{
fill: #E70777D0;
}

svg.menu2 > g.center > circle
{
cursor: pointer;
fill: #00000080;
}

svg.menu2 > g.center > text,
svg.menu2 > g.center > use
{
cursor: pointer;
fill: white;
}
6 changes: 5 additions & 1 deletion css/main.css
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
body {
font-family: Arial, sans-serif;
font-size: 13px;
background: url("../img/background.jpg") no-repeat;
background: url("../img/background.jpg") no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}

h1 {
Expand Down
Loading