微信小程序開發實戰(1):使用滾動視圖


本文主要介紹了滾動視圖組件(scroll-view)的各種常用功能,例如,垂直和水平滾動、滾動事件等,並通過例子代碼來演示這些功能的使用方法。
 
1. 垂直滾動視圖
  scroll-view是容器組件,如果該組件的子組件超過scroll-view的高度或寬度,該組件會允許子組件在垂直或水平方向滾動視圖,以便顯示其他沒有顯示的子組件。本節主要介紹如何讓scroll-view垂直滾動。
如果要讓scroll-view垂直滾動,需要設置scroll-y屬性值為true。例如,下面的布局代碼,將scroll-view組件的高度設為200px,里面的每一個子view的高度也是200px,而且放了4個子view。這樣scroll-view就允許滾動而現實其他的子view了。
<view>
       <view class="section__title">垂直滾動</view>
       <scroll-view scroll-y="true" style="height: 200px;" >
           <view id="green" class="scroll-view-item bc_green"></view>
           <view id="red"  class="scroll-view-item bc_red"></view>
           <view id="yellow" class="scroll-view-item bc_yellow"></view>
           <view id="blue" class="scroll-view-item bc_blue"></view>
       </scroll-view>
 </view>
 當上下滾動是,效果如圖1所示。
圖1 scroll-view垂直滾動的效果
   scroll-view滾動條的初始位置為0,也就是在最上端,如果要改變滾動條的默認位置,需要設置scroll-top屬性,該屬性默認的屬性值為0,也就是滾動條在最頂端。如果該屬性值不為0,滾動條會向下滾動(該屬性值需大於0)。下面的布局代碼設置了scroll-top屬性的值是60。
 
<scroll-view scroll-y="true" style="height: 200px;" scroll-top="60">
   … …
</scroll-view>
 顯示效果如圖2所示,很明顯,在沒有滾動的情況下,紅色的子view顯示了一部分(正好是60px)。

  圖2 設置scroll-top屬性的效果

 
  如果想讓scroll-view一開始就滾動到某一個子視圖,需要使用scroll-into-view屬性,該屬性需要指定一個子視圖的id。例如,下面的布局代碼設置了scroll-into-view屬性的值為yellow,也就是說,當系統裝載scroll-view組件時,會直接滾動到第3個子組件yellow。如果同時設置了scroll-top和scroll-into-view屬性,后者的優先級更高。
<scroll-view scroll-y="true" style="height: 200px;"  bindscrolltoupper="upper" bindscrolltolower="lower"  upper-threshold="100" lower-threshold="300" bindscroll="scroll" scroll-top="100"  scroll-into-view="yellow" >
    … …
</scroll-view>
2. 水平滾動視圖
如果想讓scroll-view水平滾動,那么需要設置scroll-x屬性為true,布局代碼如下:
<view>
     <view class="section__title">水平滾動</view>
     <scroll-view class="scroll-view_H" scroll-x="true" style="width: 100%">
         <view id="green" class="scroll-view-item_H bc_green"></view>
         <view id="red"  class="scroll-view-item_H bc_red"></view>
         <view id="yellow" class="scroll-view-item_H bc_yellow"></view>
         <view id="blue" class="scroll-view-item_H bc_blue"></view>
     </scroll-view>
 </view>

 其中scroll-view_H樣式的代碼如下:

.scroll-view_H{
    white-space: nowrap;
}
顯示效果如圖3所示。

 圖3 scroll-view水平滾動的效果

 

如果要讓滾動條默認停留在其他位置,需要設置scroll-left屬性,例如,下面的布局代碼將scroll-left屬性的值設為50。
<scroll-view class="scroll-view_H" scroll-x="true"  scroll-left="50" style="width: 100%">
    … …
</scroll-view>

顯示效果如圖4所示。

 圖4 設置scroll-left屬性的效果

 
3. 滾動到邊緣觸發事件
 
  scroll-view組件提供了一些事件,其中當滾動條滾動到最上端或最下端(垂直滾動),或滾動到最左端或最右端(水平滾動),會分別觸發兩個事件,這兩個事件分別用bindscrolltoupper和bindscrolltolower屬性指定。這兩個屬性需要指定事件對應的函數名稱。例如,下面的布局代碼包含了兩個scroll-view組件,上面的是垂直滾動,下面的是水平滾動。
 <view>
         <view class="section__title">垂直滾動</view>
         <scroll-view scroll-y="true" style="height: 200px;"   bindscrolltoupper="upper" bindscrolltolower="lower" >
            <view id="green" class="scroll-view-item bc_green"></view>
            <view id="red"  class="scroll-view-item bc_red"></view>
            <view id="yellow" class="scroll-view-item bc_yellow"></view>
            <view id="blue" class="scroll-view-item bc_blue"></view>
        </scroll-view>
 
         <view class="section__title">水平滾動</view>
         <scroll-view class="scroll-view_H" scroll-x="true"  scroll-left="50" style="width: 100%"
             bindscrolltoupper="upper" bindscrolltolower="lower" >
                 <view id="green" class="scroll-view-item_H bc_green"></view>
                 <view id="red"  class="scroll-view-item_H bc_red"></view>
                 <view id="yellow" class="scroll-view-item_H bc_yellow"></view>
                 <view id="blue" class="scroll-view-item_H bc_blue"></view>
         </scroll-view>
 </view>
  在上面的布局代碼中,bindscrolltoupper指定了upper方法,而bindscrolltolower指定了lower方法。這兩個方法需要在index.js文件中實現,代碼如下:
 var app = getApp()
 Page({
    … …
   upper: function(e) {
     console.log(e)
   },
   lower: function(e) {
     console.log(e)
   },
 })
 在這兩個方法中簡單地輸出了參數e。當水平或垂直滑動滾動條時,系統會根據滾動條的位置觸發相應的事件。例如,圖5所示是垂直滾動到最低端,然后再滾動到最頂端,水平滾動先滾動到最后端,然后再滾動到最左端的輸入日志。

 圖5 滾動到邊緣的輸出日志

 

那么,還有一個問題,系統是如何判定時候滾動到了邊緣的呢?其實這是通過另外兩個屬性來判定的,這兩個屬性是upper-threshold和lower-threshold。這兩個屬性的默認值是50,這個值差不多是滾動條的長度。在默認情況下,當滾動條的一端剛一接觸上、下、左、右邊緣時就會觸發相應的事件。如果要改變這兩個屬性的默認值,那么滾動條可能會滾動到其他的位置才會觸發相應的事件。例如,下面的代碼設置了upper-threshold屬性的值為100,lower-threshold屬性的值為300。
<scroll-view scroll-y="true" style="height: 200px;"   bindscrolltoupper="upper" bindscrolltolower="lower"  upper-threshold="100" lower-threshold="300">
    … …
</scroll-view>
對於垂直來說,在默認情況下,滾動條會處在如圖6所示的位置,才會觸發下邊緣滾動事件。不過如果lower-threshold屬性的值是300,那么滾動條會在如圖7所示的位置就會觸發下邊緣滾動事件。

 圖6  lower-threshold屬性為默認值時觸發下邊緣滾動事件的位置

 圖7  lower-threshold屬性為300時觸發下邊緣滾動事件的位置

 

4  滾動事件
 
scroll-view除了可以監控滾動條處在邊緣的事件,還可以實時監控滾動條滾動的狀態,這就是滾動事件,使用bindscroll屬性設置,該屬性的值是滾動事件對應的函數名。例如,下面的代碼設置bindscroll屬性值為scroll。
<scroll-view class="scroll-view_H" scroll-x="true"  scroll-left="50" style="width: 100%"
     bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" >
         <view id="green" class="scroll-view-item_H bc_green"></view>
         <view id="red"  class="scroll-view-item_H bc_red"></view>
         <view id="yellow" class="scroll-view-item_H bc_yellow"></view>
         <view id="blue" class="scroll-view-item_H bc_blue"></view>
 </scroll-view>
當滾動條水平或垂直滾動時,會不斷觸發滾動事件,並調用scroll函數,該函數的代碼如下:
scroll:function(e)
{
   console.log(e.detail)
}
通過e參數中的detail屬性,可以獲得與滾動相關的信息。detail屬性可以提供如下6個值。
  • scrollLeft:水平滾動時滾動條當前的位置,在垂直滾動時該值為0。
  • scrollTop:垂直滾動時滾動條當前的位置,在水平滾動時該值為0。
  • scrollHeight:垂直滾動時所有子視圖的總高度(包括子視圖之間的間距),在水平滾動時,該值是scroll-view組件的高度。
  • scrollWidth:水平滾動時所有子視圖的總寬度(包括子視圖之間的間距)。在垂直滾動時,該值是scroll-view組件的寬度。
  • deltaX:水平滾動時的增量,也就是從當前滾動條的位置移動到新位置的距離。從左向右水平移動,該值小於0,從右向左水平移動,該值大於0。通過該屬性值可以判斷水平移動的方向。
  • deltaY:垂直滾動時的增量,也就是從當前滾動條的位置移動到新位置的距離。從上到下垂直移動,該值小於0,從下向上垂直移動,該值大於0。通過該屬性值可以判斷垂直移動的方向。
圖8是垂直和水平滾動時觸發滾動事件輸出的日志信息,其中也包含滾動到邊緣輸出的日志信息。

 圖8  滾動時輸出的日志

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM