微信小程序功能之全屏滚动效果的实现代码


Posted in Javascript onNovember 22, 2018

想做一个全屏滚动的效果,于是在网上找了一个差不多的例子,但是觉得有些地方不是很好,于是改进了一下;

先给大家展示下效果图,感觉不错,请参考实例代码。

微信小程序功能之全屏滚动效果的实现代码

代码:

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
        
})
      
})
    
}    
   },
})

总结

以上所述是小编给大家介绍的微信小程序功能之全屏滚动效果的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery中如何传递参数如click(),change()等具体实现
Apr 28 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
May 21 Javascript
javascript 上下banner替换具体实现
Nov 14 Javascript
详解Javascript继承的实现
Mar 25 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
Nov 02 Javascript
ReactNative页面跳转Navigator实现的示例代码
Aug 02 Javascript
详解Vue组件实现tips的总结
Nov 01 Javascript
jquery在启动页面时,自动加载数据的实例
Jan 22 jQuery
解决eclipse中没有js代码提示的问题
Oct 10 Javascript
解决layui table表单提示数据接口请求异常的问题
Sep 24 Javascript
Vue实现开关按钮拖拽效果
Sep 22 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
Oct 13 Javascript
layer弹出子iframe层父子页面传值的实现方法
Nov 22 #Javascript
js操作table中tr的顺序实现上移下移一行的效果
Nov 22 #Javascript
从源码里了解vue中的nextTick的使用
Nov 22 #Javascript
Vue动态加载异步组件的方法
Nov 21 #Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
Nov 21 #Javascript
跨域解决之JSONP和CORS的详细介绍
Nov 21 #Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
Nov 21 #Javascript
You might like
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
php使用百度天气接口示例
2014/04/22 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
js登录弹出层特效
2014/03/07 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
详解Python的Django框架中的模版继承
2015/07/16 Python
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Python切片工具pillow用法示例
2018/03/30 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
详解python-图像处理(映射变换)
2019/03/22 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
中专生求职自荐信范文
2013/12/22 职场文书
求职信范文英文版
2014/01/05 职场文书
八年级英语教学反思
2014/01/09 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
给老婆的保证书范文
2014/04/28 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
工程项目合作意向书
2015/05/08 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
九年级英语教学反思
2016/02/15 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS