微信小程序功能之全屏滚动效果的实现代码
2018-12-04 21:09:55
来源:
愫幕
最近小编做项目遇到这样的需求,要求实现一个全屏滚动的效果,在网上找了实例代码,但是不是很完美,小编又结合自己的知识给大家补充下,对微信小程序全屏滚动效果的实例代码感兴趣的朋友参考下本文吧
想做一个全屏滚动的效果,于是在网上找了一个差不多的例子,但是觉得有些地方不是很好,于是改进了一下;
先给大家展示下效果图,感觉不错,请参考实例代码。

代码:
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,// 开始的位置xstartTime: 0,// 开始的时间戳endy: 0,// 结束的位置yendTime: 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,})}})}elseif(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})})}},})
总结
以上所述是小编给大家介绍的微信小程序功能之全屏滚动效果的实现代码,希望对大家有所帮助,也非常感谢大家的支持!