前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信小程序实现吸顶、网格、瀑布流布局

微信小程序实现吸顶、网格、瀑布流布局

作者头像
越陌度阡
发布于 2024-05-24 07:04:56
发布于 2024-05-24 07:04:56
2.6K00
代码可运行
举报
运行总次数:0
代码可运行

微信小程序开发通常是在webview模式下编写,但是对小程序的渲染性能有一定的追求,就需要使用Skyline模式进行渲染,同时在这种模式下有也有一些特殊的组件,可以轻松的实现想要的效果,本文将介绍在Skyline模式下如何实现吸顶、网格、瀑布流布局。

以下是具体的实现:

1. 修改渲染模式

1. 在app.json中添加如下配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"renderer": "skyline",  // 声明渲染模式
"lazyCodeLoading": "requiredComponents", // 声明依赖注入
"rendererOptions": {   
    "skyline": {
        "defaultDisplayBlock": true, // 默认为块布局
        "defaultContentBox": true,   // 默认开启盒模型
        "disableABTest": true        // 禁用AB测试
    }
},
"componentFramework": "glass-easel" // 使用的组件框架

2. 由于在Skyline模式下,不支持页面全局滚动,也不支持原生导航栏,所以在页面的json配置文件中还要添加如下配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "usingComponents": {},
  "disableScroll": true,
  "navigationStyle": "custom"
}

2. 主要组件介绍

1. sticky-section 吸顶布局容器

仅支持作为 <scroll-view type="custom"> 模式的直接子节点。

2. sticky-header 吸顶布局容器;

仅支持作为 <scroll-view type="custom"> 模式的直接子节点或 sticky-section 组件直接子节点。

3. grid-view 网格布局容器,可实现网格布局、瀑布流布局等;

仅支持作为 <scroll-view type="custom"> 模式的直接子节点。按需渲染节点,比 Webview 兼容实现具备更好的性能。

3. 所有代码实现

1. 以下是WXML文件代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- index.wxml -->
<scroll-view type="custom" scroll-y show-scrollbar="{{false}}" scroll-into-view="{{intoView}}" class="scroll-view" bindscrolltolower="bindSrollToLower" style="margin-top: {{menuTop}}px;">

    <sticky-section push-pinned-header="{{false}}">
        <sticky-header>
            <view class="sticky-header">
                <view class="search" style="height: {{menuHeight}}px;line-height: {{menuHeight}}px; margin-right: {{menuLeft}}px;">
                    <input placeholder="找找去哪儿玩~" />
                </view>
            </view>
        </sticky-header>
        <grid-view type="aligned" cross-axis-count="5">
            <view wx:for="{{topList}}" class="top-list">
                <image src="https://res.wx.qq.com/op_res/omjFJjgEk_ZZIDmlSIE1hpn57hHOlcHvbMy1jM-BwNFczaS8S_rFryt8b3c7VC4h0BUjX4bSyjoDNaPteTlYcw" mode="aspectFill"></image>
                <text>广州</text>
            </view>
        </grid-view>
    </sticky-section>

    <sticky-section push-pinned-header="{{false}}">
    
        <sticky-header>
            <view class="sticky-header">
                <view class="sticky-header-child">
                    <view class="mini-head current">自然风景</view>
                    <view class="mini-head">周边旅游</view>
                    <view class="mini-head">温泉</view>
                    <view class="mini-head">玩雪</view>
                    <view class="mini-head">海边</view>
                </view>
            </view>
        </sticky-header>

        <grid-view type="masonry" 
            cross-axis-count="{{crossAxisCount}}" 
            cross-axis-gap="{{crossAxisGap}}" 
            main-axis-gap="{{mainAxisGap}}">
            <view wx:for="{{bottomList}}" class="grid-box">

                <image src="{{item.image_url}}" mode="widthFix"></image>

                <view class="content-box">
                    <text>这里的风景好美~</text>

                    <view class="profile-text">
                        <view class="left">
                            <image  src="https://res.wx.qq.com/op_res/lS41C5Xp6y6mfUbelCW8PArEcMwWRuhSohPO46vAiELbhAf56_CwONEDgM2vIVxOlT5KDcSxCkV8xIJ6cg3x2Q"></image>
                            <text>binnie</text>
                        </view>
                        <view class="right">
                            <image  src="https://res.wx.qq.com/community/dist/community/images/disagree_icon_fab2b7.svg"></image>
                            <text>666</text>
                        </view>
                    </view>
                </view>
            </view>
        </grid-view>

    </sticky-section>

</scroll-view>

2. 以下是WXSS文件代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* index.wxss */
.scroll-view {
    width: 100%;
    height: 100%;
}
 
.search {
    border: rgb(228, 226, 226) solid 1px;
    border-radius: 20px;
    margin: 0 10px;
    line-height: 30px;
    height: 30px;
}
 
.search input {
    padding: 0 10px;
    line-height: 30px;
    height: 30px;
}
 
 
.top-list {
    display: flex;
    text-align: center;
    justify-content: center;
    align-items: center;
    padding-top: 10px;
    flex-direction: column;
}
 
 
.top-list image {
    width: 15vw;
    height: 15vw;
    border-radius: 50%;
}
 
.top-list text {
    padding: 10px 0;
    font-size: 14px;
}
 
 
 
.sticky-header {
    background-color: #fff;
}
 
 
.sticky-header-child {
    display: flex;
    flex-direction: row;
}
 
 
.mini-head {
    display: flex;
    background-color: #f5f5f5;
    margin: 8px 6px;
    padding: 6px 8px;
    border-radius: 4px;
    font-size: 14px;
}
 
.current {
    background-color: #07c160;
    color: #fff;
}
 
.grid-box {
    padding: 10px;
    border-radius: 8px;
    background-color: #f5f5f5;
}
 
.grid-box image {
    width: 100%;
}
 
.content-box {
    padding-top: 10px;
}
 
.profile-text {
    display: flex;
    flex-direction: row;
    padding-top: 4px;
    align-items: center;
}
 
.profile-text view {
    display: flex;
    color: #888;
    font-size: 14px;
    flex-direction: row;
    align-items: center;
}
 
.profile-text .left {
    width: 70%;
}
 
.left image {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    margin-right: 4px;
}
 
 
.profile-text .right {
    text-align: right;
    color: #888;
    font-size: 14px;
}
 
.right image {
    width: 16px;
    height: 16px;
    background-size: cover;
    opacity: .5;
    color: rgba(0, 0, 0, .5);
    margin: 0 3px;
}

3. 以下是JavaScript文件代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// index.js

import { getLandscapeImages} from './data'

function getNewList() {
    const newList = new Array(20).fill(0);
    const imgUrlList = getLandscapeImages();
    let count = 0;
    for (let i = 0; i < newList.length; i++) {
        newList[i] = {
            id: i+1,
            title: `scroll-view`,
            desc: `默认只会渲染在屏节点,会根据直接子节点是否在屏来按需渲染`,
            time: `19:20`,
            like: 88,
            image_url: imgUrlList[(count++) % imgUrlList.length],
        }
    };
    return newList;
}

Page({

    data: {

        // 顶部列表数据
        topList: new Array(15).fill(0),
        // 底部列表数据
        bottomList: getNewList(),

        // 网络布局参数
        crossAxisCount: 2,
        crossAxisGap: 8,
        mainAxisGap: 8,

        // 顶部布局参数
        menuTop: 0,
        menuHeight:0,
        menuLeft:0
    
    },
    onLoad() {
        const res = wx.getMenuButtonBoundingClientRect();
        this.setData({
            menuTop: res.top,
            menuHeight: res.height,
            menuLeft: res.width + 10
        })
    },
    bindSrollToLower() {
        this.setData({
            bottomList: this.data.bottomList.concat(getNewList())
        })
    },


})

4. 以下是上面JavaScript代码中引入的本地模拟数据文件data.js代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// data.js

const landscapeList = [
    'https://res.wx.qq.com/op_res/7_miJnK0wxIrh5bV2QqvYfaqohk6ndcC6_CBkUZszfSpKbqUAV7S2xWRbAQ459YsPWAmLKkicEOPS1L3NmnnRA',
    'https://res.wx.qq.com/op_res/7_miJnK0wxIrh5bV2QqvYYjda9Dp372N3T05q_nn3PgvoXBoReXvaXBfkthtXQLN7m5_YI6FoTre-xvJBDFLMA',
    'https://res.wx.qq.com/op_res/7_miJnK0wxIrh5bV2QqvYfa6mRnywhNbBFV5eAt7oTz3zjlNJeujfQx0PVA1ufenPHBvxYXRNJ5chyi6RPaE7A',
    'https://res.wx.qq.com/op_res/7_miJnK0wxIrh5bV2QqvYYY1OalScOn4EMcQpkPaJ1Sxhri8CScjnhqVfjAZnLuVFl0JAM4VziHhSzHLZXtAaQ',
    'https://res.wx.qq.com/op_res/7_miJnK0wxIrh5bV2QqvYZB1p48LLH-Pc7Rzr4nN0YF-uZg7FW7zksw_Kjp0BNDHcZp9R9SRKbg0rA1HBaeK3Q',
    'https://res.wx.qq.com/op_res/0-l2fyKjv3_BR62E3KwTJPRaN5CDI6NZFg_qbSxeqF8UBpM4lXJ_1o9S9bsOOxMpuXGLeKyAKleWlAXmVLmQOw',
    'https://res.wx.qq.com/op_res/7_miJnK0wxIrh5bV2QqvYRu0VRyVvePJ4pB4_Dvj0ytF-ovjQzMl6WMLyuCeKk3579HNjKLIeNrHE7OprTBx5w'
]
  
export function getLandscapeImages() {
  return landscapeList
}

5. 以下是页面配置文件代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "usingComponents": {},
    "disableScroll": true,
    "navigationStyle": "custom"
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Typora+PicGo组合真香,Markdown文档图片自动上传到图床
身为程序员,肯定写过「Markdown」文档。Markdown不必多说,其有着非常丰富的语法,并能生成丰富的格式。Typora是非常好的Markdown工具,它使用户不必聚焦于语法就能写出Markdown文档来,并且所见即所得。行家都懂的。
Lvshen
2022/05/05
1.2K0
Typora+PicGo组合真香,Markdown文档图片自动上传到图床
使用Typora+PicGo配置Gitee图床
https://pan.baidu.com/s/1J8U22Q87U3kDPtDy8EOa4A 提取码:glj5 复制这段内容后打开百度网盘手机 App,操作更方便哦
清菡
2020/12/02
1.2K0
使用Typora+PicGo配置Gitee图床
MarkDown写作上传图床神器picGo原理
最近朋友推荐了一个用markdown写博客的神器,typora,用了一下,真的是好用到哭,之前是使用的markText,其实也挺好用的,这两个都是开源的,相对来说,Marktext做的更加美观点,Marktext唯一的缺点是,我在使用的时候,粘贴图片时上传是有bug的。因此,决定用下typora。切换到typora之后,发现快捷建基本上和Marktext是一样的,真的是无痛切入,然后剩下的就是配置一下如何上传图片了。
老码小张
2020/07/03
2.4K0
MarkDown写作上传图床神器picGo原理
Typora + PicGo + 两个免费图床,轻松输出技术文...
最近跟粉丝们私下聊的比较多,其中有一部分是在校的学生或刚刚毕业参加工作的朋友们,交流比较多的问题是如何提升自己的技术水平,感觉比较的迷茫;那么我给的建议就是多分享、多输出,用输出倒逼输入;
一行Java
2022/04/07
1.8K0
Typora + PicGo + 两个免费图床,轻松输出技术文...
使用码云 + PicGO + Typora搭建一个自动化图床
没有账号的注册一个账号,国人自己的平台,支持下,还是挺良心的,码云传送门,注册完毕新建仓库,都是中文,不做概述,看图操作即可
框架师
2021/03/05
5560
public_markdown博客图片自动上传
为了实现博客的多平台(简书、掘金、知乎等)自动化发布,需要将本地的markdown中的图片自动转为图床链接,尽管已经有PicGO这种神器,但是自动调用PicGo上传图床有以下两个问题
月见樽
2021/12/10
5040
public_markdown博客图片自动上传
Typora+PicGo+Gitee或github实现markdown自带图床效果
这里可以选择gitee,gitee由于众所周知的原因有时候会很慢,无奈选择gitee
星哥玩云
2022/05/28
6150
Typora+PicGo+Gitee或github实现markdown自带图床效果
PicGo:搭建图床
传送门:https://github.com/Molunerfinn/PicGo/releases
张小驰出没
2021/04/15
1.6K0
PicGo:搭建图床
Typora + PicGo + Gitee/GitHub 免费搭建个人图床
写了将近一年多博客,之前半年都是用 富文本 的方式来写博客。直到遇到了一些博友,听说他们都是用 Markdown 格式来写博客。结果,我就放弃了富文本模式,见仁见智,我是觉得真的很难用。
Lucifer三思而后行
2022/01/08
1.7K0
Typora + PicGo + Gitee/GitHub 免费搭建个人图床
使用Typora+PicGo+Gitee搭建Markdown写作环境
网络写作,图片管理一直是一个头疼的问题,本地管理容易丢失,发布文章时需要一个个手动上传,而且在不同平台发布文章还要重复上传。
吾非同
2020/12/18
1.1K0
Gitee + Typora,搭建自己的免费图床!
对于写博客的朋友们来讲,图床这个东西一定不会陌生,而且在一定程度上也给大家造成过一定困扰。
村雨遥
2021/03/15
3.2K5
【开源图床】使用Typora+PicGo+Gitee搭建个人博客图床
打开PicGo,可以看到PicGo默认是不显示Gitee的图床,需要安装一个插件(见后续)
SarPro
2024/02/20
4930
【开源图床】使用Typora+PicGo+Gitee搭建个人博客图床
【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床
把复制的令牌填入Picgo的参数token,并且参数customPath选择年月,点击确定。
SarPro
2024/02/20
3900
【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床
图床 | gitee+typora+picgo搭建个人图床
所谓图床工具,就是自动把本地图片转换成链接的一款工具,网络上有很多图床工具,就目前使用种类而言,PicGo 算得上一款比较优秀的图床工具。它是一款用 Electron-vue 开发的软件,可以支持微博,七牛云,腾讯云COS,又拍云,GitHub,阿里云OSS,SM.MS,imgur 等8种常用图床,功能强大,简单易用
雨中散步撒哈拉
2022/09/21
8670
自动化系列(四)Python实现钉钉机器人
定期数据需求除了以邮件的形式交付外,也可以发送到工作群里通知相关人员及时关注,本文将介绍如何推送数据到钉钉群里并@相关人员及时关注。
HsuHeinrich
2023/02/24
1.4K0
自动化系列(四)Python实现钉钉机器人
使用Typora+PicGo配置Gitee图床
通常我们用 Typora 写 Markdown 文档,对于文档里面的图片,如果不使用图床,图片都是存放在本地,如果把文档复制到别的地方,还得额外复制图片,特别麻烦。
IT可乐
2021/11/16
4190
使用Typora+PicGo配置Gitee图床
Typora自动转换图片链接
最近因为忙公司的项目,已经好长时间没有更新文章了.最近刚好抽出了点时间,就想着还是写一篇文章吧.
萌萌哒的瓤瓤
2021/09/07
1.2K0
微博图床挂了!
作为hexo多年的使用者,微博图床一直是我的默认选项,hexo+typora+iPic更是我这几年写文章的黄金组合。而图床中,新浪图床一直都是我的默认选项,速度快、稳定同时支持大图片批量上传更是让其成为了众多图床工具的默认选项。虽然今年早些的时候,部分如「ws1、ws2……」的域名就已经无法使用了,但通过某些手段还是可以让其存活的,而最近,所有调用的微博图床图片都无法加载并提示“403 Forbidden”了。
出其东门
2023/02/28
8163
微博图床挂了!
你要是还学不会,请提刀来见 Typora+PicGo+Gitee + node.js 打造个人高效稳定优雅图床
经过前面两弹的介绍,相信大家对图床都不陌生了吧,但是小魔童觉得这样做法还是不方便,使用 github的仓库来存放图片,如果不能上外网的话是不能展示图片的,自己可以上外网还不行,需要别人上外网才可以看到我文章中的图片,这也太难了。。。
阿兵云原生
2022/09/13
5700
base64+markdown 或 picgo + github + markdown构建图床永久保存图片到typro
填写如下配置信息,只要勾选repo选项即可,然后页面拉到底部点击Generate token 即可
以某
2023/03/07
7510
base64+markdown 或 picgo + github + markdown构建图床永久保存图片到typro
推荐阅读
相关推荐
Typora+PicGo组合真香,Markdown文档图片自动上传到图床
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档