首页 > 其他分享 >uniapp + vue3糖果语法实现瀑布流商品列表

uniapp + vue3糖果语法实现瀑布流商品列表

时间:2022-10-03 21:11:09浏览次数:51  
标签:uniapp good name fav 列表 num vue3 糖果 click

目录

效果

演示动图

思路

瀑布流其实就是将放放商品信息列表展示的view分为了左右两个部分,然后固定了两个部分的宽度,高度不用管,这样就会有错位的感觉了。既然分为了左右两个容器来显示,那我们的商品信息列表,也得分出两个,一个列表内容用于左边的容器显示,一个用于右边容器显示即可。

实现

先将列表分为两个

// 总商品数据列表
var goodList = ref([])
// 左侧数据列表
var LeftList = ref([])
// 右侧数据列表
var RightList = ref([])

// 将商品信息列表分为左侧右侧两个部分
for (let i = 0; i < resp.results.length; i++) {
	if (i % 2 === 0) {
		LeftList.value.push(resp.results[i])
	} else {
		RightList.value.push(resp.results[i])
	}
}

HTML中使用左右列表进行显示

	<view class="waterfall">
		<view class="wt-left wt-list">
			<view class="wt-item" v-for="(good,index) in LeftList" :key="index" @click="ToDetail(good.id)">
				<view class="item-img">
					<image :src="good.cover_image" mode="aspectFill"></image>
				</view>
				<!-- 介绍部分 -->
				<view class="introduce-section">
					<text class="title">{{good.good_name}}</text>
					<view class="tags-box">
						<text>点击量:{{good.click_num}}</text>
						<text>收藏量:{{good.fav_num}}</text>
					</view>
				</view>
			</view>
		</view>

		<view class="vt-right wt-list">
			<view class="wt-item" v-for="(good,index) in RightList" :key="index" @click="ToDetail(good.id)">
				<view class="item-img">
					<image :src="good.cover_image" mode="aspectFill"></image>
				</view>
				<!-- 介绍部分 -->
				<view class="introduce-section">
					<text class="title">{{good.good_name}}</text>
					<view class="tags-box">
						<text>点击量:{{good.click_num}}</text>
						<text>收藏量:{{good.fav_num}}</text>
					</view>
				</view>
			</view>
		</view>
	</view>

完整代码

<template>
	<view class="waterfall">
		<view class="wt-left wt-list">
			<view class="wt-item" v-for="(good,index) in LeftList" :key="index" @click="ToDetail(good.id)">
				<view class="item-img">
					<image :src="good.image" mode='widthFix'></image>
				</view>
				<!-- 介绍部分 -->
				<view class="introduce-section">
					<text class="title">{{good.name}}</text>
					<view class="tags-box">
						<text>点击量:{{good.click_num}}</text>
						<text>收藏量:{{good.fav_num}}</text>
					</view>
				</view>
			</view>
		</view>

		<view class="vt-right wt-list">
			<view class="wt-item" v-for="(good,index) in RightList" :key="index" @click="ToDetail(good.id)">
				<view class="item-img">
					<image :src="good.image" mode='widthFix'></image>
				</view>
				<!-- 介绍部分 -->
				<view class="introduce-section">
					<text class="title">{{good.name}}</text>
					<view class="tags-box">
						<text>点击量:{{good.click_num}}</text>
						<text>收藏量:{{good.fav_num}}</text>
					</view>
				</view>
			</view>
		</view>
	</view>
</template>

<script setup>
	import {
		ref
	} from 'vue'

	// 总商品数据列表
	var goodList = ref([{
			"id": 1,
			"name": "商品一",
			"image": "https://li-xun.work:8001/media/goods/images/%E4%B8%9B%E7%9F%A5%E4%BC%A0%E5%AA%92.png",
			"click_num": 22,
			"fav_num": 33
		}, {
			"id": 2,
			"name": "商品二",
			"image": "https://li-xun.work:8001/media/goods/images/%E4%BF%A1%E6%81%AF.png",
			"click_num": 22,
			"fav_num": 33
		}, {
			"id": 3,
			"name": "商品三",
			"image": "https://li-xun.work:8001/media/goods/images/%E6%9A%97%E6%9D%A0_8aGwy5q.jpg",
			"click_num": 888,
			"fav_num": 888
		}, {
			"id": 4,
			"name": "商品四",
			"image": "https://tse1-mm.cn.bing.net/th/id/OIP-C.MvBGMoOpeauMHajCOjdKvQHaJQ?pid=ImgDet&rs=1",
			"click_num": 888,
			"fav_num": 888
		},
		{
			"id": 5,
			"name": "商品五",
			"image": "https://li-xun.work:8001/media/goods/images/icon.png",
			"click_num": 888,
			"fav_num": 888
		},
		{
			"id": 6,
			"name": "商品六",
			"image": "https://li-xun.work:8001/media/goods/images/%E4%B8%9B%E7%9F%A5%E4%BC%A0%E5%AA%92.png",
			"click_num": 22,
			"fav_num": 33
		}
	])
	// 左侧数据列表
	var LeftList = ref([])
	// 右侧数据列表
	var RightList = ref([])

	// 将商品信息列表分为左侧右侧两个部分
	for (let i = 0; i < goodList.value.length; i++) {
		if (i % 2 === 0) {
			LeftList.value.push(goodList.value[i])
		} else {
			RightList.value.push(goodList.value[i])
		}
	}

	// 点击商品 跳转详情
	function ToDetail(id) {
		console.log("点击了商品", id)
	}
</script>

<style>
	.waterfall {
		display: flex;
		flex-direction: row;
		width: 740rpx;
		justify-content: center;
		overflow: hidden;
		margin-left: 10rpx;

	}


	.wt-list {
		width: 360rpx;
		display: flex;
		flex-direction: column;
		margin-right: 10rpx;
	}

	.wt-item {
		margin-bottom: 15rpx;
		background-color: #ffffff;
	}

	.item-img image {
		width: 100%;
	}

	/* 商品介绍 */
	.introduce-section {
		background: #ffffff;
		padding: 20rpx 30rpx;
	}

	.introduce-section .title {
		font-size: 32rpx;
		color: #303133;
		height: 50rpx;
		line-height: 50rpx;
	}

	.introduce-section .tags-box {
		display: flex;
		align-items: center;
		height: 30rpx;
		font-size: 24rpx;
		color: #909399;
	}
</style>

效果展示:
在这里插入图片描述


以上,自己写一个瀑布流的记录

标签:uniapp,good,name,fav,列表,num,vue3,糖果,click
From: https://www.cnblogs.com/li-xun/p/16751280.html

相关文章

  • 基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用
    刚完成一些前端项目的开发,腾出精力来总结一些前端开发的技术点,以及继续完善基于SqlSugar的开发框架循序渐进介绍的系列文章,本篇随笔主要介绍一下基于Vue3+TypeScript的全局......
  • 面试官:vue2和vue3的区别有哪些?
    一、Vue3与Vue2区别详述1.生命周期对于生命周期来说,整体上变化不大,只是大部分生命周期钩子名称上+“on”,功能上是类似的。不过有一点需要注意,Vue3在组合式API(Compo......
  • 能否手写vue3响应式原理-面试进阶
    (二)响应式原理利用ES6中Proxy作为拦截器,在get时收集依赖,在set时触发依赖,来实现响应式。(三)手写实现1、实现Reactive基于原理,我们可以先写一下测试用例//reactive.spec.t......
  • h5:vue3 + ts + vite + vuex + axios + vant4 + scss + postcss+mockjs+element-plus
    模板地址:https://gitee.com/zhang_meng_lei/mobile-template-h5-vue3/tree/master安装element-plus:yarnaddelement-plus(目前已导入但未实现代码)按需导入:https://el......
  • vue3 的 ref、isRef、toRef、toRefs、toRaw 详细介绍
    ref、isRef、toRef、toRefs、toRaw看着一堆类似的东西,一个头两个大,今天整理一篇文章详细介绍它们的功能及区别。1、refref属性除了能够获取元素外,也可以使用ref函数,创建......
  • taro+vue3模板-废弃
    一、初始化1、Taro基本安装并初始化项目npx@tarojs/cliinitWechatAppDemo  2、cd到新项目的文件夹3、安装依赖:yarn4、运行预览:yarndev:h5 ......
  • vue3 + element plus实现侧边栏
    一般前端项目少不了侧边栏。如图所示这些鬼东西特别繁琐,所以我们喜欢找些现成、开源的所谓后台管理的前端框架,开箱即用。方便是方便,而且做得还挺好,问题是,有学习成本,要按照......
  • vue3动态路由及菜单
    一般来说,前端项目中的路由,很有可能是需要动态注册的。因为菜单可能在管理系统中维护,还跟权限绑定,用户登录以后,需要动态展示菜单。菜单往往跟路由挂钩,因此,路由需要动态注册。......
  • 贤鱼的刷题日常-【c++】P7909 [CSP-J 2021] 分糖果
    ✅创作者:贤鱼⏰预计时间:15分钟@​​TOC​​题目题目背景红太阳幼儿园的小朋友们开始分糖果啦!题目描述红太阳幼儿园有n个小朋友,你是其中之一。保证n≥2。有一天你在幼儿园......
  • vue3 自定义指令控制按钮权限
    经过1个周的摸索和查阅资料,终于搞定VUE3中自定义指令,实现按钮级别的权限控制。当然,只是简单的对按钮进行隐藏和删除的dom操作比较容易,一直纠结的是当按钮无权限时,不是直接......