- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用同位素来过滤出版物列表,但希望能够将标准的、记录的链接过滤器方法与选择元素结合起来,因为我的第二个过滤器列表相当长。
我正在努力解决的问题是处理两种不同类型的元素,并将选定的值组合到一个选项数组中。我可以使过滤器彼此独立工作(代码如下),但它们需要协同工作。如何将两个不同的操作(单击或更改)和两个属性(class= 或 value=)组合到一个选项数组中以传递给同位素过滤器?
var $container = $('#library');
// select ccskills publications by default
$container.isotope({ filter: '.ccskills' });
var $optionSets = $('#library-options .option-set'),
$optionLinks = $optionSets.find('a');
$optionLinks.click(function(){
var $this = $(this);
// don't proceed if already selected
if ( $this.hasClass('selected') ) {
return false;
}
var $optionSet = $this.parents('.option-set');
$optionSet.find('.selected').removeClass('selected');
$this.addClass('selected');
// make option object dynamically, i.e. { filter: '.my-filter-class' }
var options = {},
key = $optionSet.attr('data-option-key'),
value = $this.attr('data-option-value');
// parse 'false' as false boolean
value = value === 'false' ? false : value;
options[ key ] = value;
$container.isotope( options );
return false;
});
// using the 'chozen' plugin to style my select element
$(".chzn-select").chosen().change(
function() {
var industry = $("option:selected", this).val();
$container.isotope({filter: industry});
}
);
最佳答案
您需要一个多维数组,其中每个过滤器类型都有一个数组维度。我之前已经这样做过,并且有一个现场演示示例 here !
参见here !对于js。
编辑(2020 年 2 月):演示和 JavaScript 的链接已更新为 2020 年,包含回溯机器 URL
在我的 js 文件中,您会对名为 getComboFilters(filters) 的最终函数感兴趣
function getComboFilter( filters ) {
var i = 0;
var comboFilters = [];
var message = [];
for ( var prop in filters ) {
message.push( filters[ prop ].join(' ') );
var filterGroup = filters[ prop ];
// skip to next filter group if it doesn't have any values
if ( !filterGroup.length ) {
continue;
}
if ( i === 0 ) {
// copy to new array
comboFilters = filterGroup.slice(0);
}
else {
var filterSelectors = [];
// copy to fresh array
var groupCombo = comboFilters.slice(0); // [ A, B ]
// merge filter Groups
for (var k=0, len3 = filterGroup.length; k < len3; k++) {
for (var j=0, len2 = groupCombo.length; j < len2; j++) {
filterSelectors.push( groupCombo[j] + filterGroup[k] ); // [ 1, 2 ]
}
}
// apply filter selectors to combo filters for next group
comboFilters = filterSelectors;
}
i++;
}
comboFilters.sort();
var comboFilter = comboFilters.join(', ');
return comboFilter;
}
此函数处理各种过滤器数组集的所有推送、拼接和排序,但要使用它,您需要将其添加到您的过滤器例程中...好吧,我说例程,但它实际上是例程,因为您似乎调用过滤方法2次分开:
$container.isotope({ filter: '.ccskills' });
及以后:
$container.isotope({filter: .industry});
如果您要一起过滤类型,则所有过滤器类型都必须彼此了解,这意味着它们必须位于同一个 javascript 封装内,并且过滤器方法只需在以下位置调用一次:它将根据您的所有过滤器类型条件进行测试。
使用 getComboFilter(filters) 函数,您可以像这样调用组合过滤器方法:
var $container = $('#library');
var filters = {};
var comboFilter = getComboFilter( filters );
$container.isotope({ filter: comboFilter });
最后,完全集成到您的文件中将如下所示:
var $container = $('#library');
var filters = {};
var comboFilter = getComboFilter( filters );
$container.isotope({ filter: comboFilter });
// This next part targets all the possible filter items
// i.e. '.option-set a' just like your example
$('.option-set a').click(function(){
// exit directly if filter already disabled
if ($(this).hasClass('disabled') ){
return false;
}
var $this = $(this);
var $optionSet = $(this).parents('.option-set');
var group = $optionSet.attr('data-filter-group');
// store filter value in object
var filterGroup = filters[ group ];
if ( !filterGroup ) {
filterGroup = filters[ group ] = [];
}
var comboFilter = getComboFilter( filters );
$container.isotope({ filter: comboFilter });
});
function getComboFilter( filters ) {
var i = 0;
var comboFilters = [];
var message = [];
for ( var prop in filters ) {
message.push( filters[ prop ].join(' ') );
var filterGroup = filters[ prop ];
// skip to next filter group if it doesn't have any values
if ( !filterGroup.length ) {
continue;
}
if ( i === 0 ) {
// copy to new array
comboFilters = filterGroup.slice(0);
}
else {
var filterSelectors = [];
// copy to fresh array
var groupCombo = comboFilters.slice(0); // [ A, B ]
// merge filter Groups
for (var k=0, len3 = filterGroup.length; k < len3; k++) {
for (var j=0, len2 = groupCombo.length; j < len2; j++) {
filterSelectors.push( groupCombo[j] + filterGroup[k] ); // [ 1, 2 ]
}
}
// apply filter selectors to combo filters for next group
comboFilters = filterSelectors;
}
i++;
}
comboFilters.sort();
var comboFilter = comboFilters.join(', ');
return comboFilter;
}
希望这对某人有帮助!该演示非常流畅。
关于jquery - 将过滤元素与同位素组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7886882/
有没有办法保持定位完整,但使元素不可点击?演示 here 。 通过添加另一个类而不是 .element,我失去了定位。 抱歉没有添加具体的代码示例,因为我不确定在哪里解决这个问题(标记、CSS 或 j
使用同位素 extension of perfectMasonry by zonear 到目前为止,它看起来运行良好,我想知道是否有人知道如何将容器居中。尝试使用 css 但没有运气。原始同位素has
我已经和同位素斗争了一段时间了。经过几次不同的坐着之后,我似乎无法弄清楚这一点。 isotope.metafizzy.co/index.html 我将用图像来说明我的问题,但这是解释。正如您在我的网站
我使用此代码来运行具有 RTL 支持的 Isotope $.Isotope.prototype._positionAbs = function( x, y ) { return { right:
我使用同位素作为精美布局中链接内容的分类组织者。我正在尝试将多个值插入一个数组中,以便它将显示过滤器触及的所有项目。然而,最终结果只是显示数组中的最新项目而不是总和。最初,我将所有值插入一个字符串,然
我对同位素插件有一个小问题。当我的网页加载时,Isotope 将显示所有元素。我想让它显示一个类别。我怎样才能实现它? 预先感谢您的帮助! 最佳答案 只需在首次调用同位素的选项中提供一个过滤器,该过滤
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我问过类似的问题,但仍然想知道为什么我无法删除selected我认为这是删除 selected class 的正确操作 $(this).parents('.item').removeClass('se
我的容器是 800px。该空间被投资组合容器占用。然后单击按钮以启用过滤器菜单,然后告知投资组合容器的宽度为 610px,从而为过滤器菜单留出剩余空间。我正在使用 reLayout 调用来尝试更新项目
我在下面的例子中使用了代码: http://jsfiddle.net/desandro/zhbLL/3/embedded/result,js,css,html,resources/ 但希望将所选元素设
假设我想过滤颜色(红色、黄色或蓝色)、尺寸(小号、中号或大号)和 Material (羊毛、棉、丝绸)。我将有三组复选框。如果用户选中“红色”复选框和“中号”复选框,我希望 Isotope 显示红色和
按照有关 infinite scroll 的说明进行操作,我能够隐藏第 2、3、4 等页面中的新内容,直到它完成加载并制作动画。现在我想实现相同的效果,但主要内容是什么,第一页是什么。有什么帮助吗?我
我正在构建一个页面,其中的 block 由 Isotope 控制,我想插入一个分隔符。这是我的例子:
我正在尝试实现 Jquery Isotope。当我单击列表项中的过滤器时,没有任何反应。这些元素不会过滤或动画。如果有人可以提供帮助,那就太好了!谢谢! Jfiddle:http://jsfiddle
目前的运作方式: 默认显示最新的6个项目 当按下特定列表时,它会显示该类别中的最新帖子,即最新的 6 个项目。例如:它显示 Foto 中最新的 4 个,因为 6 个中的 4 个是 Foto 类别。这意
我花了大量时间试图让同位素和延迟加载一起工作。 问题:如果用户向下滚动,延迟加载会起作用,但是如果用户使用过滤器,项目会显示在顶部,但图像不会加载。 这是一个有同样问题的人,但他似乎解决了这个问题。我
我能找到的有关同位素动画的所有信息均适用于版本 1:http://isotope.metafizzy.co/v1/docs/animating.html 似乎没有任何关于同位素 2 的文档。有谁知道我
我们的插件 ( http://isotope.metafizzy.co/ ) 有问题,但它运行得很好。 但是我对盒子的顺序有疑问。我想知道是否可以从左到右排列。我已在屏幕 here 中说明了我的问题.
JQuery Masonry 和 Isotope 允许您拥有静态的 Cornerstamp,而页面的其余部分是动态的。 http://isotope.metafizzy.co/custom-layou
尝试让我的画廊正常运行。现在我使用 isotope.js 来过滤我的画廊,并使用 photoswipe.js 作为灯箱。 我的问题是,即使它正确地过滤了图库,photoswipe 仍然显示所有图像。
我是一名优秀的程序员,十分优秀!