HTML瀑布流布局实现网易LOFTER——masonry响应式网格布局库(非jQuery)

HTML瀑布流布局——masonry响应式网格布局库(非jQuery)

瀑布流布局是流式布局的一种。是当下比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。最早采用此布局的网站是Pinterest,逐渐在国内流行开来。

常见瀑布流布局网站

鼻祖:Pinterest
通用类:豆瓣市集,花瓣网,我喜欢,读图知天下
美女图片:图丽网
时尚资讯类:看潮网
时尚购物类:蘑菇街,美丽说,人人逛街,卡当网
品牌推广类:凡客达人
家居o2o类:新巢网小猫家
微博社交类: 都爱看
搞笑图片类:道趣儿
艺术收藏类:微艺术
潮流图文分享:荷都分享网

在这里插入图片描述

特点

优点

1、有效的降低了界面复杂度,节省了空间:我们不再需要臃肿复杂的页码导航链接或按钮了。

2、对触屏设备来说,交互方式更符合直觉:在移动应用的交互环境当中,通过向上滑动进行滚屏的操作已经成为最基本的用户习惯,而且所需要的操作精准程度远远低于点击链接或按钮。

3、更高的参与度:以上两点所带来的交互便捷性可以使用户将注意力更多的集中在内容而不是操作上,从而让他们更乐于沉浸在探索与浏览当中。

缺点

  1. 有限的用例:
    无限滚动的方式只适用于某些特定类型产品当中一部分特定类型的内容。
    例如,在电商网站当中,用户时常需要在商品列表与详情页面之间切换,这种情况下,传统的、带有页码导航的方式可以帮助用户更稳妥和准确的回到某个特定的列表页面当中。

  2. 额外的复杂度:
    那些用来打造无限滚动的JS库虽然都自称很容易使用,但你总会需要在自己的产品中进行不同程度的定制化处理,以满足你们自己的需求;另外这些JS库在浏览器和设备兼容性等方面的表现也参差不齐,你必须做好充分的测试与调整工作。

  3. 再见了,页脚:
    如果使用了比较典型的无限滚动加载模式,这就意味着你可以和页脚说拜拜了。
    最好考虑一下页脚对于你的网站,特别是用户的重要性;如果其中确实有比较重要的内容或链接,那么最好换一种更传统和稳妥的方式。
    千万不要耍弄你的用户,当他们一次次的浏览到页面底部,看到页脚,却因为自动加载的内容突然出现而无论如何都无法点击页脚中的链接时,他们会变的越发愤怒。

  4. SEO:

集中在一页当中动态加载数据,与一页一页的输出相比,究竟那种方式更利于SEO,这是你必须考虑的问题。对于某些以类型网站来说,在这方面进行冒险是很不划算的。

  1. 关于页面数量的印象:
    其实站在用户的角度来看,这一点并非负面;不过,如果对于你的网站来说,通过更多的内容页面展示更多的相关信息(包括广告)是很重要的策略,那么单页无限滚动的方式对你并不适用。

masonry实现瀑布流布局

masonry是一个响应式网格布局库(非jQuery)。(Cascading grid layout library)

如果使用CSS+JavaScript当然可以实现瀑布流布局,但相对麻烦,masonry是一个javascript插件,通过该插件可以轻松实现瀑布流布局,和CSS中float的效果不太一样的地方在 于,float先水平排列,然后再垂直排列,使用Masonry则垂直排列元素,然后将下一个元素放置到网格中的下一个开发区域。这种效果可以最小化处理 不同高度的元素在垂直方向的间隙。

官网:http://masonry.desandro.com/

源码:https://github.com/desandro/masonry

在这里插入图片描述

下载并引用masonry

可以去官网或github下载“masonry.pkgd.min.js”,将下载到的插件添加到项目中,并在页面中添加引用,如下所示:

<script src="js/masonry/masonry.pkgd.min.js" type="text/javascript" charset="utf-8"></script>

准备内容

<ul id="grid" class="clearfix">
                        <li class="grid-item">
                            <div class="img">
                                <img src="./images/content/li/lofter_1659401965640.png" alt="">
                            </div>
                            <div class="title">
                                <div class="p">
                                    <p>要命,那帅哥是谁</p>
                                </div>
                                <div class="more">
                                    <span></span>
                                    <span></span>
                                    <span></span>
                                </div>
                            </div>
                            <div class="tag">
                                <span>#迪卢克</span>
                            </div>
                            <div class="author">
                                <div>
                                    <span class="touxiang"></span>
                                    <span class="name">不倒貉貉</span>
                                </div>
                                <div>
                                    <span class="like">
                                        <!--  -->
                                        <i></i>
                                        8.4K
                                    </span>
                                </div>
                            </div>
                        </li>
                        <li class="grid-item">
                            <div class="img">
                                <img src="./images/content/li/lofter_1659405863448.png" alt="">
                            </div>
                            <div class="title">
                                <div class="p">
                                    <p>官图双子真的是太可爱啦!!</p>
                                </div>
                                <div class="more">
                                    <span></span>
                                    <span></span>
                                    <span></span>
                                </div>
                            </div>
                            <div class="tag">
                                <span>#原神</span>
                            </div>
                            <div class="author subcrible">
                                <div>
                                    <span class="subcribletag">订阅</span>
                                </div>
                                <div>
                                    <span class="like">
                                        <!--  -->
                                        <i></i>
                                        8.4K
                                    </span>
                                </div>
                            </div>
                        </li>
                        <li class="grid-item">
                            <div class="img">
                                <img src="./images/content/li/八岐大蛇.jpg" alt="">
                            </div>
                            <div class="title">
                                <div class="p">
                                    <p>为阴阳师画的工作搞解禁</p>
                                </div>
                                <div class="more">
                                    <span></span>
                                    <span></span>
                                    <span></span>
                                </div>
                            </div>
                            <div class="tag">
                                <span>#阴阳师</span>
                            </div>
                            <div class="author">
                                <div>
                                    <span class="touxiang"></span>
                                    <span class="name">BITE咬鸽鸽</span>
                                </div>
                                <div>
                                    <span class="like">
                                        <!--  -->
                                        <i></i>
                                        2.6K
                                    </span>
                                </div>
                            </div>
                        </li>
                        <li class="grid-item">
                            <div class="img">
                                <img src="./images/content/li/Wedjat.jpg" alt="">
                            </div>
                            <div class="title">
                                <div class="p">
                                    <p>初めてのルーブルは</p>
                                </div>
                                <div class="more">
                                    <span></span>
                                    <span></span>
                                    <span></span>
                                </div>
                            </div>
                            <div class="tag">
                                <span>#恩奇都</span>
                            </div>
                            <div class="author">
                                <div>
                                    <span class="touxiang"></span>
                                    <span class="name">Wedjat eyes</span>
                                </div>
                                <div>
                                    <span class="like">
                                        <!--  -->
                                        <i></i>
                                        90K
                                    </span>
                                </div>
                            </div>
                        </li>
                        <li class="grid-item">
                            <div class="img">
                                <img src="./images/content/li/不知火.png" alt="">
                            </div>
                            <div class="title">
                                <div class="p">
                                    <p>怀着朦胧爱意,做缱绻的诗句</p>
                                </div>
                                <div class="more">
                                    <span></span>
                                    <span></span>
                                    <span></span>
                                </div>
                            </div>
                            <div class="tag">
                                <span>#恩奇都</span>
                            </div>
                            <div class="author subcrible">
                                <div>
                                    <span class="subcribletag">订阅</span>
                                </div>
                                <div>
                                    <span class="like">
                                        <!--  -->
                                        <i></i>
                                        8.4K
                                    </span>
                                </div>
                            </div>
                        </li>
                    </ul>
					<script>
                        var grid = document.querySelector('#grid');
                        var msnry = new Masonry(grid, {
                            itemSelector: '.grid-item',
                        });
                    </script>

原生JavaScript:

var grid = document.querySelector('.grid');
var msnry = new Masonry( grid, {
  // options...
  itemSelector: '.grid-item',
  columnWidth: 200
});

使用HTML属性:

<div class="grid" data-masonry='{ "itemSelector": ".grid-item", "columnWidth": 200 }'>
  <div class="grid-item"></div>
  <div class="grid-item"></div>
  ...
</div>

常用属性如下:

itemSelector : '.item',//瀑布流布局中的单项选择器
columnWidth : 240 ,//一列的宽度
isAnimated:true,//使用jquery的布局变化,是否启用动画
animationOptions:{
//jquery animate属性 渐变效果 Object { queue: false, duration: 500 }
},
gutterWidth:0,//列的间隙 Integer
isFitWidth:true,//是否适应宽度 Boolean
isResizableL:true,//是否可调整大小 Boolean
isRTL:false,//是否使用从右到左的布局 Boolean

运行结果

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
瀑布流布局是一种能够自适应不同尺寸图片的布局方式,常用于图片墙等展示图片的场景。在 Vue 中实现瀑布流布局可以通过以下步骤: 1. 安装并引入第三方,如 Masonry 或 Waterfall 等,这些提供了实现瀑布流布局的 API。 2. 在 Vue 组件中,使用第三方提供的 API 实现瀑布流布局。通常需要在组件的 `mounted` 钩子中初始化瀑布流布局,并在数据变化时更新布局。 下面是一个使用 Masonry 实现瀑布流布局的示例代码: ``` <template> <div class="masonry"> <div v-for="item in items" class="masonry-item" :key="item.id"> <img :src="item.src" :alt="item.title"> </div> </div> </template> <script> import Masonry from 'masonry-layout'; export default { data() { return { items: [ { id: 1, src: '...', title: '...' }, { id: 2, src: '...', title: '...' }, // ... ] } }, mounted() { this.masonry = new Masonry('.masonry', { itemSelector: '.masonry-item', columnWidth: '.masonry-sizer', percentPosition: true }); }, updated() { this.$nextTick(() => { this.masonry.reloadItems(); this.masonry.layout(); }); } } </script> <style> .masonry { position: relative; } .masonry-item { margin-bottom: 20px; } .masonry-sizer { width: 25%; } </style> ``` 在上面的代码中,我们使用 Masonry 提供的 API 初始化了瀑布流布局,并在数据变化时更新了布局。需要注意的是,我们在模板中使用了一个 `masonry-sizer` 元素来设置列宽,这是 Masonry 实现瀑布流布局的必要条件之一。 当然,以上只是一个简单的示例代码,具体的实现方式还需要根据具体情况进行调整。希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄东林檎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值