Animated Searchable List View with jQuery and CSS3
| File Size: | 4.57 KB |
|---|---|
| Views Total: | 2462 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
Makes use of jQuery and CSS3 to create an animated filterable list that allows you to dynamically narrow a list of DOM elements with live text search.
How to use it:
1. Create a list of DOM elements as follow.
<ul id="list"> <li>List Item 1</li> <li>List Item 2</li> <li>List Item 3</li> ... <li>List Item n</li> <span class="empty-item">no results</span> </ul>
2. Create a search box to filter the list live.
<input type="text" id="search-text" class="search-box">
3. Create a inline element to output the item count.
<span class="list-count"></span>
4. The core CSS/CSS3 rules for the filterable list.
* {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
body { font-family: 'Roboto Condensed', sans-serif; }
.list-wrap label {
float: left;
color: #9bc3e9;
font-family: 'Roboto Condensed', sans-serif;
font-size: 1.2em;
}
.search-box {
float: left;
clear: left;
width: 70%;
padding: 0.4em;
font-size: 1em;
color: #555;
font-family: 'Roboto Condensed', sans-serif;
}
.list-count {
float: left;
text-align: center;
width: 30%;
padding: 0.5em;
color: #ddd;
}
li {
transition-property: margin, background-color, border-color;
transition-duration: .4s, .2s, .2s;
transition-timing-function: ease-in-out, ease, ease;
}
.empty-item {
transition-property: opacity;
transition-duration: 0s;
transition-delay: 0s;
transition-timing-function: ease;
}
.empty .empty-item {
transition-property: opacity;
transition-duration: .2s;
transition-delay: .3s;
transition-timing-function: ease;
}
.hiding {
margin-left: -100%;
opacity: 0.5;
}
.hidden { display: none; }
ul {
float: left;
width: 100%;
margin: 2em 0;
padding: 0;
position: relative;
}
li {
float: left;
clear: left;
width: 100%;
margin: 0.2em 0;
padding: 0.5em 0.8em;
list-style: none;
background-color: #f2f2f2;
border-left: 5px solid #003842;
cursor: pointer;
color: #333;
position: relative;
z-index: 2;
font-family: 'Roboto Condensed', sans-serif;
}
li:hover {
background-color: #f9f9f9;
border-color: #9bc3e9;
}
.empty-item {
background: #fff;
color: #ddd;
margin: 0.2em 0;
padding: 0.5em 0.8em;
font-style: italic;
border: none;
text-align: center;
visibility: hidden;
opacity: 0;
float: left;
clear: left;
width: 100%;
}
.empty .empty-item {
opacity: 1;
visibility: visible;
}
5. Load the latest version of jQuery JavaScript library at the end of the document.
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
6. Enable the live search on the list.
$(document).ready(function() {
var jobCount = $('#list .in').length;
$('.list-count').text(jobCount + ' items');
$("#search-text").keyup(function () {
var searchTerm = $("#search-text").val();
var listItem = $('#list').children('li');
var searchSplit = searchTerm.replace(/ /g, "'):containsi('")
$.extend($.expr[':'], {
'containsi': function(elem, i, match, array) {
return (elem.textContent || elem.innerText || '').toLowerCase()
.indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
$("#list li").not(":containsi('" + searchSplit + "')").each(function(e) {
$(this).addClass('hiding out').removeClass('in');
setTimeout(function() {
$('.out').addClass('hidden');
}, 300);
});
$("#list li:containsi('" + searchSplit + "')").each(function(e) {
$(this).removeClass('hidden out').addClass('in');
setTimeout(function() {
$('.in').removeClass('hiding');
}, 1);
});
var jobCount = $('#list .in').length;
$('.list-count').text(jobCount + ' items');
if(jobCount == '0') {
$('#list').addClass('empty');
}
else {
$('#list').removeClass('empty');
}
});
function searchList() {
var listArray = [];
$("#list li").each(function() {
var listText = $(this).text().trim();
listArray.push(listText);
});
$('#search-text').autocomplete({
source: listArray
});
}
searchList();
});
This awesome jQuery plugin is developed by k8k. For more Advanced Usages, please check the demo page or visit the official website.











