117 lines
2.6 KiB
HTML
117 lines
2.6 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<script src="http://code.jquery.com/jquery.min.js"></script>
|
|
<style>
|
|
.menu {
|
|
padding: 5px;
|
|
width: 250px;
|
|
border: 1px solid black;
|
|
}
|
|
.menu ul {
|
|
margin: 0;
|
|
padding-left: 20px;
|
|
margin-left: 10px;
|
|
height: 0;
|
|
|
|
list-style-position: outside;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.menu .menu-title {
|
|
padding-left: 16px;
|
|
background: url(https://js.cx/clipart/arrow-right.png) left center no-repeat;
|
|
font-size: 18px;
|
|
cursor: pointer;
|
|
|
|
}
|
|
|
|
.menu-open .menu-title {
|
|
background: url(https://js.cx/clipart/arrow-down.png) left center no-repeat;
|
|
}
|
|
|
|
.menu-open ul {
|
|
display: block;
|
|
}
|
|
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<div id="selected"></div>
|
|
|
|
<div id="sweeties" class="menu">
|
|
<span class="menu-title">Сладости (наведи курсор)!</span>
|
|
<ul>
|
|
<li><a href="#cake">Торт</a></li>
|
|
<li><a href="#donut">Пончик</a></li>
|
|
<li><a href="#cake-small">Пирожное</a></li>
|
|
<li><a href="#chokolate">Шоколадка</a></li>
|
|
<li><a href="#icecream">Мороженое</a></li>
|
|
<li><a href="#souflet">Суфле</a></li>
|
|
<li><a href="#rahatlukum">Рахат-Лукум</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
<script>
|
|
|
|
var menu = new SlidingMenu({
|
|
elem: $('#sweeties'),
|
|
duration: 1000
|
|
});
|
|
|
|
$(menu).on("select", function(e) {
|
|
$("#selected").html(e.value);
|
|
});
|
|
|
|
|
|
function SlidingMenu(options) {
|
|
var self = this;
|
|
|
|
var elem = options.elem;
|
|
var duration = options.duration || 100;
|
|
|
|
var titleElem = elem.find('.menu-title');
|
|
var listElem = elem.find('ul');
|
|
|
|
elem.hover(slideListShow, slideListHide);
|
|
|
|
elem.on('click', 'a', onItemClick);
|
|
|
|
function onItemClick(e) {
|
|
$(self).triggerHandler({
|
|
type: "select",
|
|
value: e.target.getAttribute('href').slice(1)
|
|
});
|
|
return false;
|
|
}
|
|
|
|
function slideListShow() {
|
|
// анимируем высоту от нуля до scrollHeight
|
|
// чтобы scrollHeight был верный - ставим overflow: hidden
|
|
// скрываем при помощи height: 0 вместо display: none, чтобы анимация могла определить высоту
|
|
listElem.stop().animate({
|
|
height: listElem.prop('scrollHeight')
|
|
}, {
|
|
// время на часть высоты, которую еще надо показать
|
|
duration: duration * (listElem.prop('scrollHeight') - listElem.height()) / listElem.prop('scrollHeight')
|
|
});
|
|
|
|
}
|
|
|
|
function slideListHide() {
|
|
listElem.stop().animate({
|
|
height: 0
|
|
}, {
|
|
duration: duration * (listElem.height() / listElem.prop('scrollHeight'))
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|