【问题标题】:Multiple filters on jquery isotopejquery同位素上的多个过滤器
【发布时间】:2018-06-03 20:18:19
【问题描述】:

我正在尝试能够选择多个过滤器并让结果显示为这样。然后,当他们单击全部显示时,它会删除所有过滤器。我正在使用 jquery isotope 插件。

请看这里:https://convention.test.yja.org/sessions

我希望有人能够选择一个年龄组和一个类别(也可能是多个年龄组和多个类别)

这里是过滤代码:

 <ul class="filter list-inline">
    <li><a class="active" href="#" data-filter="*">Show All</a></li>
    <li><a href="#" data-filter=".Education"><i class="fa fa-book" style="color:#bbbbbb"></i> Jain Education</a></li>
    <li><a href="#" data-filter=".Lifestyle"><i class="fa fa-hand-holding-heart" style="color:#bbbbbb"></i> Lifestyle</a></li>
    <li><a href="#" data-filter=".Career"><i class="fa fa-briefcase" style="color:#bbbbbb"></i> Career & Networking</a></li>
    <li><a href="#" data-filter=".DiversityInclusion"><i class="fa fa-globe" style="color:#bbbbbb"></i> Diversity & Inclusion</a></li>
    <li><a href="#" data-filter=".SocialIssues"><i class="fa fa-handshake" style="color:#bbbbbb"></i> Current Events & Social Issues</a></li>
</ul>
<ul class="filter list-inline">
    <li><a class="active" href="#" data-filter="*">Show All</a></li>
    <li><a href="#" data-filter=".HS">High School</a></li>
    <li><a href="#" data-filter=".College">College</a></li>
    <li><a href="#" data-filter=".JNF">JNF</a></li>
</ul> 

这里是同位素js代码:

/*-------------------------------------------------*/
/* =  portfolio isotope
/*-------------------------------------------------*/

var winDow = $(window);
// Needed variables
var $container = $('.iso-call');
var $filter = $('.filter');

try {
    $container.imagesLoaded(function () {
        $container.trigger('resize');
        $container.isotope({
            filter: '*',
            layoutMode: 'masonry',
            animationOptions: {
                duration: 750,
                easing: 'linear'
            }
        });

        $('.triggerAnimation').waypoint(function () {
            var animation = $(this).attr('data-animate');
            $(this).css('opacity', '');
            $(this).addClass("animated " + animation);

        },
                {
                    offset: '75%',
                    triggerOnce: true
                }
        );
        setTimeout(1500);
    });
} catch (err) {
}

winDow.bind('resize', function () {
    var selector = $filter.find('a.active').attr('data-filter');

    try {
        $container.isotope({
            filter: selector,
            animationOptions: {
                duration: 750,
                easing: 'linear',
                queue: false
            }
        });
    } catch (err) {
    }
    return false;
});

// Isotope Filter 
$filter.find('a').click(function () {
    var selector = $(this).attr('data-filter');

    try {
        $container.isotope({
            filter: selector,
            animationOptions: {
                duration: 750,
                easing: 'linear',
                queue: false
            }
        });
    } catch (err) {

    }
    return false;
});


var filterItemA = $('.filter li a');

filterItemA.on('click', function () {
    var $this = $(this);
    if (!$this.hasClass('active')) {
        filterItemA.removeClass('active');
        $this.addClass('active');
    }
});

【问题讨论】:

    标签: javascript php jquery html jquery-isotope


    【解决方案1】:

    我注意到,您在同一个对象上有两个点击事件。 $filter.find('a').click(filterItemA.on('click',

    第一个完成了艰苦的工作,第二个只是确保任何时候都只有一个按钮被点击。

    你应该把第二个改成

    • 仅当您单击Show All 按钮之一时才删除活动标志,
    • 在点击其他任何内容时停用Show All-s

    拳头一到

    • 根据filterItemA.filter(".active")组成选择器

    filterItemA.off('click')
    filterItemA.map( (x,i) => {
        if( $(i).attr('data-filter')=="*") {
        	$(i).addClass("showall")
        } else {
        	$(i).addClass("noshowall")
        }
    })
    
    filterItemA.on('click', function () {
        var $this = $(this);
        var selector = $this.attr('data-filter');
        var filterActive;
        var activeSelector;
        if (!$this.hasClass('active')) {
    	if (selector=="*") {
    	    filterItemA.filter(".noshowall").removeClass('active')
    	    filterItemA.filter(".showall").addClass('active')
    	} else {
    	    filterItemA.filter(".showall").removeClass('active')
    	    $this.addClass('active')
    	}
        } else {
    	if (selector=="*") {
    		// select show all... what to do here?
    	} else {
    	    $this.removeClass('active')
    	    filterActive=filterItemA.filter(".noshowall.active")
    	    activeSelector = Array.join(filterActive.map( (x,i) => $(i).attr("data-filter")),'')
    	    if (activeSelector== "") { 
    		filterItemA.filter(".showall").addClass("active")
    	    }
    
    	}
        }
        filterActive=filterItemA.filter(".noshowall.active")
        activeSelector = Array.join(filterActive.map( (x,i) => $(i).attr("data-filter")),'')
        if (activeSelector== "") { activeSelector="*"; }
        try {
    	$container.isotope({
    	    filter: activeSelector,
    	    animationOptions: {
    		duration: 750,
    		easing: 'linear',
    		queue: false
    	    }
    	});
        } catch (err) {
        }
        return false;
    });

    【讨论】:

    • 太棒了!会试试这个。另外,我不确定你是否注意到 - 但我在页面顶部和底部有相同的过滤器 - 有没有办法同步它们?
    • 嗯,当我按照你说的做时,当我点击过滤器时,一切都会消失。你能发布代码吗? @n3ko
    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多