这是对 第一个版本 过滤块的更新,我之前做了一段时间。 想法是您在页面上有一个长列表或大型“块”集。 每个块属于某个组。 页面上有导航用于一次查看所有块,或选择要查看的组。 选择特定组将隐藏来自任何其他组的块,因此称为“过滤”。
HTML
每个块都应用了类名,以表示它所属的组。 这里有两个例子。 它们都属于“all”组,上面的一个是“adv”,下面的一个是“cla”。
<div class="all adv">
<img src="images/flavor-curry.jpg" alt="" />
<h4>Sweet Curry With Saffron</h4>
<p>Lusciously mellow with notes of overripe berries, 55% Hawaiian dark chocolate meets its soulmate in sweet curry - awash in spices including coriander, tumeric, cumin and cardamom and sprinkled with rare saffron. This spicy melange is slowly steeped in fresh coconut puree and gently blended with the chocolate. The taste rushes over you in waves - fragrant curry, chased by coconut, then the lingering, raisiny sweetness of chocolate. Available in <a href="/store/products/Chocolatier_s_Choice-5-2.html">Chocolatier's Choice</a> and <a href="/store/products/Adventurous_Collection-3-2.html">Adventurous Collection</a>.</p>
</div>
<div class="all cla">
<img src="images/flavor-vanilla.jpg" alt="" />
<h4>Lucille's Vanilla </h4>
<p>For those who prefer milder chocolate, this winsome truffle will ignite a lifelong love affair. Gail uses a dark blend in this recipe handed down through four generations of the Guittard family of chocolate makers. It tastes like a rich spoonful of homemade chocolate pudding - just like Gail's mom, Lucille, made on the stovetop in their family farm's kitchen. Available in <a href="/store/products/Chocolatier_s_Choice-5-2.html">Chocolatier's Choice</a> and <a href="http://gailambrosius.com/store/products/Classic_Collection-2-2.html">Classic Collection</a>.</p>
</div>
然后,导航包括引用这些类的 REL 属性。
<div id="flavor-nav">
<a rel="all" class="current">All</a>
<a rel="cla">Classic</a>
<a rel="adv">Adventurous</a>
<a rel="tea">Tea-Inspired</a>
</div>
jQuery JavaScript
用简单的英语来说,计划是
- 当单击过滤导航中的链接时…
- 淡出所有块(视觉指示正在发生变化)
- 从所有导航中删除“current”类并将其应用到新单击的导航
- 根据 REL 属性确定应显示哪个组
- 任何不属于该组的类型,向上滑动
- 任何属于该组的类型,向下滑动
- 淡入所有块
$(function() {
var newSelection = "";
$("#flavor-nav a").click(function(){
$("#all-flavors").fadeTo(200, 0.10);
$("#flavor-nav a").removeClass("current");
$(this).addClass("current");
newSelection = $(this).attr("rel");
$(".flavor").not("."+newSelection).slideUp();
$("."+newSelection).slideDown();
$("#all-flavors").fadeTo(600, 1);
});
});
这比我们在版本 1 中体验到的更流畅。 主要是因为使用了 .not() 原生 jQuery 过滤器。 以前,我们只是“向上滑动”所有类型,然后“向下滑动”正确的类型。 这意味着每次导航更改时,每个类型都会经历动画。 但是这并不总是必要的。 例如,如果您正在查看一个子集,然后单击返回“all”,则当前显示的块无需进行动画处理,只需所有其他块扩展出来即可。 这解决了这个问题。
很好的例子,非常感谢 Chris。
我喜欢 jQuery。 谢谢,哥们。
cursor:pointer;
这就是我要说的。
cursor:pointer;
它很好,我只是不喜欢没有 cursor:pointer 的可点击元素。
如果其余代码是对 fadeTo() 的回调,这样所有内容都会在淡出完成之后移动,看起来会更好吗? 对我来说,所有东西都在还没消失的东西上滑动看起来有点奇怪…
很棒的内容,一如既往!
两件事
1) 我真的觉得整个东西应该放在一个无序列表中。 从语义上讲,它更正确,而且标记更合理。
2) 看看我在新 Special K 网站上做了同样的事情来对食谱进行排序。
或者定义列表 :)
Touchè
感谢您提供的精彩教程!
我在我们的 鳍页面 上做了类似的事情,但我喜欢您的代码如何为每次点击使用相同的函数。
我还使用 CSS 在用户没有启用 JS 的情况下隐藏其他元素。
我同意 Skilldrick 的两条评论。
我想再添加两条,但首先要说明这是一个很棒的网站,我一直关注它。
1) 我不建议使用“all”类名,以及它在这里的用途。 相反,我建议不要过滤,而是取消过滤。
2) 我建议让悬停状态看起来与选中状态略有不同,因为如果您有两个橙色的类别框,即使有 cursor 指针或没有,也会让用户感到困惑。
噢! 这正是我要找的!! 谢谢!!
不错的技巧,Chris。 我在我们的内部销售订单应用程序中做了类似的事情,使用 Rik Lomas 出色的 QuickSearch jQuery 插件。 这允许您设置“块”链接,以及匹配任何文本(如 iTunes 等)的过滤输入字段。
有些地方让我感到困扰,但我无法指出具体的地方。 可能是 Skilldrick 说的那样。
当在经典和冒险之间切换时,滚动条会缓慢缩小,然后再次跳动。 跳跃感觉不太对劲。
太棒了!
不错,但它在禁用 JavaScript 的情况下不起作用。 您仍然可以在顶部看到导航链接,但单击它们没有任何效果。
也许另一种实现方法是将所有内容编码到单独的部分中。
经典
无论怎样…
冒险
无论怎样…
等等。
然后使用 JavaScript,通过循环遍历所有 h3 来获取 innerHTML 内容,将它们链接到内部锚点(h3),隐藏 body 中的 h3,然后执行 JS 显示/隐藏/过滤操作。
它以“老式”风格工作,无需 JavaScript,在使用 JavaScript 的情况下可以工作得更出色。
是的,这是一个好主意。 或者,也许只是使用 JavaScript 添加导航。 否则,只是列出所有内容。(或者在 JS 加载时取消隐藏导航)
谁使用禁用 JavaScript 的浏览器? 我们应该继续前进…
@iPad
在许多情况下,为了与一些辅助设备(例如网站交互或硬件屏幕阅读器)的兼容性,可能需要禁用 JavaScript,而不是在完整计算机上使用软件驱动程序。
另一种情况是,并非每个人都使用支持 JavaScript 的更新版移动设备,因此,即使在关闭的情况下,内容也能正常降级,这会增加网站的受众范围。
从现实的角度来看,即使只占很小的百分比,人数也很容易超过 50,000 人,而您将无法获得他们的访问量。 当然,这完全取决于您内容的预期受众。
不要低估需要内容能够正常降级才能获得体验的人数。
看起来很棒… 我认为如果您禁用淡入淡出功能会更酷!
就像 Special K 上那样。
干得好!
.flavor {
background:#EDEDED none repeat scroll 0 0;
border:1px solid #DEDEDE;
clear:both;
margin:0 0 15px;
overflow:hidden;
}
感谢上帝,这正是我需要的 WP 画廊解决方案。
嗯… 为什么这在我的 Firefox (3.0.10) 中不起作用? 更糟糕的是… 它在 IE 中工作! 啊啊! 世界末日了!
但说真的… 有什么想法吗?
我有一个关于 v3 的想法。
假设列表是动态的,并且使用分页,并且限制为 10 个项目。
当我过滤掉一些项目并只剩下 3 个项目时,它会从数据库中获取另外 7 个项目以补充。
我真的很想看看这样做的效果。
而且文章写得很好,这是唯一剩下的好的 Web 开发博客。
这很可行。JS 只需要知道分页号码。然后,在过滤完项目后,逻辑会检查显示的号码是否小于限制。如果是,则使用一个参数向服务器端执行一个 AJAX 调用以返回 (限制 - 号码) 个项目。返回的数据将被添加到集合中。
非常有趣,集成到 wp 中会非常有用。
太棒了,感谢您提供此信息。我在我的 http://www.nathanbweb.com 上使用的是第一个版本,但我考虑修改。
是的,我今天做了类似的事情,但使用的是选择。
使用选项卡的设计更好用,更易于使用。
它不适用于 Videobox v.1.1 :-(
http://www.networkworking.com/media_placements.html
当您将此过滤器效果应用于 Masonry 时,它不会在点击时重新排列牌组,其他人遇到过这个问题吗?