小程序功能之全屏滾動


想做一個全屏滾動的效果,於是在網上找了一個差不多的例子,但是覺得有些地方不是很好,於是改進了一下;

原文:https://blog.csdn.net/W_SSNY/article/details/84298788

先上效果:

 

代碼:

wxml:

   <!-- 第一頁 -- >
  <
view id='hook1' class="section section01 {{scrollindex==0?'active':''}}" style='background:red' bindtouchstart="scrollTouchStart" bindtouchmove='scrollTouchMove' bindtouchend="scrollTouchEnd"> <view class='cont'> <view class='cont-body'> <view>one</view> </view> </view> </view> <!-- 第二頁 --> <view id='hook2' class="section section02 {{scrollindex==1?'active':''}}" style='background:pink' bindtouchstart="scrollTouchStart" bindtouchmove='scrollTouchMove' bindtouchend="scrollTouchEnd"> <view class='cont'> <view class='cont-body'> <view>two</view> </view> </view> </view> <!-- 第三頁 --> <view id='hook3' class="section section03 {{scrollindex==2?'active':''}}" style='background:blue' bindtouchstart="scrollTouchStart" bindtouchmove='scrollTouchMove' bindtouchend="scrollTouchEnd"> <view class='cont'> <view class='cont-body'> <view>three</view> </view> </view> </view> <!-- 第四頁 --> <view id='hook4' class="section section04 {{scrollindex==3?'active':''}}" style='background:green' bindtouchstart="scrollTouchStart" bindtouchmove='scrollTouchMove' bindtouchend="scrollTouchEnd"> <view class='cont'> <view class='cont-body'> <view>foure</view> </view> </view> </view>

 

wxss:

page { height: 100%; background: fff; color: #282828; } .container { flex: 1; flex-direction: column; box-sizing: border-box; padding: 0; align-items: initial; justify-content: first baseline; } .container-fill { height: 100%; overflow: hidden; } .scroll-fullpage { height: 100%; } .section { height: 100%; } .cont { width: 100%; height: 100%; margin: 0 auto; position: relative; } .cont .cont-body { width: 75%; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); }

 

js:

Page({ /** * 頁面的初始數據 */ data: {   scrollindex: 0, // 當前頁面的索引值     totalnum: 4, // 總共頁面數     starty: 0, // 開始的位置x     startTime: 0, // 開始的時間戳     endy: 0, // 結束的位置y     endTime: 0, // 結束的時間戳     critical: 80, // 觸發翻頁的臨界值     maxTimeCritical: 300, // 滑動的時間戳臨界值上限     minTimeCritical: 100, // 滑動的時間戳臨界值下限     margintop: 0, // 滑動下拉距離    currentTarget: null, // 當前點擊的元素的id  }, scrollTouchStart: function(e) { let py = e.touches[0].pageY, stamp = e.timeStamp, currentTarget = e.currentTarget.id; console.log(py); this.setData({ starty: py, startTime: stamp, currentTarget: currentTarget }) }, scrollTouchMove(e) { // console.log(e);  }, scrollTouchEnd: function(e) { let py = e.changedTouches[0].pageY, stamp = e.timeStamp, d = this.data, timeStampdiffer = stamp - d.startTime; this.setData({ endy: py, endTime: stamp }) console.log('開始:' + d.starty, '結束:' + e.changedTouches[0].pageY); console.log('時間戳之差: ' + timeStampdiffer); if (timeStampdiffer <= d.maxTimeCritical && timeStampdiffer > d.minTimeCritical && (d.starty > e.changedTouches[0].pageY)) { let currentTarget = parseInt(d.currentTarget.slice(4)), nextTarget = currentTarget + 1; const query = wx.createSelectorQuery(); query.select(`#hook${nextTarget}`).boundingClientRect(); query.selectViewport().scrollOffset(); query.exec(function (res) { // console.log(res);      if (res[0] != null) { wx.pageScrollTo({ scrollTop: res[0].height * currentTarget, }) } })   } else if (timeStampdiffer <= d.maxTimeCritical && timeStampdiffer > d.minTimeCritical && (d.starty < e.changedTouches[0].pageY)) { // 下拉 let currentTarget = parseInt(d.currentTarget.slice(4)), preTarget = currentTarget - 2 == -1 ? 0 : currentTarget - 2;   const query = wx.createSelectorQuery();   query.select(`#hook1`).boundingClientRect();   query.selectViewport().scrollOffset();   query.exec(function (res) {   console.log(res);   wx.pageScrollTo({   scrollTop: res[0].height * preTarget   })   })   }  }, })

 

 

 

  如有錯誤的地方歡迎指正~,共勉。

 


免責聲明!

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



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