JSFiddle - React, Tailwind, and code Playground
HTML
<div id="callbackmenu">
<ul>
<li id="MenuItem1"><a href="#Item1">メニュー1</a></li>
<li class="disabled" id="MenuItem2"><a href="#Item2">メニュー2</a></li>
<li id="MenuItem3"><a href="#Item3">メニュー3</a>
<ul>
<li id="MenuItem3.1"><a href="#Item3.1">メニュー3.1</a></li>
<li id="MenuItem3.2"><a href="#Item3.2">メニュー3.2</a></li>
<li id="MenuItem3.3"><a href="#Item3.3">メニュー3.3</a>
<ul>
<li id="MenuItem3.3.1"><a href="#Item3.3.1">メニュー3.3.1</a></li>
<li id="MenuItem3.3.2"><a href="#Item3.3.2">メニュー3.3.2</a></li>
<li id="MenuItem3.3.3"><a href="#Item3.3.3">メニュー3.3.3</a></li>
<li id="MenuItem3.3.4"><a href="#Item3.3.4">メニュー3.3.4</a></li>
</ul>
</li>
<li id="MenuItem3.4"><a href="#Item3.4">メニュー3.4</a></li>
</ul>
</li>
<li id="MenuItem4" class="separator"><a href="#Item4">メニュー4</a></li>
</ul>
</div>
<div class="callback1">ここで右クリック</div>
CSS
/*!
* jQuery Menu
*
* Written by sizeof(cat) <sizeofcat AT riseup DOT net>
* Licensed under the MIT license
* Version 2.0.0
*/
.catMenu {
position: absolute;
z-index: 99999;
border: solid 1px #979797;
background: #f1f1f1;
padding: 2px 0;
margin: 0;
top: 0;
left: 0;
display: none;
font-family: Arial, Helvetica, sans-serif;
-o-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
-ms-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
}
.catMenu ul {
list-style: none!important;
padding: 0!important;
margin: 0!important;
}
.catMenu li {
margin: 1px 2px;
padding: 1px;
color: #333;
box-sizing: content-box;
-moz-box-sizing: content-box;
list-style-type: none!important;
}
.catMenu a {
text-decoration: none;
color: inherit;
display: block;
line-height: 20px;
height: 20px;
outline: none;
padding: 3px 5px 5px 5px;
margin-left: 28px;
border-left: 1px solid #e3e3e3;
margin-top: -1px;
margin-bottom: -3px;
box-sizing: content-box;
-moz-box-sizing: content-box;
font-size: 14px;
}
.catMenu img {
float: left;
margin-top: 2px;
margin-left: 6px;
}
.catMenu li.separator a {
border-top: 1px solid #e3e3e3;
margin-top: -4px;
padding-top: 5px;
}
.catMenu li.separator,
.catMenu li.separator.hover {
margin-top: 5px;
}
.catMenu li.hover {
background-color: #e2ecf5;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
-ms-border-radius: 2px;
-o-border-radius: 2px;
border-radius: 2px;
border: 1px solid #acd8e5;
padding: 0;
margin: 1px 2px;
background: -moz-linear-gradient(100% 100% 90deg, #e8f2fe, #daebf3);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#daebf3), to(#e8f2fe));
background:...
JavaScript
/*!
* jQuery Menu
*
* Written by sizeof(cat) <sizeofcat AT riseup DOT net>
* Licensed under the MIT license
* Version 2.0.0
*/
(function($) {
var classes = {
popup_div: 'catMenu',
separator: 'separator',
hover: 'hover',
disabled: 'disabled'
},
defaults = {
menu: null,
mouse_button: 'right',
is_menu: true,
min_width: 120,
max_width: 0,
delay: 500,
keyboard: true,
hover_intent: true,
on_select: function(item) {},
on_load: function() {},
on_show: function() {},
on_hide: function() {}
},
menus = [],
methods = {
init: function(options) {
options = $.extend({}, defaults, options);
if (!options.menu) {
return false;
}
var $menu;
if ((typeof(options.menu) === 'object') && (options.menu.constructor.toString().match(/array/i) !== null || options.menu.length)) {
$menu = $('<div/>').append(build(options.menu));
$('body').append($menu);
$menu.data('catMenuDynamic', true);
} else {
$menu = $(document.getElementById(options.menu));
$menu.data('catMenuDynamic', false);
$menu.data('catMenuOriginal', $menu.clone());
}
return this.each(function() {
var $this = $(this);
var event_namespace;
if (!$this.data('catMenu')) {
event_namespace = "catMenuContext-" + (new Date().getTime());
$this.data('catMenuEventNamespace', event_namespace).data('catMenuOptions', options).data('catMenu', $menu).data('catMenuEnable', true);
$menu.data('is_menu', options.is_menu);
if (!$menu.data('catMenuOwners')) {
...