当社は、マイクロチャネル・コンタクト・ナビゲーションの効果に似たプロジェクトを行い、適切な場所に右の手紙のページスクロールをクリックします。
アプレットなしDOMマイクロチャネルの概念は、アンカーを使用することはできませんので、直接文字に対応するページオフセット位置を取得することはできません。この場合、唯一のノード情報を取得するには、オブジェクトのインスタンスのAPIを作成する小さなプログラムを使用します。
クエリ= wx.createSelectorQueryをしましょう()。で(この); 。query.selectViewport()scrollOffset() query.select( "#Nav" ).boundingClientRect(); query.select( "#FilterNav" ).boundingClientRect(); query.select( "#" +((文字== '#') '他'? :レター))boundingClientRect();。 query.exec(関数(RES){ せscrollTopスプライト = 0 ; もし(RES [3 ]){ scrollTopスプライト = RES [0] .scrollTop + RES [3 ] .top } 他{ scrollTopスプライト = RES [0 ] .scrollTop; } wx.pageScrollTo({ scrollTopスプライト:scrollTopスプライト - RES [1] .height - RES [2 ] .height、 持続時間: 300 }); });
コードの意味を説明します。
1.は、ノードオブジェクトを作成しますwx.createSelectorQuery()返回一个对象实例;
2.表示エリアを選択します。
3.コール選択方法は、ノードのID値を渡し、それが同じノード・オブジェクトに複数回呼び出され、最後にスクロール領域上記ページ画像の上からの結果の配列を(返しすることができる2つのナビゲーション・バーの高さの距離であるので、クエリ2ナビゲーションバー)。
4.exec()コールバックメソッドは、クエリ内のすべてのノードに関する情報を取得することができ、第一の配列の位置情報ページ(スクロール距離)、取得した最上位ノードの値は、画面の上部の文字位置に対してノードに対応します
結果:画面の高さの相対距離の手紙ノードからページのスクロール位置= +ページスクロール - ヘッドナビゲーションバーの高さ - メニューバーの高さ
wx.pageScrollTo()APIは、ページをスクロールするために呼び出します
コンテナが指定した場所にスクロールにスクロールする場合は、位置を計算少し異なるものになります。
var query = wx.createSelectorQuery().in(this); query.select("#swiper").boundingClientRect(); query.select("#"+ letter).fields({ rect:true,scrollOffset:true }); query.selectViewport().scrollOffset() query.exec((res)=>{ _this.setData({ letterScrolltop: res[1].top - res[0].top }) });
上图因为是弹出框里的内容,所以列表放在scroll-view滚动容器中,和上面不一样的是滚动位置是:滚动容器距离页面顶部距离 - 锚点距离页面顶部距离,将计算后的偏移量修改至对应scroll-view容器的scroll-top属性就行了。