Добрый день!
Нашел интересный фильтр для сайта "
Isotope Combination Filters with Range Sliders" на основе библиотеки Isotope. В мне в нем не хватает флажков и выпадающего списка. Сам я дилетант в JavaScript.
Пробовал неоднократно самостоятельно добавить необходимые элементы, изучая примеры, но так ничего не получилось.
Помогите пожалуйста, добавить в фильтр флажки и выпадающий список.
Код:
$(document).ready( function() {
var buttonFilters = {};
var buttonFilter = '*';
var rangeFilters = {
'height': {'min':150, 'max': 185},
'weight': {'min':50, 'max': 90}
};
var $grid = $('.grid').isotope({
itemSelector: '.item',
layout: 'masonry',
filter: function() {
var $this = $(this);
var height = $this.attr('data-height');
var weight = $this.attr('data-weight');
var isInHeightRange = (rangeFilters['height'].min <= height && rangeFilters['height'].max >= height);
var isInWeightRange = (rangeFilters['weight'].min <= weight && rangeFilters['weight'].max >= weight);
return $this.is( buttonFilter ) && (isInHeightRange && isInWeightRange);
}
});
var $heightSlider = $('#filter-height').slider({ tooltip_split: true, min: 130, max: 220, range: true, value: [150, 180] });
var $weightSlider = $('#filter-weight').slider({ tooltip_split: true, min: 40, max: 150, range: true, value: [50, 90] });
function updateRangeSlider(slider, slideEvt) {
console.log('Current slider:' + slider);
var sldmin = +slideEvt.value[0],
sldmax = +slideEvt.value[1],
filterGroup = slider.attr('data-filter-group'),
currentSelection = sldmin + ' - ' + sldmax;
slider.siblings('.filter-label').find('.filter-selection').text(currentSelection);
console.log('Filtergroup: '+ filterGroup);
rangeFilters[filterGroup] = {
min: sldmin || 0,
max: sldmax || 100000
};
$grid.isotope();
}
$heightSlider.on('slideStop', function(slideEvt){
var $this =$(this);
updateRangeSlider($this, slideEvt);
});
$weightSlider.on('slideStop', function(slideEvt){
var $this =$(this);
updateRangeSlider($this, slideEvt);
});
$('.filters').on( 'click', '.btn', function() {
var $this = $(this);
var $buttonGroup = $this.parents('.btn-group');
var filterGroup = $buttonGroup.attr('data-filter-group');
buttonFilters[ filterGroup ] = $this.attr('data-filter');
buttonFilter = concatValues( buttonFilters ) || '*';
console.log( buttonFilter )
$grid.isotope();
});
$('.btn-group').each( function( i, buttonGroup ) {
var $buttonGroup = $( buttonGroup );
$buttonGroup.on( 'click', '.btn-filter', function() {
$buttonGroup.find('.is-checked').removeClass('is-checked');
$(this).addClass('is-checked');
});
});
});
function concatValues( obj ) {
var value = '';
for ( var prop in obj ) {
value += obj[ prop ];
}
return value;
}
Добавить новые блоки:
Код:
<div class="row">
<div class="col-sm-4">
<fieldset>
<h4>Shapes</h4>
<div class="checkbox">
<input type="checkbox" value=".square"/>
<label>Square</label>
</div>
<div class="checkbox">
<input type="checkbox" value=".circle"/>
<label>Circle</label>
</div>
<div class="checkbox">
<input type="checkbox" value=".triangle"/>
<label>Triangle</label>
</div>
</fieldset>
</div>
<div class="col-sm-4">
<fieldset>
<h4>Colour</h4>
<select>
<option value=".select">Select</option>
<option value=".green">Green</option>
<option value=".blue">Blue</option>
<option value=".white">White</option>
</select>
</fieldset>
</div>
</div>
Можно похожее на любом другом плагине или jquery.
Заранее всем спасибо!