热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序实现商品左右联动

scroll-view实现商品左右联动文章目录scroll-view实现商品左右联动scroll-view使用效果图wxmljswxss数据结构效果图scroll-view使用可滚

scroll-view实现商品左右联动


文章目录

    • scroll-view实现商品左右联动
      • scroll-view使用
      • 效果图
      • wxml
      • js
      • wxss
      • 数据结构效果图


scroll-view使用


可滚动视图区域。使用竖向滚动时,需要给scroll-view一个固定高度,通过 WXSS 设置 height。组件属性的长度单位默认为px


scroll-view文档


效果图


请忽略画质失真


注: 以下商品图片用于测试,如有侵权请通知,会删除相关图片。

在这里插入图片描述


wxml

<view class&#61;"productList"><view class&#61;"menu-wrapper"><scroll-view scroll-y&#61;"true" scroll-with-animation&#61;"true"><view class&#61;"menu-item {{index &#61;&#61; curActive ? &#39;active&#39; : &#39;&#39;}}" wx:for&#61;"{{productList}}" wx:key&#61;"index" bindtap&#61;"selectMenu" data-index&#61;"{{index}}"><view class&#61;"name">{{item.c_name}}view>view>scroll-view>view><view class&#61;"prodeuct-wrapper"><scroll-view scroll-y&#61;"true" scroll-with-animation&#61;"true" bindscroll&#61;"scroll" scroll-into-view&#61;"{{toView}}" style&#61;"height: 100%"><block wx:for&#61;"{{productList}}" wx:key&#61;"id"><view id&#61;"nav{{index}}" class&#61;"product"><view class&#61;"title">{{item.c_name}}view><view class&#61;"goods-box"><view class&#61;"goods-item" wx:for&#61;"{{item.list}}" wx:for-item&#61;&#39;items&#39; wx:key&#61;"index"> <image class&#61;"goods-img" src&#61;"{{items.img}}" mode&#61;"aspectFit">image><view class&#61;"goods-name">{{items.goodsName}}view>view>view>view>block>scroll-view>view>
view>

js


由于在data中模拟数据测试的&#xff0c;页面加载直接调用获取某个分类下商品高度。 那么根据实际需求&#xff0c;在请求数据成功后&#xff0c;调用即可。


const app &#61; getApp()
var http &#61; require(&#39;../../../../utils/request.js&#39;);
var that;
//存放右侧分类的高度累加数组
var heightList &#61; [];
//记录scroll-view滚动过程中距离顶部的高度
var distanceToTop &#61; 0;Page({/*** 页面的初始数据*/data: {curActive: 0, //当前选中项productList: [{c_name: &#39;新鲜水果&#39;,list: [{id: 0,img: &#39;&#39;,goodsName: &#39;樱桃&#39;},{id: 1,img: &#39;&#39;,goodsName: &#39;荔枝&#39;},]},{c_name: &#39;海鲜水产&#39;,list: [{id: 0,img: &#39;&#39;,goodsName: &#39;鲍鱼&#39;}]}]},/*** 生命周期函数--监听页面显示*/onLoad: function () {// 获取商品列表高度that.getProListHeight();},/*** 左侧: 菜单事件* &#64;param {*} e */selectMenu (e) {let index &#61; e.currentTarget.dataset.index;that.setData({curActive: index,toView: "nav"&#43; index})},/*** 获取商品列表高度* 计算右侧商品某分类的高度*/getProListHeight () {let tmpHeightList &#61; [];let tmpH &#61; 0; //临时存放每个分类的高度// 获取元素信息 返回一个 SelectorQuery 对象实例const query &#61; wx.createSelectorQuery()query.selectAll(&#39;.product&#39;).boundingClientRect()query.exec(function(res) {res[0].forEach((item) &#61;> {tmpH &#43;&#61; item.height;// Math.floor()向下取整 【根据个人需要修改】tmpHeightList.push(Math.floor(tmpH));})heightList &#61; tmpHeightList; //[386, 658, 930, 1202, ...]console.log(heightList);})},/*** 监听滚动时触发事件* &#64;param {*} e */scroll(e) {if(heightList.length &#61;&#61; 0) return;let scrollTop &#61; e.detail.scrollTop; //滚动位置let current &#61; that.data.curActive;console.log(&#39;scrollTop&#61;&#61;&#61;&#61;&#61;&#61;>&#39;, scrollTop);if (scrollTop > distanceToTop) {//如果右侧 可视区域的竖直滚动位置 超过 当前列表选中项距顶部的高度&#xff08;且没有下标越界&#xff09;&#xff0c;则更新左侧选中项if ((current &#43; 1 < heightList.length) && (scrollTop >&#61; heightList[current])) {that.setData({curActive: current &#43; 1})} } else {//如果右侧 可视区域的竖直滚动位置 小于 当前列表选中的项距顶部的高度&#xff0c;则更新左侧选中项if ((current - 1 >&#61; 0) && (scrollTop < heightList[current - 1])) {that.setData({curActive: current - 1})}}//更新顶部的距离distanceToTop &#61; scrollTop;}
})

wxss


这里使用了scss声明一些变量mixin&#xff0c; 可根据自身要求修改



  • wh&#xff1a; 宽高&#xff0c; sc&#xff1a; 字体、颜色 &#xff0c; fcc&#xff1a; flex水平垂直居中&#xff0c; borderRadius&#xff1a; 圆角

.storeList {&#64;include wh(100%, 100%);height: calc(100% - 66px);display: flex;position: absolute;overflow: hidden;box-sizing: border-box;background: #fff;.menu-wrapper {overflow: hidden;overflow-y: scroll;-webkit-overflow-scrolling:touch;background: #f8f8f8;&#64;include wh(180rpx, 100%);flex: 0 0 180rpx;.menu-item {&#64;include wh(100%, 100rpx);&#64;include fcc;&#64;include sc(26rpx, $fc);}.active {color: #fe2945;background: $white;}}.prodeuct-wrapper {flex: 1;height: 100%;.product {width: 100%;}.title {font-weight: bold;&#64;include sc(30rpx, $fc);padding: 20rpx;}.goods-box {display: flex;flex-wrap: wrap;}.goods-item {width: calc(100% / 3);&#64;include fc;flex-direction: column;margin-bottom: 30rpx;.goods-img {&#64;include wh(150rpx, 150rpx);&#64;include borderRadius(6rpx);}.goods-name {&#64;include sc(24rpx, $fc);padding-top: 10rpx;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: calc(100% - 40rpx);text-align: center;}}}
}
::-webkit-scrollbar {width: 0;height: 0;color: transparent;
}

数据结构效果图


临时测试数据&#xff0c;仅供参考


在这里插入图片描述

感谢: 参考文章


推荐阅读
  • 本文详细解析了Android ListView的常用属性配置及其常见问题,涵盖了从基础设置到高级优化的各个方面。通过实例分析,帮助开发者更好地理解和应用ListView,提高开发效率和用户体验。 ... [详细]
  • 如何构建并优化微信小程序页面的设计与功能
    本文将深入探讨微信小程序页面的设计与优化方法,旨在帮助开发者高效构建功能完备且用户体验良好的小程序。通过实例分析与技术详解,读者能够掌握从页面布局到功能实现的全过程,提升开发技能与应用质量。 ... [详细]
  • 本文深入探讨了Android事件分发机制的源代码,重点分析了DecorView作为Activity根布局的角色及其在事件传递中的作用。同时,详细解析了PhoneWindow在Activity窗口管理中的关键功能,以及它如何与DecorView协同工作,确保用户交互事件的高效处理。 ... [详细]
  • 优化后的标题:在Android中利用GridView实现动态视觉效果
    项目中用到的一些动画,GridView的Item依次从屏幕外飞入到相应位置,附上相关代码: MainActivity.java packa ... [详细]
  • 深入解析 UIImageView 与 UIImage 的关键细节与应用技巧
    本文深入探讨了 UIImageView 和 UIImage 的核心特性及应用技巧。首先,详细介绍了如何在 UIImageView 中实现动画效果,包括创建和配置 UIImageView 实例的具体步骤。此外,还探讨了 UIImage 的加载方式及其对性能的影响,提供了优化图像显示和内存管理的有效方法。通过实例代码和实际应用场景,帮助开发者更好地理解和掌握这两个重要类的使用技巧。 ... [详细]
  • wxParse 0.3:微信小程序中的高级 HTML 和 Markdown 富文本解析器,全面支持多级嵌套与 Emoji 表情
    wxParse 0.3 是一款专为微信小程序设计的高级富文本解析器,支持 HTML 和 Markdown 转换为 WXML 可视化格式。该组件不仅能够处理复杂的多级嵌套结构,还全面支持 Emoji 表情,极大地提升了内容展示的多样性和用户体验。 ... [详细]
  • 本文介绍了Android动画的基本概念及其主要类型。Android动画主要包括三种形式:视图动画(也称为补间动画或Tween动画),主要通过改变视图的属性来实现动态效果;帧动画,通过顺序播放一系列预定义的图像来模拟动画效果;以及属性动画,通过对对象的属性进行平滑过渡来创建更加复杂的动画效果。每种类型的动画都有其独特的应用场景和实现方式,开发者可以根据具体需求选择合适的动画类型。 ... [详细]
  • 在微信小程序中,页面的加载机制与传统应用类似,每次打开新页面时都会创建一个新的视图对象并进行叠加。当用户点击返回按钮时,当前页面会被关闭并从堆栈中移除。这一过程涉及页面管理与资源释放,确保了用户体验的流畅性和系统的稳定性。微信小程序支持同时打开的页面数量有限制,最多可同时保持10个页面的打开状态,以避免内存溢出和性能下降。 ... [详细]
  • Android 图像色彩处理技术详解
    本文详细探讨了 Android 平台上的图像色彩处理技术,重点介绍了如何通过模仿美图秀秀的交互方式,利用 SeekBar 实现对图片颜色的精细调整。文章展示了具体的布局设计和代码实现,帮助开发者更好地理解和应用图像处理技术。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • C#编程指南:实现列表与WPF数据网格的高效绑定方法 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 探讨 `org.openide.windows.TopComponent.componentOpened()` 方法的应用及其代码实例分析 ... [详细]
  • 本文深入探讨了视图坐标与事件分发机制,详细分析了 `dispatchTouchEvent(MotionEvent event)` 和 `onTouchEvent(MotionEvent event)` 方法中 `event.getX()` 和 `event.getY()` 的具体作用及其在不同视图层级中的传递过程。通过实例解析,阐明了事件从触摸屏到具体视图组件的分发流程,帮助开发者更好地理解和优化用户交互体验。此外,文章还讨论了常见的事件分发问题及解决方案,为实际开发提供了宝贵的参考。 ... [详细]
  • 滑动显示大图升级版
    之前做了一个滑动展示大图片的demo,之后在大神博客发现大神也做过一个类似的插件。于是把插件摘了下来研究了一下。改动了插件显示文本的部分并增加了一点注释。效果比我的好 ... [详细]
author-avatar
mobiledu2502879733
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有