6

我一直在使用 jQuery 的同位素插件,我的主页遇到了一些问题,需要两个同位素实例。

它们都有不同类型的项目,并且它们都保存在自己的容器中,但是当我单击同位素的第二个实例上的过滤器时,它也会尝试过滤第一个实例,反之亦然

我要问的是,是否有可能在一个页面上有两个同位素实例而不会相互干扰,如果是这样,那么在没有问题的情况下完成这项工作的最佳方法是什么?

4

1 回答 1

4

要回答您的问题,是的,可以对两个同位素实例运行两个不同的过滤器。我创建了一个示例小提琴供您演示。

小提琴

编辑:做了一些代码样式和jslint的东西

这里有一些js:

$(function () {
    "use strict";

    //Define your containers and option sets
    var $container = [$('#container'), $('#container-new')], $optionSets = [$('#options .option-set'), $('#options-new .option-set')];

    //Initialize isotope on each container
    jQuery.each($container, function (j) {
        this.isotope({
            itemSelector : '.element'
        });
    });

    //Initialize filter links for each option set
    jQuery.each($optionSets, function (index, object) {

        var $optionLinks = object.find('a');

        $optionLinks.click(function () {
            var $this = $(this), $optionSet = $this.parents('.option-set'), options = {},
                key = $optionSet.attr('data-option-key'),
                value = $this.attr('data-option-value');
            // don't proceed if already selected
            if ($this.hasClass('selected')) {
                return false;
            }

            $optionSet.find('.selected').removeClass('selected');
            $this.addClass('selected');

            // make option object dynamically, i.e. { filter: '.my-filter-class' }

            // parse 'false' as false boolean
            value = value === 'false' ? false : value;
            options[key] = value;
            if (key === 'layoutMode' && typeof changeLayoutMode === 'function') {
              // changes in layout modes need extra logic
                changeLayoutMode($this, options);
            } else {
              // otherwise, apply new options

                $container[index].isotope(options);
            }

            return false;
        });
    });
});
于 2013-07-23T16:39:50.180 回答