JSFiddle - React, Tailwind, and code Playground
HTML
<link rel="stylesheet" type="text/css" href="http://radio-constr71.ucoz.net/css/menus.css"/>
<script type="text/javascript" src="http://radio-constr71.ucoz.net/js/menus.js"></script>
<script type="text/javascript">
// <![CDATA[
var myMenu;
window.onload = function() {
myMenu = new SDMenu("my_menu");
myMenu.init();
};
// ]]>
</script>
<div id="my_menu" class="sdmenu">
<a href="http://radio-constr71.ucoz.net/" style="display: none;"></a>
<div class="collapsed">
<span>Приборы</span>
<a href="/shop/pribory">Группа товаров приборы</a>
<a href="/shop/pribory/programmatory">Программаторы</a>
</div>
<div class="collapsed">
<span>Конструкторы</span>
<a href="/shop/konstruktory">Группа товаров конструкторы</a>
<a href="/shop/konstruktory/arduino">Arduino</a>
<a href="/shop/konstruktory/plata">Плата</a>
<a href="/shop/konstruktory/pechatnaja-plata-detali">Печатная плата+детали</a>
<a href="/shop/konstruktory/pechatnaja-plata-v-sbor">Печатная плата в сборе</a>
</div>
<div class="collapsed">
<span>Led-Scale</span>
<a href="/shop/konstruktory/led-scale">Группа товаров Led-Scale</a>
<a href="/shop/konstruktory/led-scale/mitsubishi">Mitsubishi</a>
<a href="/shop/konstruktory/led-scale/honda">Honda</a>
<a href="/shop/konstruktory/led-scale/huandai">Huandai</a>
<a href="/shop/konstruktory/led-scale/ford">Ford</a>
<a href="/shop/konstruktory/led-scale/tayota">Tayota</a>
<a href="/shop/konstruktory/led-scale/lada">Лада</a>
<a href="/shop/konstruktory/led-scale/gaz">Газ</a>
<a href="/shop/konstruktory/led-scale/dop-ustrojstva">Доп. устройства</a>
</div>
<div class="collapsed">
<span>Источники тока</span>
<a href="/shop/istochnika-toka">Группа товаров источники тока</a>
<a href="/shop/istochnika-toka/bloki-pitanija">Блоки питания</a>
</div> </div>
CSS
div.sdmenu {
width: 270px;
font-family: Helvetica, sans-serif;
font-size: 12px;
padding-bottom: 5px;
background: #D7291D no-repeat right bottom;
color: #ffffff;
}
div.sdmenu div {
background: url(http://radio-constr71.ucoz.net/image/title.gif) repeat-x;
overflow: hidden;
}
div.sdmenu div:first-child {
background: url(http://radio-constr71.ucoz.net/image/title.gif) repeat-x;
}
div.sdmenu div.collapsed {
height: 25px;
}
div.sdmenu div span {
display: block;
padding: 5px 25px;
font-weight: bold;
color: #ffffff;
background: url(http://radio-constr71.ucoz.net/image/expanded.gif) no-repeat 10px center;
cursor: default;
border-bottom: 1px solid #ddd;
}
div.sdmenu div.collapsed span {
background-image: url(http://radio-constr71.ucoz.net/image/collapsed.gif);
}
div.sdmenu div a {
padding: 5px 10px;
background: #eee;
display: block;
border-bottom: 1px solid #fff;
color: #000;
}
div.sdmenu div a.current {
background : #D7291D;
}
div.sdmenu div a:hover {
background : #D7291D url(http://radio-constr71.ucoz.net/image/linkarrow.gif) no-repeat right center;
color: #fff;
text-decoration: none;
}
JavaScript
function SDMenu(id) {
if (!document.getElementById || !document.getElementsByTagName)
return false;
this.menu = document.getElementById(id);
this.submenus = this.menu.getElementsByTagName("div");
this.remember = true;
this.speed = 5;
this.markCurrent = true;
this.oneSmOnly = false;
}
SDMenu.prototype.init = function() {
var mainInstance = this;
for (var i = 0; i < this.submenus.length; i++)
this.submenus[i].getElementsByTagName("span")[0].onclick = function() {
mainInstance.toggleMenu(this.parentNode);
};
if (this.markCurrent) {
var links = this.menu.getElementsByTagName("a");
for (var i = 0; i < links.length; i++)
if (links[i].href == document.location.href) {
links[i].className = "current";
break;
}
}
if (this.remember) {
var regex = new RegExp("sdmenu_" + encodeURIComponent(this.menu.id) + "=([01]+)");
var match = regex.exec(document.cookie);
if (match) {
var states = match[1].split("");
for (var i = 0; i < states.length; i++)
this.submenus[i].className = (states[i] == 0 ? "collapsed" : "");
}
}
};
SDMenu.prototype.toggleMenu = function(submenu) {
if (submenu.className == "collapsed")
this.expandMenu(submenu);
else
this.collapseMenu(submenu);
};
SDMenu.prototype.expandMenu = function(submenu) {
var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
var links = submenu.getElementsByTagName("a");
for (var i = 0; i < links.length; i++)
fullHeight += links[i].offsetHeight;
var moveBy = Math.round(this.speed * links.length);
var mainInstance = this;
var intId = setInterval(function() {
var curHeight = submenu.offsetHeight;
var newHeight = curHeight + moveBy;
if (newHeight < fullHeight)
submenu.style.height = newHeight + "px";
else {
clearInterval(intId);
submenu.style.height = "";
submenu.className = "";
mainInstance.memorize();
}
}, 30);
this.collapseOthers(submenu);
};
SDMenu.prototype.collapseMenu = function(submenu) {
var minHeight =...