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

这篇具有很好参考价值的文章主要介绍了微信小程序实现吸顶、网格、瀑布流布局。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

微信小程序skyline实现瀑布流,Mini Program,前端开发,微信小程序

以下是具体的实现:

1. 修改渲染模式

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

"renderer": "skyline",  // 声明渲染模式
"lazyCodeLoading": "requiredComponents", // 声明依赖注入
"rendererOptions": {   
    "skyline": {
        "defaultDisplayBlock": true, // 默认为块布局
        "defaultContentBox": true,   // 默认开启盒模型
        "disableABTest": true        // 禁用AB测试
    }
},
"componentFramework": "glass-easel" // 使用的组件框架

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

{
  "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文件代码

<!-- 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文件代码:

/* 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文件代码:

// 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代码:

// 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. 以下是页面配置文件代码:文章来源地址https://www.toymoban.com/news/detail-835412.html

{
    "usingComponents": {},
    "disableScroll": true,
    "navigationStyle": "custom"
}

到了这里,关于微信小程序实现吸顶、网格、瀑布流布局的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序搜索框吸顶效果实现

    主页要做一个搜索框,滑动主页页面的时候,搜索框始终位于导航栏下面,位置不变,不随页面的滑动而滑动,这种效果被称为”吸顶“效果。 点击搜索框,弹出上层搜索详情的视图层,搜索详情的整个页面覆盖在主页面之上,并且也覆盖住主要搜索框。 主页搜搜框设置

    2024年02月13日
    浏览(56)
  • 微信小程序第六篇:元素吸顶效果实现

     系列文章传送门: 微信小程序第一篇:自定义组件详解 微信小程序第二篇:七种主流通信方法详解 微信小程序第三篇:获取页面节点信息 微信小程序第四篇:生成图片并保存到手机相册 微信小程序第五篇:页面弹出效果及共享元素动画 话不多说,先看效果: 这种效果在

    2024年02月16日
    浏览(43)
  • 微信小程序 - - - - - 瀑布流效果实现

    对于一些小程序,关于瀑布流的需求是很正常的,瀑布流看起来确实很舒服,但是具体该如何实现呢? 下文给出的方式是: js + css 瀑布流,又称 瀑布流式布局 。 是比较流行的一种网站页面布局, 视觉表现为 参差不齐的多栏布局 ,随着页面滚动条向下滚动,这种布局还会

    2024年02月17日
    浏览(42)
  • 瀑布流布局(CSS flex实现)

    关键点 使用了 vw 进行自适应缩放 html:

    2024年02月07日
    浏览(44)
  • css+js瀑布流布局实现

    记录一个瀑布流布局问题的解决过程 最开始使用js实现,将 子元素进行绝对定位,根据宽高及顺序判断定位的top与left 。 问题 :存在新增子元素页面加载不及时的问题,会出现子元素初始状态叠加在一起,计算完成后才能正常显示。 点击查看代码 再次尝试使用css中的colum

    2024年02月04日
    浏览(35)
  • 实现瀑布流布局的四种方法

    页面上是一种 参差不齐 的多栏布局,类似上图所示随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部,大部分为图片,图片 固定 宽度,高度 不一 ,根据原比例缩放到宽度达到固定的要求,每行排满后,新的图片添加到后面 固定宽度,高度不一 岑

    2023年04月15日
    浏览(59)
  • vue3实现瀑布流布局组件

    先看效果图 直接上代码 utils.js data.js 模拟后台返回的数据 瀑布流布局组件 waterfall.vue 使用该组件(这里 columns 写死了3列) 若要响应式调整列数,可参考以下代码 瀑布流布局组件监听 columns 变化

    2024年02月21日
    浏览(51)
  • 微信小程序 顶部搜索 吸顶 不随页面滚动而滚动

    主要用于商城类小程序: 微信小程序 搜索框 顶部吸顶 顶部购物车栏固定 不随页面滚动而滚动 示例: 可以看到分为三部分--头部搜索框--中间商品区域(可滚动)----底部购物车(固定底部) 头部搜索框 最大的盒子宽高100% 头部盒子需要有固定高度 flex布局 flex-flow: column; (为了中间

    2024年02月12日
    浏览(55)
  • 微信小程序--瀑布流

    本文使用了微信小程序第三方组件库 Lin UI 。 Lin UI 是基于 微信小程序原生语法 实现的组件库。遵循简洁,易用的设计规范。 Lin UI 中封装了瀑布流的组件,使用方法也比较简单,但是写法让我不是很理解,因此决定下载源码研究。 以下将从 如何使用 , 源码研究 , 源码改

    2024年02月09日
    浏览(35)
  • 微信小程序瀑布流组件

    1.创建文件夹    /components/waterfall/  文件夹结构如图 各文件内容: 我这里直接就是写死了两列排列 然后在用到该组件的页面文件夹下  .json 文件夹中引入 注意:文件路径不要写错了!!!这里只是一个参考  然后使用该组件  对其dataArr【 注意:我这里定义的是dataArr!!! 】

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包