微信小程序商品分类页最佳实践

news2024/11/25 22:43:22

首先我们来分析下UI小妹发来的产品原型图:

微信小程序商品分类页需要实现

1.单击左边的商品类目,右侧实现联动跳转到对应商品类目标题;

2.触屏拖动右侧商品列表,右侧跳转到对应商品类目;

2.分析需求我们可以把屏幕分为以下部分,主要使用到view scroll-view,代码结构和分解图如下:

<view>
    <!--搜索框-->
    <view></view>

    <!--商品类别.商品列表-->
    <view>
        <!--left-->
        <scroll-view></scroll-view>
        <!--right-->
        <scroll-view></scroll-view>
    </view>
</view>

 3.搜索view比较简单,在这里就不在阐述,主要实现商品类别和商品列表的交互。

scroll-view使用到的属性

scroll-y:允许纵向滚动(需要设置高度)。

scroll-with-animation:在设置滚动条位置时使用动画过渡。

scroll-top:设置竖向滚动条位置(商品列表上下滑动时动态变更位置)。

scroll-into-view:值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素。

代码实现最后结果如下:

1.test.wxml

//*******************************************************
//*      微信版蚂蚁森林上线了!微信搜蚂蚁森林立即体验!     *
//*******************************************************

<view class="container">
    <view style="height: 100rpx;"></view>

    <view class="VerticalBox">
        <!--left-->
        <scroll-view class="VerticalNav nav" scroll-y scroll-with-animation scroll-top="{{navTop}}" style="height:calc(100vh - 100rpx)">
            <view class="cu-item {{index==TabCur?'text-green cur':''}}" wx:for="{{dRes}}" wx:key="this" bindtap='tabSelect' data-id="{{index}}">{{item._name}}</view>
        </scroll-view>
        <!--right-->
        <scroll-view class="VerticalMain" scroll-y scroll-with-animation style="height:calc(100vh - 100rpx)" scroll-into-view="main-{{titleCur}}" bindscroll="VerticalMain">
            <view class="padding-lr" wx:for="{{dRes}}" wx:key="this" id="main-{{index}}">
                <!--标题-->
                <view class='cu-bar'>
                    <view class='action iconfont icon-icon_collect'> {{item._name}</view>
                </view>
                <!--列-->
                <block wx:if="{{item.res.length>0}}">
                    <template is="hotSelling" wx:for="{{item.res}}" wx:key="this" data="{{item}}"></template>
                </block>
                <block wx:else>
                    <view style="height: 300rpx;line-height: 300rpx;text-align: center;color:gray;">本类目无</view>
                </block>
            </view>
        </scroll-view>
    </view>
</view>

2.test.wxss

.VerticalBox {display: flex;width: 100vw;}

.VerticalNav.nav {width: 200rpx;white-space: initial;}

.VerticalNav.nav .cu-item {width: 100%;text-align: center;background-color: #fff;margin: 0;border: none;height: 50px;line-height: 50px;position: relative;}

.VerticalNav.nav .cu-item.cur {background-color: #f1f1f1;}

.text-green {color: #39b54a;font-weight: bold;}

.VerticalNav.nav .cu-item.cur::after {content: ''; width: 18rpx;height: 40rpx;border-radius: 10rpx 0 0 10rpx;position: absolute;background-color: currentColor;top: 0;right: 0rpx;bottom: 0;margin: auto;}

.VerticalMain {background-color: #f1f1f1;}

.padding-top {padding-top: 30rpx;}

.padding-lr {padding-left: 20rpx;padding-right: 20rpx;}

.cu-bar {display: flex;position: relative;align-items: center;min-height: 100rpx;justify-content: space-between;position: relative;background-color: white;color: #666666;margin-bottom: 2rpx;background-image: linear-gradient(rgb(0, 180, 230), rgb(250, 250, 250));}

.cu-bar .action {display: flex;align-items: center;height: 100%;justify-content: center;max-width: 100%;}

3.test.js

//*******************************************************
//*      微信版蚂蚁森林上线了!微信搜蚂蚁森林立即体验!     *
//*******************************************************


// 微信版蚂蚁森林:https://developers.weixin.qq.com/community/personal/oCJUswzZJO5lZcMDd3mKoDAClVdo
const app = getApp()
Page({
    data: {
        TabCur: 0, //当前点击Tab
        titleCur: 0,//标题指引
        navTop: 0,
        load: true,
        dRes: [],
    },

    tabSelect(e) {
        let i = Number(e.currentTarget.dataset.id)
        this.setData({
            TabCur: i,
            titleCur: i,
            navTop: (i - 1) * 50
        })

    },
    VerticalMain(e) {
        let self= this;
        let dRes = this.data.dRes;
        let tabHeight = 0;
        if (this.data.load) {
            for (let i = 0; i < dRes.length; i++) {
                let view = wx.createSelectorQuery().select("#main-" + i);
                view.fields({
                    size: true
                }, data => {
                    dRes[i].top = tabHeight;
                    tabHeight = tabHeight + data.height;
                    dRes[i].bottom = tabHeight;
                }).exec()
            }
            self.setData({
                load: false,
                dRes: dRes
            })
        }
        let scrollTop = e.detail.scrollTop + 20;
        for (let i = 0; i < dRes.length; i++) {
            if (scrollTop > dRes[i].top && scrollTop < dRes[i].bottom) {
                that.setData({
                    navTop: (i - 1) * 50,
                    TabCur: i
                })
                return false
            }
        }
    }
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/513775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用阿里云服务器三分钟搭建网站教程(详细图文详解)

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&#xff1a; …

5月编程排行榜出炉,最佳编程语言是谁?

技术的发展日新月异&#xff0c;作为开发者&#xff0c;应该时刻关注这些变化&#xff0c;不断学习才能跟上时代步伐。 编程语言层出不穷&#xff0c;关于“ 最佳编程语言 ”的争论也从未停止&#xff0c;网友们各抒己见...... 网友A&#xff1a; 人生苦短&#xff0c;我选Pyt…

我做了一个 VSCode 插件版的 ChatGPT

大家好&#xff0c;我是风筝&#xff0c;公众号&#xff1a;「古时的风筝」 其实很早之前就想学学 VSCode 插件开发了&#xff0c;但是又不知道做什么&#xff0c;加上我这半吊子前端水平&#xff0c;迟迟没有动手。 最近 ChatGPT 火的一塌糊涂&#xff0c;我也一直在用&#…

StarRocks 3.0 极速统一的湖仓新范式

2023 年 4 月&#xff0c;StarRocks 3.0 版本正式发布&#xff0c;正式开启了 StarRocks 极速统一的新篇章。从 OLAP 到 Lakehouse&#xff0c;从存算一体到存算分离&#xff0c;从 ETL 到 ELT&#xff0c;经过两个大版本后 StarRocks 在为用户创造极速统一的数据分析新范式上有…

视频转二维码怎么操作?简单一步在线生成视频二维码

当今各种各样的视频、电影、电视剧短视频等丰富这我们的生活。但是视频的体积一般都比较大不方便保存和传播&#xff0c;这时候我们就可以把视频、电影等做成二维码图片。扫一扫就能随时随地的观看&#xff0c;非常的方便。那么&#xff0c;要怎么操作呢&#xff1f; 一、什么工…

如何在MySQl数据库中给已有的数据表添加自增ID?

前言: 由于使用MySQL数据库还没有多久的缘故&#xff0c;在搭建后台往数据库导入数据的时候发现新增的表单是没有自增id的&#xff0c;因次就有了上面这个问题。解决方法1、给某一张表先增加一个字段,这里我们就以event_20230417这张表来举例&#xff0c;在数据库命令行输入下面…

滴水逆向三期笔记与作业——02C语言——03 数据类型_IF语句

OneNote防丢失。 海哥牛逼。 目录 一、ASCII编码二、GB2312-80编码三、全局变量和局部变量四、分支结构五、数组作业12345 一、ASCII编码 1、ASCII 码使用指定的 7 位或 8 位二进制数组合来表示128或 256 种可能的字符。 2、标准 ASCII 码使用 7 位二进制数来表示所有的大写和…

SSM框架学习-AOP介绍及简单案例

1. AOP介绍 面向切面编程&#xff08;Aspect-oriented programming&#xff0c;简称AOP&#xff09;&#xff0c;是一种编程思想和技术&#xff0c;用于将应用程序的业务逻辑与系统服务&#xff08;例如事务、日志记录、安全性等&#xff09;进行分离。AOP可以通过在代码中插入…

多ip,多端口、多域名访问多网站

目录标题 多ip访问多网站当前主机配置多个ip同行配置基于多个虚拟主机标签配置多个网站站点根据配置创建对应资源文件 多端口访问多网站根据配置创建对应资源文件重启httpd服务 基于域名访问多网站创建对应资源文件重启服务 排错方式启动不成功&#xff08;配置文件有问题&…

技术好≠薪资高,业务价值才是王道

2023年软件测试为什么发生巨变&#xff1f; 2023年了&#xff0c;软件测试行业发生了很大的改变&#xff0c;就像今年的金三银四不像是一个高峰期&#xff0c;我觉得有以下原因&#xff1a; 1、整个IT技术人员在行业内角色的转变 变化的一个原因就是现在变成了纯业务价值的导…

stm32 iic调试ds1307 rtc时钟

使用代码 (1条消息) stm32iic调试ds1307rtc时钟&#xff0c;采用iic接口&#xff0c;驱动软件&#xff0c;可以设置&#xff0c;读取ds1307时钟代码资源-CSDN文库 使用STM32调试ds1307&#xff0c;采用iic接口&#xff0c;由于有个项目需要使用外部RTC功能&#xff0c;所以需…

JimuReport积木报表 v1.5.8版本发布—免费的数据可视化报表

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

用frp开源工具,实现内网穿透(详细教程)

本文转载于&#xff1a; https://blog.csdn.net/qq_40903527/article/details/123850647 选取其中的frp内网穿透方式&#xff0c;给大家分享本此教程供大家参考。 ^ - ^ 如果你有一台云服务器&#xff08;有公网IP&#xff09;&#xff0c;或者有使用权&#xff0c;那么 在开…

Vue使用keep-Alive实现从详情页返回到列表页,还能记住当前的page页码以及切换的tab选项

哈喽&#xff0c;大家好&#xff0c;今天遇到一个小需求&#xff0c;就是要求从订单详情页返回到订单列表页&#xff0c;定位到跳转前的page页码和切换对应的tab选项 从我看了大量博主写的文章后&#xff0c;发现可以使用vue中的keep-Alive知识 下面是Vue中讲解keep-alive K…

我先肝了,爆火的Java全能笔记,分布式/开源框架/微服务/性能调优全有

前言 程序员&#xff0c;立之根本还是技术&#xff0c;一个程序员的好坏&#xff0c;虽然不能完全用技术强弱来判断&#xff0c;但是技术水平一定是基础&#xff0c;技术差的程序员只能CRUD&#xff0c;技术不深的程序员也成不了架构师。程序员对于技术的掌握&#xff0c;除了…

如何选择合适的智能氮气柜?

随着电子产品的普及&#xff0c;IC、半导体、精密元件、检测仪器之类的物品对湿度要求越来越高&#xff0c;潮湿、霉菌和金属氧化所造成的损害&#xff0c;随时在发生。人们对于物品的存放环境要求逐渐提高&#xff0c;利用防潮设备如智能氮气柜、电子防潮柜来存储产品也越来越…

《编程思维与实践》1060.浮点数加法

《编程思维与实践》1060.浮点数加法 题目 思路 浮点数可以分为[整数部分].[小数部分],可以将两个部分分开处理,最后再合并,但在处理四舍五入时较为繁琐, 为了方便起见,这里采用将两个部分一起处理的方式: 由于浮点数不超过500位:整数部分最多500位,小数部分最多500位, 所以加法…

gpio 子系统驱动LED

gpio 子系统 API 函数 1、gpio_request 函数 gpio_request 函数用于申请一个 GPIO 管脚&#xff0c;在使用一个 GPIO 之前一定要使用 gpio_request 进行申请&#xff0c;函数原型如下&#xff1a; int gpio_request(unsigned gpio, const char *label)/*函数参数和返回值含义如…

企业应该如何做到数字化转型成功?

01 成长型企业数字化转型的意义 成长型企业想要实现数字化转型&#xff0c;那么我们需要先弄明白&#xff0c;对于成长型企业而言&#xff0c;数字化转型到底具有什么意义&#xff1f;希望实现哪些目标&#xff1f; 可以归结为以下四点&#xff1a; 提升企业的生产力和效率&…

吴恩达机器学习课程的重点内容解析

吴恩达&#xff08;Andrew Ng&#xff09;教授是机器学习领域的知名专家&#xff0c;其机器学习课程在全球范围内备受欢迎。本文将解析吴恩达机器学习课程的重点内容&#xff0c;帮助读者了解机器学习的基本原理、常见算法和实践技巧。 一、机器学习简介 在课程的第一部分&…