1. 程式人生 > >微信小程式的左右列表聯動

微信小程式的左右列表聯動

效果圖:

直接上程式碼:

wxml介面:

<view class='header'>

<text class='headerClass'>分類</text>

<text class='headerPin'>/品牌</text>

<view class="search">

<image src='/images/搜尋.png'></image>

<text>搜尋商品</text>

</view>

</view>

<view class='main'>

<view class='left'>

<scroll-view scroll-y="true" style="height: 1100rpx" scroll-into-view="true" scroll-with-animation="true">

<block wx:for="{{leftText}}" wx:for-list="item">

<view class="{{classfiySelect == item.id?'active':''}}" data-id='{{item.id}}' bindtap='left_list'>

<text>{{item.text1}}</text>

</view>

</block>

</scroll-view>

</view>

<view class='right'>

<scroll-view scroll-y="true" style="height: 1100rpx" bindscroll="scroll" scroll-top="{{scrollTop}}" scroll-into-view="{{'inToview'+rigId}}" scroll-with-animation="true">

<block wx:for="{{rightData}}" wx:for-list="item">

<view class='itemTitle' id="{{'inToview'+item.id}}">{{item.title}}</view>

<view bindtap='particulars' class='listItem' data-id='{{item.id}}'>

<block wx:for="{{item.frist}}">

<view class='listItem2' data-text="{{}}">

<view class='img'>

<image src='{{item.url}}'></image>

</view>

<view class='listText'>

<text>{{item.text}}</text>

<text class='money'>¥{{item.money}}</text>

<view>

<text>已售{{item.sum}}</text>

<button size='mini' bindtap='particulars'>立即搶購</button>

</view>

</view>

</view>

</block>

</view>

</block>

</scroll-view>

</view>

</view>

js介面:

// pages/class/class.js
Page({

  /**
   * 頁面的初始資料
   */
  data: {
    classfiySelect: "",
    leftText: [{
        id: "01",
        text1: "美妝專區",
      },
      {
        id: "02",
        text1: "面部清潔",
      },
      {
        id: "03",
        text1: "洗護專區",
      },
      {
        id: "04",
        text1: "面膜",
      },
      {
        id: "05",
        text1: "口紅",
      },
      {
        id: "06",
        text1: "美妝專區",
      },
      {
        id: "07",
        text1: "面部清潔",
      },
      {
        id: "08",
        text1: "洗護專區",
      },
      {
        id: "09",
        text1: "面膜",
      },
      {
        id: "010",
        text1: "口紅",
      },
      {
        id: "011",
        text1: "美妝專區",
      },
      {
        id: "012",
        text1: "面部清潔",
      },
      {
        id: "013",
        text1: "洗護專區",
      },
      {
        id: "014",
        text1: "面膜",
      },
      {
        id: "015",
        text1: "口紅",
      },
      {
        text1: "美妝專區",
      },
      {
        text1: "面部清潔",
      },
      {
        text1: "洗護專區",
      },
      {
        text1: "面膜",
      },
      {
        text1: "口紅",
      },

    ],
    rightData: [{
        id: "01",
        title: "美妝專區",
        frist: [{
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
            id:1,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
            id: 2,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
        ],
      },
      {
        id: "02",
        title: "面部清潔",
        frist: [{
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
        ],
      },
      {
        id: "03",
        title: "洗護專區",
        frist: [{
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
        ],
      },
      {
        id: "04",
        title: "面膜",
        frist: [{
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
        ],
      },
      {
        id: "05",
        title: "口紅",
        frist: [{
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
        ],
      },
      {
        id: "06",
        title: "美妝專區",
        frist: [{
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
          {
            url: "/images/85309.jpg",
            text: "卡姿蘭補水套裝",
            money: 200,
            sum: 20,
          },
        ],
      },
    ],
  },

  /**
   * 生命週期函式--監聽頁面載入
   */
  onLoad: function(options) {
    this.setData({
      classfiySelect: this.data.leftText[0].id
    })
  },

  /**
   * 生命週期函式--監聽頁面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命週期函式--監聽頁面顯示
   */
  onShow: function() {

  },

  /**
   * 生命週期函式--監聽頁面隱藏
   */
  onHide: function() {

  },

  /**
   * 生命週期函式--監聽頁面解除安裝
   */
  onUnload: function() {

  },

  /**
   * 頁面相關事件處理函式--監聽使用者下拉動作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 頁面上拉觸底事件的處理函式
   */
  onReachBottom: function() {

  },

  /**
   * 使用者點選右上角分享
   */
  onShareAppMessage: function() {

  },
  //滾動觸發
  scroll: function(e) {
    var scrollTop = e.detail.scrollTop,
      h = 0,
      classfiySelect;
    var that = this;
    that.data.leftText.forEach(function(clssfiy, i) {
      var _h =26 + that.length(clssfiy['id'])*102;
      if (scrollTop >= h){
        classfiySelect = clssfiy['id'];
      }
      h +=_h;
      console.log(h);
    })
    that.setData({
      classfiySelect: classfiySelect,
    })
  },
  //求每一欄高度
  length: function(e) {
    var that = this;
    var rightData = that.data.rightData;
    for (var i = 0; i < rightData.length; i++) {
      if(rightData[i]['id']==e){
        return rightData[i]['frist'].length;

      }
    }
  },
  //點選左邊事件
  left_list: function(e) {
    var that = this;
    var l_id = e.currentTarget.dataset.id;
    that.setData({
      rigId: l_id,
    })
  },
  //跳轉詳情介面
  particulars:function(e){

  }
})

wxss介面:

.header{
  display: flex;
  background-color: rgba(219, 219, 221, 0.884);
  align-items: center;
  height: 60rpx;
}
.active{
  color: red;
}
.header .headerClass{
  color: red;
  margin-left: 20rpx;
}
.header .headerClass,
.header .headerPin{
  font-size: 28rpx;
}
.search{
  display: flex;
  height: 46rpx;
  border-radius: 20rpx;
  margin-left: 30rpx;
  background-color:white;
  width: 70%;
}
.search text{
  color: gainsboro;
  font-family: monospace;
  font-size: 30rpx;
  line-height: 46rpx;
    
}
.search image{
  padding-left:50rpx; 
  width: 46rpx;
  height: 46rpx;
}
.main{
  display: flex;
}
.left{
  width: 25%
}
.left view{
  padding-top: 30rpx;
  text-align: center;
}
.right{
  width: 75%;  
}

.listItem2{
  display: flex;
}
.listItem .img{
  width: 200rpx;
  height: 200rpx;
  text-align: center;
  padding-top: 10rpx;
}
.listItem .img image{
  width: 80%;
  height: 80%
}
.itemTitle{
  font-size: 32rpx;
  padding-left: 20rpx;
  padding-top: 10rpx;
  color:gray;
}
.listItem .listText{
  display: flex;
  flex-direction: column;
  margin-top: 6rpx;
}
.listItem .listText view{
  display: flex;
  align-items: flex-end;
}
.listItem .listText text{
  font-size: 34rpx;
  margin-top: 10rpx;
}
.listItem .listText .money{
  color: red;
}
.listItem .listText view text{
  font-size: 28rpx;
  color :silver;
  margin-right: 60rpx;
}
.listItem .listText view button{
  background-color: red;
  color: white;
  padding-right: 8px;
  padding-left: 8px;
  padding-top: 0px;
}
::-webkit-scrollbar
{
width: 6px;
height: 6px;
background-color: #ffffff;
} 
::-webkit-scrollbar-track{
  height: 20rpx;
  color: black;
}