美文网首页
菜单栏 scroll-view实现左右联动效果 锚点定位

菜单栏 scroll-view实现左右联动效果 锚点定位

作者: 潇潇芭蕉 | 来源:发表于2021-12-28 15:35 被阅读0次

    友侧根据左侧点击滑动到对应模块,左侧根据右侧滑动对应到相应标题,实现scroll-view滚动到某个view,左侧菜单相应会出现选中状态的效果


    微信图片_20211228154522.png
    <view class="container">
      <view class="category-left">
        <scroll-view scroll-y="true" style="height:100%">
          <block wx:for="{{category}}" wx:key="id">
           <view class="catgegory-item {{activeId === item.id?'active-item':''}}" id="{{item.id}}" bindtap="clickItem">{{item.name}}</view>
          </block>
        </scroll-view>
      </view>
      <view class="category-right">
    <!-- height建议动态获取如wx.getSystemInfoSync().windowHeight -->
        <scroll-view scroll-y="true" style="height:100%" scroll-into-view="{{toView}}" scroll-with-animation="ture" bindscroll="scroll">
          <view class="categoty-detail">
          <block wx:for="{{content}}" wx:key="id">
            <view class="catefory-main">
              <view class="category-title" id="{{item.id}}">{{item.title}}</view>
              <view class="category-content">
                  <view class="content-item" wx:for="{{item.options}}" wx:for-item="i" wx:key="id">
                    <image src="{{i.src}}"></image>
                    <text>{{i.text}}</text>                                                      
                  </view>
              </view>
            </view> 
          </block>
          </view>
        </scroll-view> 
      </view>
    </view>
    
    Page({
      data: {
        toView: 'a1',
        activeId: 'a1',
        category: [
          {name: '物品1', id: 'a1'},
          { name: '物品2', id: 'a2' },
          { name: '物品3', id: 'a3' },
          { name: '物品4', id: 'a4' },
          { name: '物品5', id: 'a5' },
          { name: "物品6", id: 'a6' },
          { name: '物品7', id: 'a7'},
          { name: '物品8', id: 'a8' },
        ],
        content: [
          {
            title: '- 物品1 -', 
            options: [
             { src: 'https://img1.baidu.com/it/u=3241726235,4137540402&fm=26&fmt=auto',id: '001',text: 're734'},
              { src: 'https://img1.baidu.com/it/u=3241726235,4137540402&fm=26&fmt=auto', id: '002', text: 'red73'},
              { src: 'https://img1.baidu.com/it/u=3241726235,4137540402&fm=26&fmt=auto', id: '003', text: '734'},
              { src: 'https://img1.baidu.com/it/u=3241726235,4137540402&fm=26&fmt=auto', id: '004', text: 're7349'},
              { src: 'https://img1.baidu.com/it/u=3241726235,4137540402&fm=26&fmt=auto', id: '005',text: 're7349'},
              { src: 'https://img1.baidu.com/it/u=3241726235,4137540402&fm=26&fmt=auto',id: '001',text: 're7349'},
              { src: 'https://img1.baidu.com/it/u=3241726235,4137540402&fm=26&fmt=auto', id: '002', text: 'red734'},
              { src: 'https://img1.baidu.com/it/u=3241726235,4137540402&fm=26&fmt=auto', id: '003', text: '7349f'},
              { src: 'https://img1.baidu.com/it/u=3241726235,4137540402&fm=26&fmt=auto', id: '004', text: 're7349'},
              { src: 'https://img1.baidu.com/it/u=3241726235,4137540402&fm=26&fmt=auto', id: '005',text: 're7349f'}
            ],
            id: 'a1'
          },
          {
            title: '- 物品2 -',
            options: [
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '006', text: '111111' },
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '007' ,text: '23r32rrr'},
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '008', text: '23r32rr'},
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '009',text: '23r32rrr'},
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '006', text: '23r32rrr'},
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '007', text: '23r32rrr'},
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '008', text: '23r32rrr'},
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '009', text: 'r23r32rr'},
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '007', text: '23r32rrr'},
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '008', text: '23r32rrr'},
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '009', text: '23r32rrr' },
            ],
            id: 'a2'
          },
          {
            title: '- 物品3 -',
            options: [
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '006', text: 'fhjksdh' },
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '007', text: 'fhjksdh' },
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '008', text: 'fhjksdh' },
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '009', text: 'fhjksdh' },
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '006', text: 'fhjksdh' },
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '007', text: 'rfhjksd'},
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '008', text: 'fhjksdh' },
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '009', text: 'fhjksdh' }
    
            ],
             id: 'a3'
          },
          {
            title: '- 物品4 -',
            options: [
              { src: 'https://img1.baidu.com/it/u=1017735198,80275548&fm=26&fmt=auto', id: '006', text: 'fhjksdh' },
            ],
            id: 'a4'
          },
          
     
        ],
      },
      onLoad: function () {
        this.setData({
          toView: 'a1',
          heightArr: []
        })
    //如是接口返回数据  此处可加一个定时器 不然会获取不到数据 
        let query = wx.createSelectorQuery();
        query.selectAll('.catefory-main').boundingClientRect((rect)=> {
          rect.forEach(res=> {
            //console.log(res.height)
            this.calculateHeight(res.height);
          })
        }).exec();
      },
        // 滚动长度
        calculateHeight(height) {
          if(!this.data.heightArr.length) {
            this.data.heightArr.push(height)
          }else {
            this.data.heightArr.forEach( => {
              height += res
            })
            this.data.heightArr.push(height);
          }
        },
      clickItem(e) {
        this.setData({
          activeId: e.currentTarget.id,
          toView: e.currentTarget.id
        })
      },
      scroll(e) {
        let scrollHeight = e.detail.scrollTop+5;
        let index = this.calculateIndex(this.data.heightArr,scrollHeight);
        this.setData({
          activeId: 'a'+index
        })
      },
      // 计算左边选中的下标
      calculateIndex(arr, scrollHeight) {
        let index= '';
        for(let i =0;i<arr.length;i++) {
          if (scrollHeight >= 0 && scrollHeight < arr[0]){
            index = 0;
          }else if(scrollHeight >= arr[i-1] && scrollHeight < arr[i]){
            index = i;
          }
        }
        return index+1;
      }
    })
    
    .container {
      padding: 0;
      width:100%;
      height: 100vh;
      display: flex;
      flex-direction: row;
      align-items: flex-start;
    }
    .category-left {
      height: 100%;
      width: 22%;
      padding: 0 20rpx;
      box-sizing: border-box;
      border-right: 1px solid #efefef;
    }
    .catgegory-item {
      padding: 20rpx 0;
      font-size: 30rpx;
      text-align:  center;
    }
    .active-item {
      color: orange;
    }
    .category-right {
      flex:1;
      height: 100%;
    }
    .category-content {
      display: grid;
      grid-template-columns: repeat(auto-fill, 190rpx);
    }
    .category-title {
      text-align: center;
    }
    .content-item {
      display: flex;
      flex-direction: column;
      padding: 20rpx;
      text-align: center;
      font-size: 30rpx;
    }
    .content-item image {
      width: 100%;
      height: 140rpx;
    }
    

    相关文章

      网友评论

          本文标题:菜单栏 scroll-view实现左右联动效果 锚点定位

          本文链接:https://www.haomeiwen.com/subject/ijppqrtx.html