如何使用特定过滤器链接到投资组合页面?

时间:2017-07-27 22:52:47

标签: javascript jquery html css

我正在使用如下所示的页面中的投资组合部分进行游戏:



$(function() {
  var selectedClass = "";
  $(".fil-cat").click(function() {
    selectedClass = $(this).attr("data-rel");
    $("#portfolio").fadeTo(100, 0.1);
    $("#portfolio div").not("." + selectedClass).fadeOut().removeClass('scale-anm');
    setTimeout(function() {
      $("." + selectedClass).fadeIn().addClass('scale-anm');
      $("#portfolio").fadeTo(300, 1);
    }, 300);
  });
});

body {
  max-width: 900px;
  float: none;
  margin: auto;
}

#portfolio {
  margin: 1rem 0;
  -webkit-column-count: 3;
  -moz-column-count: 3;
  column-count: 3;
  -webkit-column-gap: 1rem;
  -moz-column-gap: 1rem;
  column-gap: 1rem;
  -webkit-column-width: 33.33333333333333%;
  -moz-column-width: 33.33333333333333%;
  column-width: 33.33333333333333%;
}

.tile {
  -webkit-transform: scale(0);
  transform: scale(0);
  -webkit-transition: all 350ms ease;
  transition: all 350ms ease;
}

.tile:hover {}

.scale-anm {
  transform: scale(1);
}

p {
  padding: 10px;
  border-bottom: 1px #ccc dotted;
  text-decoration: none;
  font-family: lato;
  text-transform: uppercase;
  font-size: 12px;
  color: #333;
  display: block;
  float: left;
}

p:hover {
  cursor: pointer;
  background: #333;
  color: #eee;
}

.tile img {
  max-width: 100%;
  width: 100%;
  height: auto;
  margin-bottom: 1rem;
}

.btn {
  font-family: Lato;
  font-size: 1rem;
  font-weight: normal;
  text-decoration: none;
  cursor: pointer;
  display: inline-block;
  line-height: normal;
  padding: .5rem 1rem;
  margin: 0;
  height: auto;
  border: 1px solid;
  vertical-align: middle;
  -webkit-appearance: none;
  color: #555;
  background-color: rgba(0, 0, 0, 0);
}

.btn:hover {
  text-decoration: none;
}

.btn:focus {
  outline: none;
  border-color: var(--darken-2);
  box-shadow: 0 0 0 3px var(--darken-3);
}

::-moz-focus-inner {
  border: 0;
  padding: 0;
}

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<link href="https://npmcdn.com/basscss@8.0.0/css/basscss.min.css" rel="stylesheet" />
<div class="toolbar mb2 mt2">
  <button class="btn fil-cat" href="" data-rel="all">All</button>
  <button class="btn fil-cat" data-rel="web">Websites</button>
  <button class="btn fil-cat" data-rel="flyers">Flyers</button>
  <button class="btn fil-cat" data-rel="bcards">Business Cards</button>
</div>

<div style="clear:both;"></div>
<div id="portfolio">
  <div class="tile scale-anm web all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97190&w=350&h=190" alt="" />
  </div>
  <div class="tile scale-anm bcards all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=19&txt=200%C3%97290&w=200&h=290" alt="" />
  </div>
  <div class="tile scale-anm web all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=19&txt=200%C3%97290&w=200&h=290" alt="" />
  </div>
  <div class="tile scale-anm web all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97190&w=350&h=190" alt="" />
  </div>
  <div class="tile scale-anm flyers all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97190&w=350&h=190" alt="" />
  </div>
  <div class="tile scale-anm bcards all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=19&txt=200%C3%97290&w=200&h=290" alt="" />
  </div>
  <div class="tile scale-anm flyers all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97190&w=350&h=190" alt="" />
  </div>
  <div class="tile scale-anm web all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=19&txt=200%C3%97290&w=200&h=290" alt="" />
  </div>
  <div class="tile scale-anm flyers all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=19&txt=200%C3%97290&w=200&h=290" alt="" />
  </div>
  <div class="tile scale-anm web all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97190&w=350&h=190" alt="" />
  </div>
  <div class="tile scale-anm bcards all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=19&txt=200%C3%97290&w=200&h=290" alt="" />
  </div>
  <div class="tile scale-anm web all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97190&w=350&h=190" alt="" />
  </div>
  <div class="tile scale-anm bcards all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97190&w=350&h=190" alt="" />
  </div>
  <div class="tile scale-anm web all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97190&w=350&h=190" alt="" />
  </div>
  <div class="tile scale-anm web all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97190&w=350&h=190" alt="" />
  </div>
  <div class="tile scale-anm bcards all">
    <img src="https://placeholdit.imgix.net/~text?txtsize=19&txt=200%C3%97290&w=200&h=290" alt="" />
  </div>
</div>

<div style="clear:both;"></div>
&#13;
&#13;
&#13;

从另一个页面我有一个按钮,其中包含指向投资组合部分的链接。但我想要的是一个按钮(在不同的页面中)进入投资组合,已经过滤到某个元素。例如,从另一个页面我想直接将用户带到&#34; Flyers&#34;元素,所以不必过滤任何东西。可能吗?我怎样才能做到这一点?

被修改

在尝试标记为正确的答案的解决方案后,我注意到它适用于一个特定案例,working这是我添加的内容,每当我更改链接/our-work#other-case页面时已呈现但未相应过滤

 $( document ).ready(function() {
    var hash = window.location.hash.substr(1);
    switch(hash){
        case 'case-one':
        $(this).scrollTop(0);
                $('#case-one').click();
        case 'working':
        $(this).scrollTop(0);
                $('#working').click();
        case 'case-two':
        $(this).scrollTop(0);
                $('#case-two').click();
        case 'case-three':
        $(this).scrollTop(0);
                $('#case-three').click();
        case 'case-four':
        $(this).scrollTop(0);
                $('#case-four').click();
    }
});

2 个答案:

答案 0 :(得分:1)

这是一个不优雅但仅使用JS和Html的工作方法

在链接中指定锚标记,例如yourwebsite.com/portfolio#Flyers

然后

$( document ).ready(function() {
    var hash = window.location.hash.substr(1);
    switch(hash){
        case 'Flyers':
            $('#FlyersButtonId').click();
        ///..... case for other filters
    }
});

答案 1 :(得分:0)

有几种方法可以做到这一点,使用manipulate the browser history方法时,使用过滤器的正确方法是replaceState()

注意:如果您希望用户在点击后退浏览器按钮时能够浏览不同的过滤器状态,则您希望使用pushState()代替replaceState()但是,一般来说,在浏览器历史记录中添加过滤器状态作为单独的条目被认为是不好的做法,因为当他们想要返回上一页/网站时,它会使用户烦恼。

状态对象比这更复杂,但实际上,每次使用过滤器时,您只是在浏览器的历史记录中创建/替换一些后退/前进点。第三个参数是最重要的,因为它实际上更改了浏览器的URL,这意味着您的用户可以随时复制/粘贴当前地址并与其他人共享,并且他们都会看到相同的内容。 / p>

因此,修改过滤javascript,并在应用过滤器时:

window.history.pushState({filcat:"whatever"}, "Title", "#whatever");

...其中whatever是您应用的过滤器和&#34;标题&#34;是您希望页面在该状态下拥有的标题。根据您现有的代码,我还使用filcat作为state对象的属性名称。

当然,您还需要一个简单的脚本来读取页面加载时的当前URL并相应地调整内容。

$(window).on('load', function(){
  if (window.location.hash) {
    // do something here. 
    // For example, if window.location.hash (i.e.: "#whatever") and 
    // the id of your buttons match, you might even do:

    $(window.location.hash).trigger('click')
  }
})

我希望我能帮助你朝着正确的方向前进。