当前位置:   article > 正文

新手版微信小程序商场商品分类页面(本地版)_微信小程序分类页面

微信小程序分类页面

前言

我做的这个商品分类页面,一共是由两个页面完成的。一个是分类页面,另一个是商品详情页面。下面我放2张图片,可以看下是不是需要的类型。

 第一张图片是商品的分类页面,第二张图片是商品的详情页。第一次写小程序,所以比较做的粗糙,希望对你有帮助。

代码

商品分类页

商品分类页:wxml

  1. <view class="shopping"><!----><!--大框架-->
  2. <view class="nav_left"><!--侧边栏盒子-->
  3. <block wx:for="{{leftitem}}" wx:key="id">
  4. <!--这里定义了一个变量index,并把这个变量赋值为index,这个是wx:for循环产生的下标,传到js,通过这个下标完成商品的显示-->
  5. <view class="nav_left_items {{count==index?'active-tag':''}}" bindtap="switchRightTab" data-index="{{index}}"><!--文字盒子-->
  6. {{item.name}}
  7. </view>
  8. </block>
  9. </view>
  10. <view class="nav_right"><!--右边主体部分-->
  11. <!--通过侧边栏的选择传到js中的index的值与js中data数据中的tag进行比较,完成商品的分类显示-->
  12. <view class="nav_right_goods" wx:for="{{rightitem}}" wx:key="id" wx:if="{{count==item.tag}}" ><!--商品详情的盒子-->
  13. <view bindtap="click_nav_right" data-index_two="{{index}}" class="nav">
  14. <image src="{{item.url}}" mode="widthFix" style="width: 180rpx;height: 180rpx;border-radius: 20rpx;"></image><!--商品图片-->
  15. <view class="nav_right_textandprice"><!--文字和价格的盒子-->
  16. <text class="nav_right_text" style="color: black;">{{item.name}}</text><!--商品文字-->
  17. <view class="nav_right_price"><!--商品价格-->
  18. ¥{{item.price}}.00
  19. </view>
  20. </view>
  21. </view>
  22. </view>
  23. </view>
  24. </view>

商品分类页:wxss

  1. /*大框架*/
  2. .shopping {
  3. position: relative;
  4. width: 100%;
  5. height: 100%;
  6. background-color: #fff;
  7. color: #939393;
  8. }
  9. /*左侧栏主盒子*/
  10. .nav_left{
  11. position: fixed;
  12. top: 0;
  13. left: 0;
  14. display: inline-block;
  15. width: 25%;
  16. height: 100%;
  17. /*主盒子设置背景色为灰色*/
  18. background: #f5f5f5;
  19. text-align: center;
  20. }
  21. .nav_left .nav_left_items{
  22. height: 30px;
  23. line-height: 30px;
  24. padding: 6px 0;
  25. border-bottom: 1px solid #dedede;
  26. font-size: 14px;
  27. }
  28. .nav_right{
  29. /*右侧盒子使用了绝对定位*/
  30. position: absolute;
  31. top: 0;
  32. right: 0;
  33. flex: 1;
  34. width: 75%;
  35. height: 100%;
  36. padding: 10px;
  37. box-sizing: border-box;
  38. background: #fff;
  39. }
  40. .nav{
  41. display: flex;
  42. padding: 40rpx;
  43. }
  44. .nav_right_textandprice{
  45. display: flex;
  46. flex-direction: column;
  47. padding-left: 20rpx;
  48. position: relative;
  49. }
  50. .nav_right_price{
  51. color: #c00000;
  52. position: absolute;
  53. bottom: 20rpx;
  54. }
  55. .active-tag{
  56. background-color: white;
  57. color: red;
  58. border-left: 5px solid red;
  59. border-radius: 5px;
  60. }

商品分类页:js

  1. // pages/shopping/shopping.js
  2. Page({
  3. /**
  4. * 页面的初始数据
  5. */
  6. data: {
  7. //leftitem是定义左边侧边栏的选项,rightitem是定义右边商品的展示,tag主要是把商品进行一个类别的划分
  8. leftitem:[
  9. {id:1,name:"柚子"},
  10. {id:2,name:"手工制品"}
  11. ],//引用的时候记得改下图片的地址
  12. rightitem:[
  13. {id:1,name:"柚子",price:2,url:"../../image/11.jpg",tag:0},
  14. {id:2,name:"鸡装饰品",price:8,url:"../../image/2.jpg",tag:1},
  15. {id:3,name:"钱包装饰品",price:10,url:"../../image/21.jpg",tag:1}
  16. ],
  17. count:0,//我们把前端的index值传到js中,并把它赋值给count,储存在js中,方便右边商品通过count完成与侧边栏的相同的那一类的商品展示,同时完成侧边栏的样式,保证选中的选项有与其他未选择的选项的区别
  18. },
  19. click_nav_right(event){//这个主要是完成商品分类页的数据传递到商品详情页
  20. var data_one=event.currentTarget.dataset.index_two//前端的右边商品定义了一个index_two这个变量,我们在js中把这个值赋值给data变量,并传递到商品详情页
  21. //console.log(data_one)
  22. wx.navigateTo({//通过这个函数,完成两个页面中数据的传递,具体的用法可以到微信的小程序文档中搜索,当然除了用这个函数,也可以通过引用全局变量的方式完成数据的传递
  23. url: '/pages/detail/detail?data='+data_one,
  24. })
  25. },
  26. switchRightTab(event){
  27. this.setData({
  28. count:event.target.dataset.index
  29. });//改变count原本的值,完成右侧商品的根据侧边栏的不同展示商品
  30. },
  31. })

商品详情页

商品详情页:wxml

  1. <view class="detail"><!--商品详情的大框架--><!---->
  2. <block wx:for="{{rightitem}}" wx:key="id" wx:if="{{number==index}}"><!--这个是拿商品分类页传递过来的数据(number)与这边商品的下标(index)进行比较,展现书商品分类页面选择的商品的详情-->
  3. <image class="shop_image" mode="widthFix" src="{{item.url}}" style="width: 750rpx;height: 750rpx;"></image><!--图片展示-->
  4. <view class="detail_box">
  5. <view class="detail_price"><!--这个是价格和商品名字的显示-->
  6. <text style="color: #c00000;font-size: 34rpx;">¥{{item.price}}.00</text><!--价格展示-->
  7. <text style="font-size: 34rpx;padding-top: 20rpx;">{{item.name}}</text><!--商品名称-->
  8. </view>
  9. <view class="detail_text"><!--这个是右边的那个分享,我这里是放了一张图片进行代替,没有开发这个功能-->
  10. <image src="/image/fenxiang.png" mode="widthFix" style="width: 130rpx;width: 60rpx;padding-right: 20rpx;"></image>
  11. </view>
  12. </view>
  13. <view class="detail_goods"><!--这个是商品详情的分隔-->
  14. <text>商品详情</text>
  15. </view>
  16. <view class="detail_image"><!--这个主要做的是底部的导航,主要是通过css属性完成的简易版导航-->
  17. <image mode="widthFix" src="{{item.good}}" style="width: 750rpx;width: 750rpx;margin-top: 20rpx;"></image><!--商品详情-->
  18. </view>
  19. </block>
  20. <view class="detail_button"><!--底部的商品导航-->
  21. <navigator class="button_message" url=""><!--消息图标部分-->
  22. <image src="/image/xiaoxi.png" class="button_image"></image>
  23. <text class="button_text">消息</text>
  24. </navigator>
  25. <navigator class="button_message" url=""><!--购物车图标部分-->
  26. <image src="/image/gouwuche.png" class="button_image"></image>
  27. <text class="button_text">购物车</text>
  28. </navigator>
  29. <view class="button button_one">加入购物车</view>
  30. <view class="button button_two">立即购买</view>
  31. </view>
  32. </view>

商品详情页:wxss

  1. /* pages/detail/detail.wxss */
  2. .detail{
  3. background-color:#e9e9e9;
  4. }
  5. .detail_button{
  6. display: flex;
  7. align-items: center;
  8. position: fixed;
  9. bottom: 0;
  10. background-color: white;
  11. height: 100rpx;
  12. width: 100%;
  13. }
  14. .button_image{
  15. width: 50rpx;
  16. height: 50rpx;
  17. }
  18. .button_text{
  19. font-size: smaller;
  20. }
  21. .button_message{
  22. display: flex;
  23. flex-direction: column;
  24. align-items: center;
  25. justify-content: center;
  26. width: 100rpx;
  27. }
  28. .button{
  29. flex: 1;
  30. text-align: center;
  31. padding: 20rpx;
  32. border-radius: 50rpx;
  33. margin: 0 20rpx;
  34. }
  35. .button_one{
  36. background-color: #ffa630;
  37. }
  38. .button_two{
  39. background-color: #ff2c3c;
  40. }
  41. .detail_box{
  42. display: flex;
  43. background-color: #fff;
  44. padding: 10rpx 0;
  45. padding-left: 20rpx;
  46. align-items: center;
  47. justify-content: space-between;
  48. }
  49. .detail_price{
  50. display: flex;
  51. flex-direction: column;
  52. }
  53. .detail_goods{
  54. background-color: #fff;
  55. line-height: 100rpx;
  56. text-align: center;
  57. font-weight: bold;
  58. margin-top: 20rpx;
  59. }

商品详情页:js

  1. // pages/detail/detail.js
  2. Page({
  3. /**
  4. * 页面的初始数据
  5. */
  6. data: {//数据的定义
  7. rightitem:[
  8. {id:1,name:"柚子",price:2,url:"/image/11.jpg",tag:0,good:"/image/1_1.jpg"},
  9. {id:2,name:"鸡装饰品",price:8,url:"/image/2.jpg",tag:1,good:"/image/cart_default.png"},
  10. {id:3,name:"钱包装饰品",price:10,url:"/image/21.jpg",tag:1,good:"/image/category_selected.png"}
  11. ],
  12. number:0
  13. },
  14. /**
  15. * 生命周期函数--监听页面加载
  16. */
  17. onLoad:function(options) {//接收商品分类页面传递的data值(传递的是index_two这个值,我们把这个值赋值给了data这个变量,所以这个吧接收到的是data)
  18. var data_two=options.data
  19. this.setData({
  20. number:data_two//把商品分类页面传递的值复制给number,方便wxml页面的调用
  21. });
  22. // console.log(this.data.number)
  23. },
  24. })

简单介绍

商品分类页面主要是通过三个盒子包裹,第一个是全局的大盒子,让第一个盒子包裹第二,第三个各种,第二个是侧边栏的盒子,第三个是商品展示的盒子。(具体的位置布局,主要是通过绝对定位,相对定位,这里我也使用了一个固定定位,不太清楚定位的,也可以点击学习,我觉得讲的蛮好理解的,css定位的学习)我们通过点击侧边栏来传递数据,让右边的商品展示根据左边的选择不同进行不同的展示。因为wx:for循环会产生下标,所以我们可以根据这个下标选择样式,传递数据。我写这个页面主要是通过这个方式来完成页面的展示。通过wxml中定义数据(data-,这种方式定义数据),获得循环产生的下标,然后传递到这个页面的js中,js中定义一个变量来接收wxml传递的值,下次就可以直接调用这个js变量。然后我通过wx.navigateTo函数,把商品分类页中商品的下标传递到商品详情页中(这个函数除了数据的传递,还有页面的跳转,具体的可以到微信小程序的官方文档中详细了解),在商品详情页的js中,通过onload函数中option参数拿到我们上一个页面传递的值。

商品详情页主要是由四部分构成,第一部分是商品的图片展示,第二个是价格和名字的展示,第三个是商品详情的展示,第四个是底部导航栏的展示。全局由一个大框架包裹,每一个部分都有一个盒子包裹。这个页面主要用的是弹性布局(display: flex)。这个页面,最顶部的图片展示,那个图片太大了,调了宽高,感觉还是没有用,现在我还是不知道该怎么调,如果要使用的话,最好能调整下。这个页面没有涉及数据的传递,只有接收数据加上简单的css布局。

结尾

最后,我在商品分类页加了一个tabbar,如果有需要的话,也可以使用下。这个是配置在全局的app.json文件中。还有一点,如果大家找不到适合的图标,我这里给大家分享一个图标网站

  1. "tabBar": {
  2. "list": [
  3. {
  4. "pagePath": "pages/index/index",
  5. "text": "首页",
  6. "iconPath": "image/home_default.png",
  7. "selectedIconPath": "image/home_selected.png"
  8. },
  9. {
  10. "pagePath": "pages/shopping/shopping",
  11. "text": "购物",
  12. "iconPath": "image/cart_default.png",
  13. "selectedIconPath": "image/cart_selected.png"
  14. },
  15. {
  16. "pagePath": "pages/my/my",
  17. "text": "我的",
  18. "iconPath": "image/user_default.png",
  19. "selectedIconPath": "image/user_selected.png"
  20. }
  21. ]
  22. },

希望这篇文章对你有帮助。如果这篇文章哪里出了问题,也希望各位大佬能在评论区中指正。

感谢你对这篇文章的阅读。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/769859
推荐阅读
相关标签
  

闽ICP备14008679号