Skip to content

Instantly share code, notes, and snippets.

@Scretch-1
Last active February 24, 2016 12:57
Show Gist options
  • Save Scretch-1/463436322a4a3d08dbb9 to your computer and use it in GitHub Desktop.
Save Scretch-1/463436322a4a3d08dbb9 to your computer and use it in GitHub Desktop.
jQ Выпадающий список (ul) с возможностью выбора пункта. (custom)
//Документация http://codepen.io/markhillard/pen/Pwaqdb
//--HTML--//
<div class="wrap-drop" id="noble-gases">
<span>All Noble Gases</span>
<ul class="drop">
<li class="selected"><a>All Noble Gases</a></li>
<li><a>Helium</a></li>
<li><a>Neon</a></li>
</ul>
</div>
//--end HTML--//
//--CSS--//
//drop-select-ul
.wrap-drop {
background:#fff;
box-shadow:3px 3px 3px rgba(0,0,0,.2);
cursor:pointer;
margin:0 auto;
max-width:225px;
padding:1rem;
position:relative;
width:75%;
z-index:3;
}
.wrap-drop::after {
border-color:#695d52 transparent;
border-style:solid;
border-width:10px 10px 0;
content:"";
height:0;
margin-top:-4px;
position:absolute;
right:1rem;
top:50%;
width:0;
}
.wrap-drop .drop {
background:#fff;
box-shadow:3px 3px 3px rgba(0,0,0,.2);
display:none;
left:0;
list-style:none;
margin-top:0;
opacity:0;
padding-left:0;
pointer-events:none;
position:absolute;
right:0;
top:100%;
z-index:2;
}
.wrap-drop .drop li a {
color:#695d52;
display:block;
padding:1rem;
text-decoration:none;
}
.wrap-drop span {
color:#928579;
}
.wrap-drop .drop li:hover a {
background-color:#fffaec;
color:#000;
}
.wrap-drop.active::after {
border-width:0 10px 10px;
}
.wrap-drop.active .drop {
display:block;
opacity:1;
pointer-events:auto;
}
//--end CSS--//
//--JS--//
//drop-select-ul
function DropDown(el) {
this.dd = el;
this.placeholder = this.dd.children('span');
this.opts = this.dd.find('ul.drop li');
this.val = '';
this.index = -1;
this.initEvents();
}
DropDown.prototype = {
initEvents: function () {
var obj = this;
obj.dd.on('click', function (e) {
e.preventDefault();
e.stopPropagation();
$(this).toggleClass('active');
});
obj.opts.on('click', function () {
var opt = $(this);
obj.val = opt.text();
obj.index = opt.index();
obj.placeholder.text(obj.val);
opt.siblings().removeClass('selected');
opt.filter(':contains("' + obj.val + '")').addClass('selected');
}).change();
},
getValue: function () {
return this.val;
},
getIndex: function () {
return this.index;
}
};
$(function () {
// create new variable for each menu
var dd1 = new DropDown($('#noble-gases'));
// var dd2 = new DropDown($('#other-gases'));
$(document).click(function () {
// close menu on document click
$('.wrap-drop').removeClass('active');
});
});
//--end JS--//
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment