最近開發小程序的時候遇到這樣一個需求:如圖1
頁面向下滾動到白色導航的位置時,白色導航固定到頁面最上方;當頁面向上滾動到白色導航時,白色導航恢復到原始位置;點擊各個導航,平滑的跳到相應位置。
思路1: 1.給導航設置position: absolute; 頁面向下滾動到白色導航的位置時,將給導航設置為position: fixed; 2.綁定小程序滾動事件bindscroll,監聽滾動距離; 代碼如下: wxml: <scroll-view class="layout" bindscroll='layoutScroll' scroll-y="true" > <view class='banner'> <text>我是一個banner</text> </view> <!-- 導航開始 --> <view class='nav clearfix {{navFixed?"positionFixed":""}}'> <view class='nav_row'> <text>導航1</text> </view> <view class='nav_row'> <text>導航2</text> </view> <view class='nav_row'> <text>導航3</text> </view> <view class='nav_row'> <text>導航4</text> </view> </view> <!-- 導航結束 --> <!-- 內容開始 --> <view class='content content1'> <text>我是內容1</text> </view> <view class='content content2'> <text>我是內容2</text> </view> <view class='content content3'> <text>我是內容3</text> </view> <view class='content content4'> <text>我是內容4</text> </view> <!-- 內容結束 --> </scroll-view>
wxss: .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .positionFixed{ position: fixed; left: 0; top: 0; } page{ width: 100%; height:100%; } .layout{ width: 100%; height: 100%; background: #eee; } .banner{ width: 100%; height: 200px; line-height: 200px; background: #FFB11A ; } .banner text{ text-align: center; display: block; } .nav{ width: 100%; height: 45px; line-height: 45px; background: #fff; } .nav_row{ float: left; width: 25%; font-family: PingFangSC-Light; font-size: 16px; color: #333333; } .nav_row text{ text-align: center; display: block; } .content { width: 100%; height: 200px; font-family: PingFangSC-Light; font-size: 16px; color: #333333; padding: 15px; } .content1{ background: #F5BBA4; } .content2{ background: #E9ED9A; } .content3{ background: #9DE59C; } .content4{ background: #98A5E2; }
js: Page({ data: { scrollTop:'', //滑動的距離 navFixed:false, //導航是否固定 }, //頁面滑動 layoutScroll: function (e) { this.data.scrollTop = this.data.scrollTop * 1 + e.detail.deltaY * 1; console.log(this.data.scrollTop) console.log(this.data.navFixed) if (this.data.scrollTop <= -200){ this.setData({ navFixed:true }) }else{ this.setData({ navFixed: false }) } } })
這個代碼能基本實現需求,但是存在很大的弊端: 1.導航固定后,頁面卡頓一下 2.導航效果延遲較長,用戶體驗很差 總體來說這種方案并不可取,所以進行第二次迭代
思路2: 未完待續。。。
注意: 1.整個滑動的頁面應該寫在scroll-view中; 2.scroll-view一定 |