HTML结构 " />

小言_互联网的博客

瀑布流插件Masonry使用教程

678人阅读  评论(0)

| 01 使用方法

  • 引入插件

  
  1. <script type="text/javascript" src="masonry.pkgd.min.js"> </script>
  • HTML结构

  
  1. <div class= "grid">
  2. <div class= "grid-item">...</div>
  3. <div class= "grid-item grid-item--width2">...</div>
  4. <div class= "grid-item">...</div>
  5. ...
  6. </div>
  7. .grid-item { width: 200px; }
  8. .grid-item--width2 { width: 400px; }
  • JS

jQuery用法:


  
  1. $( '.grid').masonry({
  2. // options
  3. itemSelector: '.grid-item',
  4. columnWidth: 200
  5. });

原生JS:


  
  1. var elem = document.querySelector( '.grid');
  2. var msnry = new Masonry( elem, {
  3. // options
  4. itemSelector: '.grid-item',
  5. columnWidth: 200
  6. });
  7. var msnry = new Masonry( '.grid', {
  8. // options
  9. });
  • 只用HTML不用js的方法
<div class="grid" data-masonry='{ "itemSelector": ".grid-item", "columnWidth": 200 }'>

| 02 配置项options

  • columnWidth

插件建议设置columnWidth。如果columnWidth未设置,则插件将使用第一个项目的宽度。columnWidth可以设置值为CSS类,这样就使用CSS设置的宽度。

  • itemSelector

指定哪些子元素将用作布局中的项目元素。

  • gutter

在项目元素之间添加水平空间。垂直空间可以使用margin-bottom。

  • horizontalOrder

值true或者false。项目是否按顺序从左到右排列。

  • percentPosition

设置组件的位置(尺寸)为百分比而非像素数。percentPosition: true可以使宽度为百分比的组件不改变他们原本的位置。

  • stamp

指定在布局中标记哪些元素。插件将在初始化时在标记元素下方布置项目。

  • fitWidth

根据容器的父元素的大小,设置容器的宽度以适合可用的列数。启用后,您可以使用CSS将容器居中。fitWidth: true不适用于按百分比宽度设置尺寸的元素。无论是columnWidth需要被设置为一个固定的大小,如columnWidth: 120,或项目必须像素的固定大小的,像width: 120px。否则,容器和物品的宽度将彼此折叠。

  • originLeft

控制水平方向布局,设置true从左开始,false从右开始。

  • originTop

控制垂直方向布局,true从上到下,false从底部到上。

  • containerStyle

设置为null,取消容器的所有CSS样式。

  • transitionDuration

布局改变时的过度时间。

  • stagger

一个项目改变时的过度时间

  • resize

调整窗口大小时调整大小和位置。默认启用resize: true。

  • initLayout

在初始化时启用布局。默认启用initLayout: true。

| 03 方法methods

  • masonry()

加载实例

  • layout()

重新布局

  • layoutItems()

布局指定项目

  • stamp()

在排列中固定指定项目,Masonry会围绕被固定的元素进行排列。unstamp
解除指定元素的stamp 状态。

  • appended()

在最后添加项目

  • prepended()

在前面添加项目

  • additems()

添加项目,但布局不会重排

  • remove()

移除项目

  • on

增加Masonry事件监听


  
  1. // jQuery
  2. var msnry = $grid.masonry( 'on', eventName, listener )
  3. // vanilla JS
  4. msnry.on( eventName, listener )
  • off

移除Masonry事件


  
  1. // jQuery
  2. var msnry = $grid.masonry( 'off', eventName, listener )
  3. // vanilla JS
  4. msnry.off( eventName, listener )
  • once

触发一次Masonry事件

  • reloaditems

重新加载所有项目

  • destroy

完全删除Masonry状态,项目恢复初始。

  • getItemElements

返回项目元素的数组

  • jQuery.fn.data('masonry')

从jQuery对象中取出Masonry实例,以便读取Masonry的属性。

  • Masonry.data()

通过元素取出Masonry实例,Masonry.data()用于从HTML初始化的Masonry实例中取出Masonry属性。

 

| 04 事件Events

  • jQuery事件绑定

  
  1. // jQuery
  2. var $grid = $( '.grid').masonry({...});
  3. function onLayout() {
  4. console.log( 'layout done');
  5. }
  6. // bind event listener
  7. $grid.on( 'layoutComplete', onLayout );
  8. // un-bind event listener
  9. $grid.off( 'layoutComplete', onLayout );
  10. // bind event listener to be triggered just once. note ONE not ON
  11. $grid.one( 'layoutComplete', function() {
  12. console.log( 'layout done, just this one time');
  13. });

 

  • jQuery事件侦听器有一个event参数,而普通JS侦听器没有。

  
  1. // jQuery, has event argument
  2. $grid.on( 'layoutComplete', function( event, items ) {
  3. console.log( items.length );
  4. });
  5. // vanilla JS, no event argument
  6. msnry.on( 'layoutComplete', function( items ) {
  7. console.log( items.length );
  8. });
  • 原生JS事件绑定

  
  1. // vanilla JS
  2. var msnry = new Masonry( '.grid', {...});
  3. function onLayout() {
  4. console.log( 'layout done');
  5. }
  6. // bind event listener
  7. msnry.on( 'layoutComplete', onLayout );
  8. // un-bind event listener
  9. msnry.off( 'layoutComplete', onLayout );
  10. // bind event listener to be triggered just once
  11. msnry.once( 'layoutComplete', function() {
  12. console.log( 'layout done, just this one time');
  13. });
  • layoutComplete事件

在布局的所有定位完成后触发

  • removeComplete事件

删除元素item后触发

 

| 案例一

本案例为导航切换显示项目

显示效果:

html结构:


  
  1. <div class="wrap">
  2. <div class="nav clearfix">
  3. <ul>
  4. <li> <a href="#" class="all">全部 </a> </li>
  5. <li> <a href="#" class="cate1">分类一 </a> </li>
  6. <li> <a href="#" class="cate2">分类二 </a> </li>
  7. </ul>
  8. </div>
  9. <div class="grid">
  10. <div class="grid-item">
  11. <img src="images/01.jpg" alt="">
  12. </div>
  13. <div class="grid-item">
  14. <img src="images/02.jpg" alt="">
  15. </div>
  16. <div class="grid-item">
  17. <img src="images/03.jpg" alt="">
  18. </div>
  19. <div class="grid-item">
  20. <img src="images/04.jpg" alt="">
  21. </div>
  22. <div class="grid-item">
  23. <img src="images/05.jpg" alt="">
  24. </div>
  25. <div class="grid-item">
  26. <img src="images/06.jpg" alt="">
  27. </div>
  28. <div class="grid-item">
  29. <img src="images/07.jpg" alt="">
  30. </div>
  31. <div class="grid-item">
  32. <img src="images/08.jpg" alt="">
  33. </div>
  34. <div class="grid-item">
  35. <img src="images/09.jpg" alt="">
  36. </div>
  37. <div class="grid-item">
  38. <img src="images/10.jpg" alt="">
  39. </div>
  40. </div>
  41. </div>

js:


  
  1. <script type="text/javascript" src="jquery-3.5.1.min.js"> </script>
  2. <script type="text/javascript" src="masonry.pkgd.min.js"> </script>
  3. <script>
  4. $( '.grid').masonry({
  5. // options
  6. itemSelector: '.grid-item',
  7. // columnWidth: 300,
  8. gutter: 10,
  9. // fitWidth: true
  10. });
  11. $( '.cate1').click( function(){
  12. $( '.grid-item').eq( 2).css( 'display', 'none');
  13. $( '.grid-item').eq( 4).css( 'display', 'none');
  14. $( '.grid-item').eq( 6).css( 'display', 'none');
  15. $( '.grid-item').eq( 1).css( 'display', 'block');
  16. $( '.grid-item').eq( 3).css( 'display', 'block');
  17. $( '.grid-item').eq( 5).css( 'display', 'block');
  18. $( '.grid').masonry()
  19. })
  20. $( '.cate2').click( function(){
  21. $( '.grid-item').eq( 1).css( 'display', 'none');
  22. $( '.grid-item').eq( 3).css( 'display', 'none');
  23. $( '.grid-item').eq( 5).css( 'display', 'none');
  24. $( '.grid-item').eq( 2).css( 'display', 'block');
  25. $( '.grid-item').eq( 4).css( 'display', 'block');
  26. $( '.grid-item').eq( 6).css( 'display', 'block');
  27. $( '.grid').masonry()
  28. })
  29. $( '.all').click( function(){
  30. $( '.grid-item').css( 'display', 'block');
  31. $( '.grid').masonry();
  32. })
  33. </script>

 

| 案例二

 

本案例为ajax加载更多项目,要在服务器中运行

效果如下:

html结构:


  
  1. <div class="wrap">
  2. <div class="grid">
  3. <div class="grid-item">
  4. <img src="images/01.jpg" alt="">
  5. </div>
  6. <div class="grid-item">
  7. <img src="images/02.jpg" alt="">
  8. </div>
  9. <div class="grid-item">
  10. <img src="images/03.jpg" alt="">
  11. </div>
  12. <div class="grid-item">
  13. <img src="images/04.jpg" alt="">
  14. </div>
  15. <div class="grid-item">
  16. <img src="images/05.jpg" alt="">
  17. </div>
  18. <div class="grid-item">
  19. <img src="images/06.jpg" alt="">
  20. </div>
  21. <div class="grid-item">
  22. <img src="images/07.jpg" alt="">
  23. </div>
  24. <div class="grid-item">
  25. <img src="images/08.jpg" alt="">
  26. </div>
  27. <div class="grid-item">
  28. <img src="images/09.jpg" alt="">
  29. </div>
  30. <div class="grid-item">
  31. <img src="images/10.jpg" alt="">
  32. </div>
  33. </div>
  34. </div>

js:


  
  1. <script type="text/javascript" src="jquery-3.5.1.min.js"> </script>
  2. <script type="text/javascript" src="masonry.pkgd.min.js"> </script>
  3. <script>
  4. $( '.grid').masonry({
  5. itemSelector: '.grid-item',
  6. gutter: 10,
  7. });
  8. h = $( '.grid').height();
  9. var bBtn = true;
  10. $( window).scroll( function(){
  11. h2 = $( window).scrollTop() + $( window).height();
  12. if( h < h2 && bBtn){
  13. bBtn = false;
  14. $.ajax({
  15. type: "get",
  16. url: "data.json",
  17. dataType: "json",
  18. success: function(str){
  19. var str = JSON.stringify(str);
  20. var json = eval( '('+ str + ')');
  21.   var json = JSON.parse( str );
  22. if(json.code){
  23. bBtn = true;
  24. }
  25. for( var i= 0;i<json.list.length;i++){
  26. var list = json.list[i];
  27. for( var j= 0;j<list.src.length;j++){
  28. var $content = $( '<div class="grid-item"><img src="'+ list.src[j] + '" /></div>' );
  29. $( '.grid').append( $content ).masonry( 'appended', $content );
  30. }
  31. }
  32. }, error: function (XMLHttpRequest, textStatus, errorThrown) {
  33. alert(errorThrown);
  34. }
  35. });
  36. }
  37. })
  38. </script>

 

 

 


转载:https://blog.csdn.net/ssszzz87/article/details/106315458
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场