瀑布流
就像我们刷的信息流一样,我们一般在博客的文章显示当中使用瀑布流的方式。这种方式可以让长宽不同的文章(或图片)单元更加合理的排布。
如kvrmnks 的博客 使用的white-blog ,是一个支持瀑布流的一钟博客架构,与普通<div></div><div></div>
这样生硬地排布不同,信息块的合理放置可以提升读者阅读体验。
Masonry 配置 masonry 非常简单,只需要挂上 jQuery 和 Masonry 的 js 文件(引用的时候jQuery 在前 ,否则**$().masonry()
找不到**)
$('document' ).ready (function ( ) { let $grid = $('.grid' ).masonry ({ itemSelector : '.item' , isAnimated : true , columnWidth : 0 , gutter :0 , horizontalOrder : false , stamp : '.stamp' , originLeft : false , originTop : false , }); });
附对应的 HTML 排布
<head > <script src ="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" > </script > <script src ="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js" > </script > </head > <body > <div class ="grid" > <div class ="stamp" > </div > <div class ="item" > </div > <div class ="item" > </div > <div class ="item" > </div > ... </div > </body >
实际上,要实现一般人需要的模型,不需要设置那么多项,只需要:
$('document' ).ready (function ( ) { let $grid = $('.grid' ).masonry ({ itemSelector : '.item' , isAnimated : true , gutter :0 }); });
除了一开始就布局好以外,Masonry 也可以配合点击等事件重新布局:
$('.grid' ).masonry (‘appended’, $items); $('.grid' ).masonry (‘prepended’, $items); $('.grid' ).masonry (‘stamp’, $stamp); $('.grid' ).masonry (‘unstamp’, $stamp); $('.grid' ).on ( 'click' , '.item' , function ( ) { $('.grid' ).masonry ( 'remove' , this ) .masonry ('layout' ); }); $('.grid' ).masonry (‘destroy’); let elements = $('.grid' ).masonry ('getItemElements' );
Packery Packery 的功能比 Masonry 要多,与 Masonry 使用 MIT 开源协议不同,Packery 对于商业是需要使用许可的,对于非商业用途的开发者仍然是免费的。
我感觉对比 Masonry,Packery 做的最吸引我的其实是它的可拖动模块(Draggable)。
$('document' ).ready (function ( ) { let $grid = $('.grid' ).packery ({ itemSelector : '.item' , isAnimated : true , }); $grid.find ('.item' ).each (function (i, gridItem ) { let draggie = new Draggabilly (gridItem); $grid.packery ('bindDraggabillyEvents' , draggie); }); });
其中需要的依赖 js 包有 jQuery、Packery、Draggablly,引用源可以参考
<script src ="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js" > </script > <script src ="https://unpkg.com/packery@2/dist/packery.pkgd.min.js" > </script > <script src ="https://unpkg.com/draggabilly@2/dist/draggabilly.pkgd.min.js" > </script >
这是一个可以将下一页内容加载到自己页下方的插件,配合上面的 Packery 或者 Masonry 非常方便。同样,这也是一个商业用途收费的插件。
$('.grid' ).infiniteScroll ({ path : '.page_next' , append : '.item' , status : '.page-load-status' , hideNav : '.page' , });
对应的 HTML 架构:
<div class ="grid" > <article class ="item" > ...</article > <article class ="item" > ...</article > ... </div > <div class ="page-load-status" > <p class ="infinite-scroll-request" > Loading...</p > <p class ="infinite-scroll-last" > End of content</p > <p class ="infinite-scroll-error" > No more pages to load</p > </div > <div class ="page" > <span class ="page_current" > Page 1</span > <a class ="page_next" href ="/page/2" > Next</a > </div >
update 2021-04-18
友链已经换用packery
+draggablly
,在电脑端下可以拖动,为了不影响手机端翻页,暂不对手机端开放。