微信小程序功能之全屏滾動效果的實現代碼
最近小編做項目遇到這樣的需求,要求實現一個全屏滾動的效果,在網上找了實例代碼,但是不是很完美,小編又結合自己的知識給大家補充下,對微信小程序全屏滾動效果的實例代碼感興趣的...
想做一個全屏滾動的效果,于是在網上找了一個差不多的例子,但是覺得有些地方不是很好,于是改進了一下;
先給大家展示下效果圖,感覺不錯,請參考實例代碼。

代碼:
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
- })
- })
- }
- },
- })
總結
以上所述是小編給大家介紹的微信小程序功能之全屏滾動效果的實現代碼,希望對大家有所幫助,也非常感謝大家的支持!
  - 微信小程序實現點贊、取消點贊,和多項點擊功能- 文章主要為大家詳細介紹了微信小程序實現點贊、取消點贊,和多項點擊功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下... 
  - 十款實用微信小程序推薦 好玩的微信小程序有哪些?- 現在微信小程序的種類非常多,這不僅省去我們下載軟件的麻煩,還可以節省手機的內存空間,那么,有什么微信小程序既好玩又實用的呢?小編今天就給大家介紹十款非常實用的小程序,記得收... 
  - 微信小程序群里有事使用方法 群里有事怎么用?- 相信很多小伙伴都有這樣的經歷,在微信群里發消息,通常只有群主才能@所有人發通知,普通用戶發通知很少被人看到。即便是群主,發布通知后也不知道哪些人看過,而且重要的通知以文字... 
  - 支付寶牌“小程序”也來了 對拼微信小程序- 就在微信“小程序”開發者們還在焦頭爛額,一頭霧水的時候,支付寶也殺入了戰場。近日,有多名互聯網行業從業者向鈦媒體記者透露,已經有支付寶的相關工作人員與他們取得聯系,討論的正是“小程序”的開發問題。“支付寶... 
  - 新的時代開啟 微信小程序的觀察與思考- 一、關于小程序的“入口”小程序可在微信聊天頁面中置頂,可添加到桌面。但如果是在聊天頁面中置頂,只能置頂一個小程序。以及,在“發現”Tab中,也有“小程序”入口——這還是出乎不少人意料的。目前來看,這個入口有... 
  - 微信小程序上手體驗:沒有比這個更全的了- 2017年1月9日,是一個值得載入互聯網史冊的日子。這一天,零點剛過,張小龍和他的團隊,在夜色籠罩下,正式發布了微信小程序。所以,從這一刻開始,只要有開發者登錄小程序后臺,并在「開發管理」頁面點擊了「發布」按鈕,就會有... 
  - 微信小程序在哪里打開?目前已經有100多小程序可以使用- 今天你的朋友圈肯定被小程序刷屏了。 我在A5創業網后臺搜一下,一天內有關小程序的言論要趕上不知名品牌動態一年的了。 這絕對是有點風吹就草翻天的主兒!... 
  - 微信小程序開放公測 做好這4件事搶占先機- 昨天晚上,微信公眾平臺發布公告,宣布微信小程序正式開放公測。此次小程序公測允許開發者將產品提交至微信公眾平臺審核,但是暫時不支持發布,也就是說普通消費者若想體驗小程序,還需要等待一段時間。什么人可... 
  - 微信小程序為何突然火了?微信小程序的發展趨勢- 未來的某一天,你在微信上遇見一個妹子,兩人一見如故,相見恨晚,立馬約好第二天一塊出去玩。這時,你只需要打開微信自帶的小程序,就可以為妹子預定好第二天的專車、預約好第二天的午餐,下午的游樂場,甚至…... 
  - 微信小程序:只是開發者的良藥,而非“一切App”的毒藥- 昨晚打開微信朋友圈,關于微信小程序發布內測邀請函的消息漫天飛舞。今天一早翻閱新聞,各大媒體也紛紛表示看好微信應用號,有些媒體甚至揚言微信應用號將殺死一切App,大量的App都將會被用戶卸載。不可否認,微... 

