• Nissi商城首页(三):仿唯品会的商品分类和品牌导航功能(完美)


    一、前言

    上一节实现了搜索和导航功能,代码层面也对静态数据统一管理,想要学习的可以看上一篇文章。Nissi商城首页(二):仿唯品会的搜索和导航栏功能(完美)icon-default.png?t=M666https://blog.csdn.net/zhenghhgz/article/details/125698547

    本节继续实现我们的Nissi商城首页的商品分类导航和 品牌导航。原始效果如下:

    二、功能分析

    从上面原始效果图可以看到一共有两个区域,商品的分类导航和商品的品牌导航。

    商品分类导航:每一行有5个分类进行了平铺,每个包含2个元素(分类icon 和 分类名称)。

    商品品牌导航:每行有4个类型进行了平铺,每个类型包含2个元素(导航icon 和 名称),组成一张卡片,每隔3秒钟翻转一次。

    三、开发

    1、代码目录结构

    1. ├─pages
    2. │ └─index
    3. │ index.js
    4. │ index.json
    5. │ index.wxml
    6. │ index.wxss

    PS:继续在首页里面添加功能

    2、代码片段

    page/index/index.wxml 部分

    1. <view class="goods-classify">
    2. <block wx:for-items="{{tabGoodsList}}" wx:key="name">
    3. <view class="goods-list" data-type="{{item.id}}" data-typeid="{{item.id}}">
    4. <image src="{{item.icon}}" />
    5. <text>{{item.name}}text>
    6. view>
    7. block>
    8. view>
    9. <view class="brand-classify">
    10. <view class="brand-list" wx:for-items="{{tabBrandList}}" wx:key="id">
    11. <view class="brand b1" data-type="{{item.id}}" data-typeid="{{item.id}}" animation="{{animationZ}}">
    12. <image src="{{item.icon}}" />
    13. <text>{{item.name}}text>
    14. view>
    15. <view class="brand b2" data-type="{{item.id}}" data-typeid="{{item.id}}" animation="{{animationF}}">
    16. <image src="{{item.icon}}" />
    17. <text>{{item.name}}text>
    18. view>
    19. view>
    20. view>

     page/index/index.js 部分

    1. onLoad: function (options) {
    2. var defaultTab = this.data.tabList[0];
    3. //加载商品分类导航
    4. this.goodsListShow(defaultTab.id);
    5. //加载品牌分类导航
    6. this.brandListShow(defaultTab.id);
    7. //每3秒钟翻转一次品牌分类
    8. // this.brandListTime(this.data.pointId);
    9. },
    10. goodsListShow: function (e) {
    11. var tabGoodsList = indexData.tabGoodsList[e];
    12. console.log("classify="+e);
    13. this.setData({
    14. tabGoodsList: tabGoodsList
    15. })
    16. },
    17. brandListShow: function (e) {
    18. var tabBrandList = indexData.tabBrandList[e];
    19. console.log("brand="+e);
    20. this.setData({
    21. tabBrandList: tabBrandList
    22. })
    23. },
    24. rotateFn(pointId) {
    25. let that = this
    26. // let id = e;
    27. // 点击正面
    28. if (pointId == 1) {
    29. this.setData({
    30. animationZ: that.animation.rotateY(180).step().export(),
    31. animationF: that.animation.rotateY(0).step().export(),
    32. pointId: 2
    33. })
    34. } else { //点击反面
    35. this.setData({
    36. animationZ: that.animation.rotateY(0).step().export(),
    37. animationF: that.animation.rotateY(180).step().export(),
    38. pointId: 1
    39. })
    40. }
    41. },
    42. brandListTime : function() {
    43. this.data.Interval = setInterval(() => {
    44. var pointId = this.data.pointId;
    45. console.log("pointId="+pointId);
    46. this.rotateFn(pointId);
    47. this.setData({
    48. Numbers: ++this.data.Numbers
    49. })
    50. }, 3000);
    51. },
    52. /**
    53. * 生命周期函数--监听页面加载
    54. */
    55. animation: wx.createAnimation({
    56. duration: 1000,
    57. timingFunction: 'linear'
    58. }),

    page/index/index.wxss 部分

    1. /*=================商品分类导航-开始====================*/
    2. .goods-classify {
    3. display: flex;
    4. justify-content: left;
    5. flex-direction: row;
    6. flex-wrap: wrap;
    7. background-color: white;
    8. border-radius: 5%;
    9. }
    10. .goods-list {
    11. /* width: 18%; */
    12. width: calc(100%/5);
    13. display: flex;
    14. align-items: center;
    15. flex-direction: column;
    16. padding: 30rpx 0;
    17. /* padding-top: 20rpx; */
    18. }
    19. .goods-list image {
    20. width: 80rpx;
    21. height: 80rpx;
    22. /* border-radius: 50%;设置边界圆角 */
    23. }
    24. .goods-list text {
    25. padding-top: 20rpx;
    26. font-size: 25rpx;
    27. }
    28. /*=================商品分类导航-结束====================*/
    29. /*=================品牌分类导航-开始====================*/
    30. .brand-classify{
    31. display: flex;
    32. justify-content: space-between;
    33. flex-direction: row;
    34. flex-wrap: wrap;
    35. margin-top: 20rpx;
    36. }
    37. .brand-list {
    38. position: relative;
    39. height: 180rpx;
    40. width: 170rpx;
    41. }
    42. .brand {
    43. background-color: white;
    44. position: absolute;
    45. transition: all 1s;
    46. /* 不显示背面 */
    47. backface-visibility: hidden;
    48. border-radius: 10rpx;
    49. cursor: pointer;
    50. display: flex;
    51. align-items: center;
    52. flex-direction: column;
    53. width: 100%;
    54. }
    55. .brand image {
    56. width: 120rpx;
    57. height: 120rpx;
    58. }
    59. .brand text {
    60. font-size: 25rpx;
    61. margin-bottom: 15rpx;
    62. }
    63. .b1 {
    64. }
    65. .b2 {
    66. transform: rotateY(-180deg);
    67. }
    68. /*=================品牌分类导航-结束====================*/

    此处省略样式部分代码块......可以看源码!

    三、结果

     四、源码
    Nissi商城微信小程序: NissI商城微信小程序:主要是提供给前端开发人员学习的电商项目,为了达到真实业务场景整体风格借鉴了“唯品会特卖”商城,小编会不断更新并丰富功能。如果有想要学习小程序的同学,可以加入进来一起开发。语言:微信小程序原生icon-default.png?t=M666https://gitee.com/itunion/nissi-mall-wechat-applet

  • 相关阅读:
    卷出头了,终于学完阿里架构师推荐 413 页微服务分布式架构基础与实战笔记
    齐次坐标得到非齐次坐标
    vue的使用及绑定和一些vue指令
    Databend 开源周报第 111 期
    论文阅读-ATLAS: A Sequence-based Learning Approach for Attack Investigation
    【SemiDrive源码分析】【MailBox核间通信】53 - VIRTIO、/dev/vircan实现原理分析 及 代码实战
    华为机试 - 最大括号深度
    Java JPA详解:从入门到精通
    服务访问质量(QoS)——流量整形与拥塞管理
    10月20日星期五今日早报简报微语报早读
  • 原文地址:https://blog.csdn.net/zhenghhgz/article/details/126252878