マイクロチャネルアプレットカテゴリーサイドバー結果を達成するためuniapp

はじめに:コードは、マイクロチャネルはほとんど差uniappネイティブコードで実現、コードの構文はuniappのscrollviewのswiperとネイティブコードを達成実装と比較することができますアプレット。

参考文献:

アプレット>>マイクロチャネルAPI https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html

距離取得要素/トップアセンブリ>> https://www.jianshu.com/p/fe72cff2b808

簡単なデモ>>達成swiper https://blog.csdn.net/weixin_41599291/article/details/93650074を

達成するための機能:

左に対応するスクロール右は、強調表示されます。

かどうかは、クリック、左、右のサイドショー対応するデータ、トップを繰り返し、

レンダリング:

    

コード:

<テンプレート> 
    <ビュー> 
        <ビュースタイル= "テキスト整列:センター;">搜索栏</ビュー> 
        <ビュークラス= 'productNav'> 
          <ビュークラス= '左'> 
            <ビュー:クラス= "POSI == +インデックス'ID' '選択': '正常'、」タップ@ = 'switchNav( "ID" +指数、指数)' V- ためのデータリストで(項目、指数)= ""キー= "インデックス"> { {item.name}} </ビュー> 
          </ビュー> 
          <ビュークラス=「右」> 
            <スクロールビュースクロールY =「真」クラス=「スクロール」@スクロール=「スクロール」:スクロールにビュー= "POSI":スクロール・トップ= "scrollTopスプライト"> 
                <ビュー:ID = V- "item.id" のため "データリストで(項目、インデックス)" =:キー= "インデックス">  
                    <ビュークラス= "タイトル"> {{item.name}} </ビュー>を
                    <ビューV- ためにためitem.name、{} {} {} {}サブアイテム</表示>:キー= "I" = "item.numに(サブアイテム、I)"> 
                </ビュー> 
            </スクロール表示> 
          < / [表示]> 
        </ビュー> 
    </ビュー> 
</テンプレート> 

<スクリプト> 
    エクスポートデフォルト{ 
        データ(){ 
            リターン{ 
                ポジ: '' 
                scrollTopスプライト: 0 
                データ:[ 'あなたのためのお勧め'、 'コンピュータ'、「電話''美「]、// アナログデータ 
                のDataList:[]、// サイクリックデータ 
                dataEleHeight:[] //配列データの各要素の高さを取得し
                ほん:[] // の各要素の上面から計算 
                scrollHeight:500 // スクロール領域の高
            } 
        } 
        のonLoad(){ 
            // 要求データに対応した初期化データ
            のための(I = 0せ; I <  .data.length; I ++ ){ 
                せRAND =のparseInt(Math.random()* 100,10 ); 
                せNUM = []
                 のため(LET J = 0; J <RAND; J ++ ){ 
                    num.push(J)。
                } 
                OBJ LET = {
                    ID: 'ID' + I、
                    名前:この.DATA [I]、
                    NUM:NUM 
                } 
                IF(I == 0 ){
                     この .posi = obj.id 
                } 
                この.dataList.push(OBJ)
            } 
        }、
        時計: { 
            dataEleHeight(ヴァル){ 
                IF(== val.length この.dataList.length){
                     // 判定は、いくつかの要素の第一、及び前の高さに素子高さ 
                    せてトップ= 0 のIせ(、この
                     .dataEleHeight){
                         IF式(I> = 0 && I < .dataEleHeight.length){
                             場合(I = 0!){ 
                                トップ + = この .dataEleHeight [I-1 ] .height 
                            } 
                            この.topList.push(上部)
                        } 
                    } 
                } 
                はconsole.log(この.topList)
            } 
        }、
        {)(搭載
            つまりせ = この
            ため(I = 0せ; iが< この .dataList.length; I ++ ){
                 // 要素のプロパティを取得し、好ましくはヌル取得避けるために、レンダリング後に実行される 
                )uni.createSelectorQueryを(この).Select( '#' + この .dataList [I] .ID ).boundingClientRect(関数(RECT){ 
                    LET OBJ = { 
                        ID:that.dataList [I] .ID、
                        高さ:rect.height 
                    } 
                    that.dataEleHeight.push(OBJ); 
                })Execの();. 
            } 
        }、
        方法:{ 
            スクロール(E){ 
                LETインデックス = .posi.substring(2// 判断e.detail.scrollTop在哪个范围、就高亮显示哪个分类
                ため(Iせにおける ).topList {
                     場合(I <  .topList.length - 1 && この .topList [I] <= E .detail.scrollTop && e.detail.scrollTop <  .topList [のparseInt(I)+ 1 ]){
                         この .posi = この.dataList [I] .ID
                         ブレーク
                    } 
                    もし(I ==  .topList.length - 1 ){
                         この .posi = この.dataList [I] .ID 
                    } 
                } 
                この .scrollTop = e.detail.scrollTop // メニューデータは、同じ問題が繰り返され、右クリックを解く
            }、
            switchNav:機能(E、インデックス){
                 IFこの!= .posi E){
                     この .posi = E 
                } {
                     // 非常に始まる位置ターゲットにするよう繰り返しクリック
                    この .scrollTop = この.topList [インデックス]; 
                } 
            } 
        } 
    }
 </ SCRIPT> 

<スタイル>
    .productNav {
      表示:フレックス。
      フレックス - 方向:行。
      フォント -family: "微軟雅黒" 
    } 
    .LEFT { 
      幅: 25% 
      フォント - サイズ:30rpx。
      背景 - 色:#f4f4f4; 
    } 
    .LEFTビュー{ 
      テキスト - 整列:センター; 
      高さ:90rpx。 - 高さ:90rpx。
    } 
    .selected { 
      背景 - 色:#FFF。
      国境 - 左:2ピクセル固体#E54847。
      フォント -重量:太字; 
      色:#E54847。
    } 
    .normal { 
      背景 - 色:#f4f4f4。
      国境 - 下:1pxの固体#1 f2f2f2; 
    } 
    .RIGHT { 
      幅: 75% 
      マージン: 0 ; 
    } 
    .scroll { 
      高さ:500pxなど。
      テキスト - 整列:センター; 
    } 
    .TITLE { 
        背景:#E54847。
        色:白; 
    }
 </スタイル>

クレーターは:(I LETのthis.topList中)のために   、私は  デジタル演算処理を実行する際に、文字列に属する転送する必要がありますint型

おすすめ

転載: www.cnblogs.com/lightmusic/p/11890667.html