当前位置: 首页 > news >正文

uni-app中的分类页面(仿京东分类页面)(scroll-view的使用)

京东效果图:

在这里插入图片描述

代码效果图:

在这里插入图片描述

说明:

实现图中所示的的左侧标签栏可上下滑动,右侧区域为对应左侧标签展开的图片文字详情说明,也具备上下滑动的功能

scroll-view

可滚动试图区域
本文着重使用”scroll-y“即纵向滑动

<template>
	<view class="classify">
		<!-- 左侧标签区域 -->
		<scroll-view class="left" scroll-y>
			<!-- 定义一个acitves为0,与index的索引绑定,若相等赋予类名,不相等为空 -->
			<view :class="actives === index ? 'active' : ''"  
			v-for="(item, index) in cates" 
			:key="item.id"
			@click="leftClickHandle(index, item.id)"
			>
				{{ item.title }}
			</view>
		</scroll-view>
		<!-- 右侧图片区域 -->
		<scroll-view class="right" scroll-y>
			<view class="item" v-for="item in secondData" :key="item.id">
				<image @click="previewImg(item.img_url)" :src="item.img_url"></image>
				<text>{{item.title}}</text>
			</view>
			<text class="none" v-if="secondData.length === 0">暂无数据,请浏览其他页面!</text>
		</scroll-view>
		
	</view>
</template>

<script>
	export default {
		data() {
			return {
				// 左侧页面数据
				cates: [],
				// 设置高亮标签
				actives: 0,
				// 右侧图片数据
				secondData: []
			}
		},
		onLoad () {
			this.getPicsCate()
		},
		methods: {
			// 发送请求获取左侧页面数据
			async getPicsCate () {
				const res = await this.$myRequest({
					url: '/api/getimgcategory'
				})
				this.cates = res.data.message
				this.leftClickHandle(0, this.cates[0].id)
			},
			// 点击时获取标签索引用于高亮显示及id用于获取右侧图片数据
			async leftClickHandle (index, id) {
				this.actives = index
				// 获取右侧的数据
				const res = await this.$myRequest({
					url: '/api/getimages/' + id
				})
				this.secondData = res.data.message
			},
			// 预览图片
			previewImg (current) {
				// 用map方法将全部的图片url放入定义的数组中
				const urls = this.secondData.map(item=>{
					return item.img_url
				})
				// current为将点击的设为第一张预览图
				uni.previewImage({
					current,
					urls,
					indicator: 'default'
				})
			}
		}
	}
</script>

<style lang="scss">
page {
	height: 100%;
}
.classify {
	height: 100%;
	display: flex;
	.left {
		width: 200rpx;
		height: 100%;
		border-right: 1px solid #eee;
		view {
			height: 60px;
			line-height: 60px;
			color: #333;
			text-align: center;
			font-size: 30rpx;
			border-top: 1px solid #eee;
		}
		.active {
			background: $shop-color;
			color: #fff;
		}
	}
	.right{
		height: 100%;
		width: 520rpx;
		margin: 10rpx auto;
		.item{
			margin-top: 30rpx;
			border-bottom: 1px solid #C0C0C0;
			image{
				width: 520rpx;
				height: 520rpx;
				border-radius: 5px;
			}
			text{
				font-size: 30rpx;
				line-height: 35rpx;
			}
		}
		.none {
			color: $shop-color;
			
		}
	}
}
</style>

案例二:双联动

		<view class="ld">
		     // 左侧区域
			 <view class="left">
				 <view 
					v-for="(item,index) in list" 
					:key="index" 
					// 设定点击事件,触发后给选中的标签动态绑定样式
					@click="setId(index)"
					:class="{active:index===currentNum}"
					>
					 {{item.title}}
				 </view>
			 </view>
			 // 右侧区域
			 <view class="right">
				<scroll-view  
					:scroll-y="true"  
					style="white-space: nowrap;height:200px;"
					// uni的方法,值为某子元素id即拿到左侧传的index
					:scroll-into-view="clickId"
					// uni方法,过渡动画
					scroll-with-animation
					// uni方法,滚动时触发,触底
					@scroll="scroll"
					@scrolltolower="scrolltolower"
					>
					 <view v-for="(item,index) in list" :key="index">
							<view class="title" :id="'po'+index">{{item.title}}</view>
							<view v-for="(it,idx) in item.list" :key="idx">
								{{it}}
							</view>
					 </view> 
				 </scroll-view>	 
			 </view>
		</view>
		// mock 数据
		data() {
			return {
				list:[
					{title:"中餐",list:["盖饭","扒饭","咖喱饭","鸡排饭"]},
					{title:"西餐",list:["牛排","意面","芝士","汉堡"]},
					{title:"法餐",list:["辣子鸡丁","xxx","肥仔快乐水","填缝隙"]},
					{title:"快餐",list:["薯条","丸子","粥","饮料"]},
				],
				clickId:"",
				currentNum:0,
			}
		},
            // 点击后触发的方法
			setId(index){
				this.clickId="po"+index;
				this.currentNum=index;
			}scroll(e){
				let scrollTop=e.target.scrollTop;
				for(let i=0;i<this.topList.length;i++){
					let h1=this.topList[i];
					let h2=this.topList[i+1];
					if(scrollTop>=h1&&scrollTop<h2){
						this.currentNum=i;
					}
				}
			},
			scrolltolower(){
					setTimeout(()=>{
						this.currentNum=3;
					}, 80);
			},
			getNodesInfo(){
				const query = uni.createSelectorQuery().in(this);
				query.selectAll('.title').boundingClientRect().exec((res)=>{
					let nodes=res[0];
					let rel=[];
					nodes.map(item=>{
						rel.push(item.top)
					})
					this.topList=rel;
				});
			}
.box1{
	width:100px;
	height:100px;
	background: red;
}
.box2{
	width:200upx;
	height:200upx;
	background: yellow;
}
.ld{
	display: flex;
	.left{
		width:100px;
		border:1px solid red;
	}
	.right{
		flex: 1;
		border:1px solid red;
		.title{
			font-size: 20px;
			font-weight: bold;
			background:pink;
		}
	}
}
// 高亮样式
.active{
	background:red;
}

相关文章:

  • oracle select decode判断 ,sign使用例子
  • 快速入门vuex带案例说明(超详细易理解)
  • wifi信道1,6,11科普
  • uni-app中微信小程序端使用腾讯地图API实现定位服务(超详细教程)
  • CSS 3学习——transition 过渡
  • 关于React中DOM,虚拟DOM及diff算法的理解
  • 类型签名在Javascript中的探索
  • 快速入门,理解,使用 axios请求
  • 第二章 存储,2.1 永不停止的脚步——数据库优化之路(作者:佳毅)
  • CSS实现元素水平垂直居中的几种方式
  • 年末购机推荐,首选OPPO这两款中端旗舰王者
  • js中深浅拷贝的实现方式(含图解原理)
  • Java刷题知识点之File对象常用功能:获取文件名称、获取文件路径、获取文件大小、获取文件修改时间、创建与删除、判断、重命名、查看系统根目录、容量获取、获取某个目录下内容、过滤器...
  • 查看httpd状态
  • js中如何判断引用值为数组(几种不同方式的详解)
  • Git的一些常用操作
  • Git同步原始仓库到Fork仓库中
  • JavaWeb(学习笔记二)
  • Java方法详解
  • js数组之filter
  • overflow: hidden IE7无效
  • tab.js分享及浏览器兼容性问题汇总
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • webpack入门学习手记(二)
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 扑朔迷离的属性和特性【彻底弄清】
  • 前端代码风格自动化系列(二)之Commitlint
  • 前嗅ForeSpider中数据浏览界面介绍
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (四) 虚拟摄像头vivi体验
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • .naturalWidth 和naturalHeight属性,
  • .NET 中的轻量级线程安全
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .net专家(高海东的专栏)
  • @WebService和@WebMethod注解的用法
  • [ C++ ] STL---string类的模拟实现
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [BUUCTF]-Reverse:reverse3解析
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C#]扩展方法
  • [Docker]十.Docker Swarm讲解
  • [HDU5685]Problem A
  • [HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [javaSE] GUI(Action事件)
  • [leetcode]Search a 2D Matrix @ Python
  • [MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择