瀑布流布局使用详解——JQuery插件Isotope(动态实现子项目筛选)

  瀑布流布局,听起来听牛逼的样子,其实就是简单的子元素筛选功能。不过这一功能在网站页面布局当中还是很常用的,特别是在电商网站中

经常会有点一个钮筛选,然后页面的子元素刷的以下变了样。接下来,我们先简单介绍下概念和用法,然后详解这一功能的实现。

  瀑布流概念

    又称瀑布流式布局,是比较流行的一种网站页面布局方式。视觉表现为多栏布局,附带筛选功能,当下在国内十分流行。

瀑布流原理

    通过为子元素定义不同的class类名,然后通过类名及其内容进行筛选排序。

 

这一插件在实现网站元素动态切换,调整整体顺序方面十分实用。但是帅选的功能只能由程序员设置,用户无法自定义设置。

  接下来我们看一段代码,及效果演示,具体了解插件的用法(代码可直接黏贴运行,但是需要下载对应js文件)

<!doctype html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Isotope-jQuery神奇的分类过滤和排序插件</title>
</head>
<body>
    <div class="htmleaf-container">

        <h2>以下是筛选功能</h2>

        <div id="filters" class="button-group">  <button class="button is-checked" data-filter="*">显示所有</button>
          <button class="button" data-filter=".metal">金属</button>
          <button class="button" data-filter=".transition">过渡元素</button>
          <button class="button" data-filter=".alkali, .alkaline-earth">碱及碱金属</button>
          <button class="button" data-filter=":not(.transition)">过渡元素</button>
          <button class="button" data-filter=".metal:not(.transition)">非碱金属</button>
          <button class="button" data-filter="numberGreaterThan50">序号小于50</button>
          <button class="button" data-filter="ium">名字以ium结尾</button>
        </div>

        <h2>以下是重新排序功能</h2>
        <div id="sorts" class="button-group">  <button class="button is-checked" data-sort-by="original-order">默认顺序</button>
          <button class="button" data-sort-by="name">名字排序</button>
          <button class="button" data-sort-by="symbol">符号</button>
          <button class="button" data-sort-by="number">数字</button>
          <button class="button" data-sort-by="weight">质量</button>
          <button class="button" data-sort-by="category">种类</button>
        </div>

        <div class="isotope">
          <div class="element-item transition metal " data-category="transition">
            <h3 class="name">Mercury</h3>
            <p class="symbol">Hg</p>
            <p class="number">80</p>
            <p class="weight">200.59</p>
          </div>
          <div class="element-item metalloid " data-category="metalloid">
            <h3 class="name">Tellurium</h3>
            <p class="symbol">Te</p>
            <p class="number">52</p>
            <p class="weight">127.6</p>
          </div>
          <div class="element-item post-transition metal " data-category="post-transition">
            <h3 class="name">Bismuth</h3>
            <p class="symbol">Bi</p>
            <p class="number">83</p>
            <p class="weight">208.980</p>
          </div>
          <div class="element-item post-transition metal " data-category="post-transition">
            <h3 class="name">Lead</h3>
            <p class="symbol">Pb</p>
            <p class="number">82</p>
            <p class="weight">207.2</p>
          </div>
          <div class="element-item transition metal " data-category="transition">
            <h3 class="name">Gold</h3>
            <p class="symbol">Au</p>
            <p class="number">79</p>
            <p class="weight">196.967</p>
          </div>
          <div class="element-item alkali metal " data-category="alkali">
            <h3 class="name">Potassium</h3>
            <p class="symbol">K</p>
            <p class="number">19</p>
            <p class="weight">39.0983</p>
          </div>
          <div class="element-item alkali metal " data-category="alkali">
            <h3 class="name">Sodium</h3>
            <p class="symbol">Na</p>
            <p class="number">11</p>
            <p class="weight">22.99</p>
          </div>
          <div class="element-item transition metal " data-category="transition">
            <h3 class="name">Cadmium</h3>
            <p class="symbol">Cd</p>
            <p class="number">48</p>
            <p class="weight">112.411</p>
          </div>
          <div class="element-item alkaline-earth metal " data-category="alkaline-earth">
            <h3 class="name">Calcium</h3>
            <p class="symbol">Ca</p>
            <p class="number">20</p>
            <p class="weight">40.078</p>
          </div>
          <div class="element-item transition metal " data-category="transition">
            <h3 class="name">Rhenium</h3>
            <p class="symbol">Re</p>
            <p class="number">75</p>
            <p class="weight">186.207</p>
          </div>
          <div class="element-item post-transition metal " data-category="post-transition">
            <h3 class="name">Thallium</h3>
            <p class="symbol">Tl</p>
            <p class="number">81</p>
            <p class="weight">204.383</p>
          </div>
          <div class="element-item metalloid " data-category="metalloid">
            <h3 class="name">Antimony</h3>
            <p class="symbol">Sb</p>
            <p class="number">51</p>
            <p class="weight">121.76</p>
          </div>
          <div class="element-item transition metal " data-category="transition">
            <h3 class="name">Cobalt</h3>
            <p class="symbol">Co</p>
            <p class="number">27</p>
            <p class="weight">58.933</p>
          </div>
          <div class="element-item lanthanoid metal inner-transition " data-category="lanthanoid">
            <h3 class="name">Ytterbium</h3>
            <p class="symbol">Yb</p>
            <p class="number">70</p>
            <p class="weight">173.054</p>
          </div>
          <div class="element-item noble-gas nonmetal " data-category="noble-gas">
            <h3 class="name">Argon</h3>
            <p class="symbol">Ar</p>
            <p class="number">18</p>
            <p class="weight">39.948</p>
          </div>
          <div class="element-item diatomic nonmetal " data-category="diatomic">
            <h3 class="name">Nitrogen</h3>
            <p class="symbol">N</p>
            <p class="number">7</p>
            <p class="weight">14.007</p>
          </div>
          <div class="element-item actinoid metal inner-transition " data-category="actinoid">
            <h3 class="name">Uranium</h3>
            <p class="symbol">U</p>
            <p class="number">92</p>
            <p class="weight">238.029</p>
          </div>
          <div class="element-item actinoid metal inner-transition " data-category="actinoid">
            <h3 class="name">Plutonium</h3>
            <p class="symbol">Pu</p>
            <p class="number">94</p>
            <p class="weight">(244)</p>
          </div>
        </div>
        </div>

<script src=‘js/jquery-1.10.2.js‘>
</script><script src=‘js/isotope.pkgd.min.js‘></script>
<script>
$(function () {
    var $container = $(‘.isotope‘).isotope({
        itemSelector: ‘.element-item‘,
        layoutMode: ‘fitRows‘,
        getSortData: {
            name: ‘.name‘,
            symbol: ‘.symbol‘,
            number: ‘.number parseInt‘,
            category: ‘[data-category]‘,
            weight: function (itemElem) {
                var weight = $(itemElem).find(‘.weight‘).text();
                return parseFloat(weight.replace(/[\(\)]/g, ‘‘));
            }
        }
    });
    var filterFns = {
        numberGreaterThan50: function () {
            var number = $(this).find(‘.number‘).text();
            return parseInt(number, 10) > 50;
        },
        ium: function () {
            var name = $(this).find(‘.name‘).text();
            return name.match(/ium$/);
        }
    };
    $(‘#filters‘).on(‘click‘, ‘button‘, function () {
        var filterValue = $(this).attr(‘data-filter‘);
        filterValue = filterFns[filterValue] || filterValue;
        $container.isotope({ filter: filterValue });
    });
    $(‘#sorts‘).on(‘click‘, ‘button‘, function () {
        var sortByValue = $(this).attr(‘data-sort-by‘);
        $container.isotope({ sortBy: sortByValue });
    });
    $(‘.button-group‘).each(function (i, buttonGroup) {
        var $buttonGroup = $(buttonGroup);
        $buttonGroup.on(‘click‘, ‘button‘, function () {
            $buttonGroup.find(‘.is-checked‘).removeClass(‘is-checked‘);
            $(this).addClass(‘is-checked‘);
        });
    });
});
</script>
</body>
</html>

  然后看一下效果图:

  接下爱来咱们说说插件的使用,以下代码时进行子元素筛选的,直接设置 data-filter 的值就可以了,这相当于是说你创建了一个类别,二者

个类别中的元素,只要他们具备  class 有这个类别的名字就可以了,当你点击对应按钮时,子元素就会自动变化筛选。

<div id="filters" class="button-group">  <button class="button is-checked" data-filter="*">显示所有</button>
          <button class="button" data-filter=".metal">金属</button>
          <button class="button" data-filter=".transition">过渡元素</button>
          <button class="button" data-filter=".alkali, .alkaline-earth">碱及碱金属</button>
          <button class="button" data-filter=":not(.transition)">过渡元素</button>
          <button class="button" data-filter=".metal:not(.transition)">非碱金属</button>
          <button class="button" data-filter="numberGreaterThan50">序号小于50</button>
          <button class="button" data-filter="ium">名字以ium结尾</button>
        </div>

  

  而下述代码是实现子元素排序功能的,用 data-sort-by  定义好你要按什么规则筛选,这个插件自带了 name 按首字母

ascill值排序,number 按数值大小排序等。也可以自定义排序的方式,在js中修改即可。

 <div id="sorts" class="button-group">  <button class="button is-checked" data-sort-by="original-order">默认顺序</button>
     <button class="button" data-sort-by="name">名字排序</button>
     <button class="button" data-sort-by="symbol">符号</button>
     <button class="button" data-sort-by="number">数字</button>
     <button class="button" data-sort-by="weight">质量</button>
     <button class="button" data-sort-by="category">种类</button>
 </div>

  

  子元素中,用大div将整个子元素内容包裹起来,根据类名与 data-sort-by 的对应关系,实现筛选。data-category="transition"也是

筛选用的,因为有时一个子元素同时会有2个下海选的类名,这个属性是为他设置一个最为优先的类别,避免冲突。

  而子元素当中众多的p标签啥的,都不是关键,关键看class类名,是什么标签无所谓,只要有与上述代码对应的类名,就可以根据对应标签

里的text内容进行排序

 <div class="element-item transition metal " data-category="transition">
       <h3 class="name">Mercury</h3>
       <p class="symbol">Hg</p>
       <p class="number">80</p>
       <p class="weight">200.59</p>
 </div>

  而js代码可以直接黏贴这段自执行函数,就可以实现想要的功能。

  对于此插件的js文档请到我个人主页的文件中下载。


时间: 2024-08-07 03:48:45

瀑布流布局使用详解——JQuery插件Isotope(动态实现子项目筛选)的相关文章

详解jquery插件中参数( $, window, document, undefined )的作用

示例代码如下: 1 ;(function($,window,document){ 2 //行内代码 3 })(jQuery,window,document); 1.代码最前面的分号,可以防止多个文件压缩合并时其他文件最后一行语句没加分号,而引起合并后的语法错误: 2.匿名函数(function(){})(); 由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数.避免函数体内和外部的变量冲突. 3.$:$是jquery的简写,很多方法和类库也使用$,这里$接

jQuery Mobile的默认配置项详解,jQuery Mobile的中文配置api,jQuery Mobile的配置说明,配置大全

学习jQuery Mobile也有一段时间了,越来越上手了,也越来越喜欢他了.我根本就没有理由拒绝他的好.这里我有分享一下我对它的配置项的使用说明一下. 看代码解释: $(document).live("pageinit",function(event){ $.mobile.loadingMessage = "正在加载数据,请稍候......"; $.mobile.pageLoadErrorMessage="很抱歉,系统好像再打小瞌睡......"

腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践

本文来自腾讯前端开发工程师" wendygogogo"的技术分享,作者自评:"在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦." 1.GIF格式的历史 GIF ( Graphics Interchange Format )原义是"图像互换格式",是 CompuServe 公司在1987年开发出的图像文件格式,可以说是互联网界的老古董了. GIF 格式可以存储多幅彩色图像,如果将这些图像((https://www.q

详解jQuery动画

css样式: button{ display: block; margin: 0px auto 20px; } div{ width: 200px; height: 200px; background: pink; margin: 0 auto; display: none; } HTML内容: <button name="block">点我出现</button><br> <button name="none">点我消

详解jQuery uploadify文件上传插件的使用方法

uploadify这个插件是基于js里面的jquery库写的.结合了ajax和flash,实现了这个多线程上传的功能. 现在最新版为3.2.1. 在线实例 实例中用到的php文件UploaderDemo.php请在页面下方下载 引入文件 <link rel="stylesheet" type="text/css" href="uploadify.css" /> <script type="text/javascript

详解IE插件DebugBar如何安装及使用

DebugBar插件是一款功能很强大的IE插件,用 户可以从各个不同的角度剖析Web页面内部,包括页面 详细代码.CSS样式表.所有链接.所有图片代码.脚本信息等等,不管你是编程大虾还是IT新人都和适合使用.下面小编就为大家介绍一下IE插件 DebugBar中文版如何安装及使用的. 一.DebugBar插件简介: DebugBar是功能强的IE插件,类似于Firefox浏览器的一款开发类插件Firebug.从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利. 目前对于个人

Webstorm功能详解及插件推荐

Web前端开发神器--Webstorm不用多介绍,强大的智能提示只是它的一个功能特性,它还具有许多有用的特性,比如版本控制.本地历史.即时模板等.Webstorm还内置了对 SASS.NodeJS.CoffeeScript.Jade 的支持,并且可自定义代码格式化规则.   Webstorm有哪些优势? 1.         图片宽高提示 平时在做前端开发时,一个页面中会碰见很多图片,如果我们在写img标签时能清楚的看见每个图片的宽高,岂不是太爽了?这一点Webstrom便可以实现. 2.   

详解jQuery中 .bind() vs .live() vs .delegate() vs .on() 的区别

转载自:http://zhuzhichao.com/2013/12/differences-between-jquery-bind-vs-live/ 我见过很多开发者很困惑关于jQuery中的.bind(), .live(), .delegate() 和 .on() 的使用以及它们的不同. 如果你没有耐心或者只想看到总结的话,请直接跳转到结尾. 在我们深入了解这些方法之前,先准备好HTML代码. [javascript] view plain copy <pre> <ul id=&quo

jQuery:详解jQuery中的事件(一)

之前用过一些jQuery的动画和特效,但是用到的部分也不超过10%的样子,感觉好浪费啊——当然浪费的不是jQuery,而是Web资源.后来就想深入研究下jQuery的内部机理,读过两遍jQuery源代码,但是自觉还差的好远,跟好多大神(比如阮一峰)的理解还是有很大差距.现在就一点一点积累自己的知识体系,记录自己学到的和自己所理解的jQuery. JavaScript和HTML之间的交互式通过用户和浏览器操作页面时引发的事件机制来处理的.当文档或者它的某些元素发生某些变化或操作时,浏览器就会自动生