【问题标题】:Isotope: How to display and set opacity values for unmatched items同位素:如何显示和设置不匹配项目的不透明度值
【发布时间】:2015-04-01 00:03:09
【问题描述】:

在我的同位素网格中,我想同时显示匹配和不匹配的元素,而不匹配的元素不会消失。相反,我希望不匹配的元素具有 0.7 的不透明度。

Isotope website 上,他们概述了隐藏项的 CSS 类,因此我将以下内容应用于我的 CSS,但它不起作用。

#main-inner .isotope-hidden, 
.isotope-hidden, 
.isotope-hidden.box {
opacity:0.7 !important;
-webkit-transform:scale(1) !important;
-moz-transform:scale(1) !important;
-ms-transform:scale(1) !important;
-o-transform:scale(1) !important;
transform:scale(1) !important;
} 

在 Firebug 中检查时,我看不到更改:

我只发现了一个类似的问题 (here),但没有任何答案。

我发现了另一个关于类似问题的问题 (here),但同位素链接不再起作用,我从第二个答案中看不懂。

我的同位素初始化:

// init Isotope
var $container = $('#main-content').imagesLoaded( function() {
    $container.isotope({
        layoutMode: 'packery',
        packery: {
            columnWidth: '.col-width'
        },
        itemSelector: '.box'
    });
});
// bind filter button click
$('#filter a').click(function(){
    $('#filter .current').removeClass('current');
    $(this).addClass('current');

    var selector = $(this).attr('data-filter');
    $container.isotope({
        filter: selector,
    });
    return false;
});

小提琴http://jsfiddle.net/h20f38u1/1/

【问题讨论】:

  • 你能给我们一个小提琴,以便我们尝试一些东西
  • @Cerlin Boss 好的,这是小提琴:jsfiddle.net/h20f38u1/1 谢谢!
  • @IgorLaszlo 我没有删除你的小提琴......我只创建了一个标题可点击的链接:like this - click it
  • 你可以使用stack snippet,而不是使用jsfiddle。它们提供了大部分相同的功能,但 inside stackoverflow。

标签: jquery css jquery-isotope scaletransform


【解决方案1】:

Dave Desandro 已经为您的需要构建了一个插件:

isotope hide-reveal plugin

$.fn.hideReveal = function( options ) {
options = $.extend({
filter: '*',
hiddenStyle: { opacity: 0.2 },
visibleStyle: { opacity: 1 },
}, options );
this.each( function() {
var $items = $(this).children();
var $visible = $items.filter( options.filter );
var $hidden = $items.not( options.filter );
// reveal visible
$visible.animate( options.visibleStyle );
// hide hidden
$hidden.animate( options.hiddenStyle );
});
};

【讨论】:

  • 非常感谢,它比我的“非同位素”解决方案更有效!
  • 只是一个问题:我想取消对不匹配项目的点击,我成功了,但是当我选择其他类别时,取消绑定功能仍然影响以前不匹配的类别......如何返回对新不匹配的物品有影响吗?我做了什么:var $disabled = $items.not( options.filter ).children(); $disabled.unbind("click");
【解决方案2】:

据我所知,如果不修改同位素的工作方式,这是不可能顺利完成的(尽管我还没有深入研究源头)。

您可以使用$container.isotope() 调用中的选项设置同位素中的“可见”和“隐藏”样式:

hiddenStyle: {
    opacity: .7
},
visibleStyle: {
    opacity: 1
},

不幸的是,在将动画设置为隐藏样式后,isotope 在这些 div 上显式设置了 display: none 样式,因此您需要覆盖它。

#main-inner .box {
    display:block !important;

它还删除了opacity 样式。你可以解决这个问题:

#main-inner .box[style*=none] {
    opacity:.7;
}

但这开始变得有点难看。

此外,isotope 还会将“可见”项移动到左上角(同样使用显式样式),因此即使您这样做,也不太可能是您要查找的内容。最重要的是,事物会奇怪地四处移动,因为同位素假设它们是不可见的,而实际上它们不可见。

http://jsfiddle.net/h20f38u1/2/i

【讨论】:

  • 谢谢!你所做的,我已经做到了,完全一样,这是我的问题:按照你所做的(和我所做的),盒子不会留在他们的位置......我希望所有的盒子(匹配和unmatched) 保持在他们的位置,只有不匹配元素的不透明度会改变......
  • 正如我所提到的,如果不修改底层代码,这可能是不可能的。您可以使用 CSS 覆盖 display:none,但 isotope 在移动物体时实际上会更改 left:top: 属性,因此原始值会丢失。我在同位素中没有看到任何选项告诉它不要这样做:isotope.metafizzy.co/options.html
  • 修改底层代码是什么意思?你的意思是改变同位素脚本?如果我必须更改它没有问题,但仍然存在一个问题:在哪里以及如何...
  • 是的,这就是我的意思,但是如果不阅读和理解代码,就很难推测。您可以搜索“left”和/或“top”并查看它在哪里设置样式。您可能需要以某种方式检测初始布局和过滤布局之间的差异,以便初始布局能够工作,等等...或者您应该重新考虑并且根本不使用同位素过滤...因为您不需要重新布置任何您可以直接将相关不透明度应用于相关 div 的内容,例如
  • 是的,我也这样做了,我美化并检查了代码,但对于我的 jquery 知识来说太复杂了。我为我的问题找到了另一种解决方案,我将其作为答案,不是很好,但如果有人寻找相同的效果,它会给出一个想法......再次感谢!
【解决方案3】:

所以,如果有人想要同样的效果但没有找到,我有一个不太好的解决方案,但显示了我想要的......

1) 首先我在过滤器菜单初始化代码中禁用了数据过滤器以停止过滤:

// bind filter button click
$('#filter a').click(function(){
    $('#filter .current').removeClass('current');
    $(this).addClass('current');

    //var selector = $(this).attr('data-filter');
    //$container.isotope({
        //filter: selector,
    //});
    return false;
});

2) 我在菜单过滤链接中添加了类

<div id="filter">
    <a class="cat1" href="#" data-filter=".category1">Category1</a>
    <a class="cat2" href="#" data-filter=".category2">Category2</a>
    <a class="cat3" href="#" data-filter=".category3">Category3</a>
    <a class="cat-all current" href="#" data-filter="*">All</a>
</div>

3)我在每个盒子上添加了一个封面,它将播放不透明动画,我给它一个透明的不透明度:

.highlight {
    position:absolute;
    top:0;
    left:0;
    width:100%;
    height:100%;
    background:#000000;
    opacity:0;
}

4) 我用 jquery 为封面 (.highlight) 设置了动画:

$('#filter .cat1').click(function(){
    $('#main-inner div .highlight').not('#main-inner .category1 .hightlight' ).animate({ 'opacity':'1' },800);
    $('.category1 .highlight').animate({'opacity':'0'},800);
});
$('#filter .cat2').click(function(){
    $('#main-inner div .highlight').not('#main-inner .category2 .hightlight' ).animate({ 'opacity':'1' },800);
    $('.category2 .highlight').animate({'opacity':'0'},800);
});
$('#filter .cat3').click(function(){
    $('#main-inner div .highlight').not('#main-inner .category3 .hightlight' ).animate({ 'opacity':'1' },800);
    $('.category3 .highlight').animate({'opacity':'0'},800);
});
$('#filter .cat-all').click(function(){
    $('.highlight').animate({'opacity':'0'},800);
});

小提琴:http://jsfiddle.net/h20f38u1/5/

【讨论】:

  • 你应该试试这个isotope hide-reveal plugin
  • @Macsupport - 这正是我正在寻找的......写在答案中,我会接受它作为最好的解决方案! :)
猜你喜欢
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2014-03-20
  • 2016-12-02
  • 2012-02-02
  • 1970-01-01
相关资源
最近更新 更多