微信小程序开发,仿小红书瀑布流实现

1. 涉及到的知识点

  1. grid-view的使用
  2. 官方文档指南:https://developers.weixin.qq.com/miniprogram/dev/component/grid-view.html

2. 功能描述

Skyline 下网格布局容器 和 瀑布流布局容器。基础库版本 2.30.4 起提供 WebView 兼容实现

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

3. 通用属性

属性类型默认值必填说明
typestringaligned布局方式
aligned每行高度由同一行中最大高度子节点决定
masonry瀑布流,根据子元素高度自动布局
cross-axis-countnumber2交叉轴元素数量
max-cross-axis-extentnumber0交叉轴元素最大范围
main-axis-gapnumber0主轴方向间隔
cross-axis-gapnumber0交叉轴方向间隔
paddingArray[0, 0, 0, 0]长度为 4 的数组,按 top、right、bottom、left 顺序指定内边距

3. 代码实现过程

  1. index.wxml布局文件

<view class="toolbar">瀑布流布局</view>
<scroll-view scroll-y style="width: 100%; height: 100%;" type="custom">
	<grid-view type="masonry" cross-axis-count="2" cross-axis-gap="10" main-axis-gap="10">
		<block wx:for="{{gridList}}" wx:key="{{item.id}}">
			<view class="grid-container">
				<image style="width: 100%; height: {{100 * item.height}}px" src="https://picsum.photos/200/{{100 *item.height}}?random={{item.id}}" mode="aspectFill"></image>

				<text class="title">这里的风景好美~</text>
				<view class="grid-bottom-container">
					<view class="bottom-left-container">
						<image src="https://res.wx.qq.com/op_res/lS41C5Xp6y6mfUbelCW8PArEcMwWRuhSohPO46vAiELbhAf56_CwONEDgM2vIVxOlT5KDcSxCkV8xIJ6cg3x2Q" mode="" style="width:38rpx;height:38rpx; border-radius: 50%" />
						<span>binnie</span>
					</view>

					<view class="bottom-right-container">
						<image src="../assets/img_dz.png" mode="" style="width:30rpx;height:30rpx;" />
						<span>6666</span>
					</view>
				</view>
			</view>
		</block>
	</grid-view>
</scroll-view>


瀑布流的实现原理,就是动态设置图片的高度,在代码中可以看到Image的的高度是动态的:
<image style="width: 100%; height: {{100 * item.height}}px" src="https://picsum.photos/200/{{100 *item.height}}?random={{item.id}}" mode="aspectFill"></image>

温馨提示: 仅支持作为 <scroll-view type="custom"> 模式的直接子节点

  1. index.wxss样式文件

.toolbar{
	line-height: 200rpx;
	text-align: center;
}


.title{
	margin-top: 20rpx;
	color: #333333;
}


.grid-bottom-container{
 display: flex;
 flex-direction: row;
 margin-top: 10rpx;
 padding-left: 10rpx;
 padding-right: 10rpx;
 justify-content: space-between;

}

.bottom-left-container{
 display: flex;
 flex-direction: row;
 align-items: center;
}

.bottom-right-container{
 display: flex;
 flex-direction: row;
 align-items: center;
}
.bottom-right-container span{
 color: #999999;
}

  1. index.js文件


Page({

  /**
   * 页面的初始数据
   */
  data: {
    gridList: [],
  },

  /**
   * 产生一个随机数。用来随机生成不同的图片高度,达到瀑布流效果
   */
   getRandomInt(max) {
    return Math.floor(Math.random() * max)
  },

  /**
   * 模拟一些数据的方法
   */
  generateGridList(childCount, columns) {
    const ans = []
    for (let i = 0; i < childCount; i++) {
      ans.push({
        id: i,
        height: this.getRandomInt(columns) + 1,
      })
    }

    this.setData({
      gridList: ans
    })
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.generateGridList(10, 3)
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})


4. 报错问题,解决方法

错误信息如下:

[ grid-demo-3/index.json 文件内容错误] grid-demo-3/index.json: You need to set the value of the “componentFramework” field to “glass-easel” in the %, as the “renderer” field is set to skyline。More detail: https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/glass-easel/migration.html(env: Windows,mp,1.06.2409140; lib: 3.6.4)

在这里插入图片描述解决方案:这个报错在控制台提示的很明显了,需要在.json文件中设置"componentFramework": "glass-easel" 即可 ,如下图所示

在这里插入图片描述

5. 运行效果图

请添加图片描述

小红书”——给你安利几个小程序的“坑”微信小程序写在前面  小程序发布至今已有一年多时间,很多人都已经在小程序道路上狂奔。最近我也开始了学习小程序,学了一段时间后,想看看这段时间的学习效果,于是边学习边开始了我的第一个小程序。相信很多人都用过小红书吧,我可是被它安利了很多好东西呢,所以想着就仿写一个小红书微信小程序吧。下面我就给大家“安利”几个我在写的过程中的“坑”。  因为花的时间不多,功能有很多没有完善,页面写的不是很好看,请各位将就着看啦。╮(╯▽╰)╭   准备工作  1. 开发环境:WXML(HTML),WXSS(CSS),Javascript  2. 开发工具:vscode,微信开发者工具  3. 辅助工具:Markman:图标标注工具,可用于取色、测量。Easy-Mock:可以伪造假数据,在js中引用就好了。点这里可以查看我的项目数据。Markdown:在线编辑器GifCam:Gif录制工具 微信小程序开发文档Iconfont-阿里巴巴矢量图标库:各种需要的小图标都有哦遇到的几个问题1、首页导航栏左右滑动效果图:  这部分,是通过微信小程序的scroll-view组件来完成的。代码如下:<scroll-view class="navBar-box" scroll-x="true"  一些使用scroll-view的注意事项:请勿在 scroll-view 中使用 textarea、map、canvas、video 组件scroll-into-view 的优先级高于 scroll-top在滚动 scroll-view 时会阻止页面回弹,所以在 scroll-view 中滚动,是无法触发 onPullDownRefresh若要使用下拉刷新,请使用页面的滚动,而不是 scroll-view ,这样也能通过点击顶部状态栏回到页面顶部2、首页文章列表随着点击导航栏列表改变效果图:  这部分,是通过微信小程序的swiper组件来完成的。代码如下:                                                                                                    {{notes.title}}                              <!-- 作者信息 -->                                              {{notes.writer}}                                                {{notes.like}}                                    使用swiper组件,将所有文章列表包起来,每个swiper-item表示不同的列表模块。之前在导航栏各列表项绑定了不同
### 微信小程序实现类似小红书图片轮播功能 在微信小程序实现类似于小红书的图片轮播功能可以通过使用 `swiper` 组件来完成。此组件允许创建滑动切换的效果,非常适合用于展示一系列图片或其他内容。 #### 创建页面结构和样式 为了构建一个简单的图片轮播器,在 WXML 文件中定义基本结构: ```xml <view class="container"> <swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}"> <block wx:for="{{imageUrls}}" wx:key="unique"> <swiper-item> <image src="{{item}}" class="slide-image" bindload="onImageLoad"></image> </swiper-item> </block> </swiper> </view> ``` 在此代码片段中,通过属性配置实现了自动播放、指示点等功能,并利用循环渲染多张图片[^1]。 #### 设置页面样式 对于 CSS 部分,则需确保每一张幻灯片都能良好显示并占据整个屏幕宽度: ```css /* pages/swiper/swiper.wxss */ .container { display: flex; justify-content: center; } .swiper-container { width: 100%; height: 300px; /* 可根据实际需求调整高度 */ } .slide-image { width: 100%; height: 100%; } ``` 以上样式使得 Swiper 容器内的每一项都具有相同的尺寸,从而形成连续畅的画面过渡效果。 #### JavaScript逻辑处理 最后,在 JS 文件里初始化数据源以及控制参数: ```javascript // pages/swiper/swiper.js Page({ data: { imageUrls: [ 'https://example.com/image1.jpg', 'https://example.com/image2.jpg', 'https://example.com/image3.jpg' ], indicatorDots: true, autoplay: false, // 是否开启自动播放 interval: 5000, // 自动切换时间间隔(ms) duration: 1000 // 切换动画时长(ms) }, onLoad() {}, }) ``` 这段脚本设置了要加载的一组图像链接地址列表以及其他一些可选特性开关,比如是否启用自动滚动等选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浩宇软件开发

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

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

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

打赏作者

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

抵扣说明:

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

余额充值