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


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 相关文章推荐
for 循环性能比较 提高for循环的效率
Mar 19 Javascript
jquery 无限级下拉菜单的简单实现代码
Feb 21 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
Jun 01 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
Nov 28 Javascript
C#中使用迭代器处理等待任务
Jul 13 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
Aug 24 Javascript
Javascript实现苹果悬浮虚拟按钮
Apr 10 Javascript
JS绘制微信小程序画布时钟
Dec 24 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
Oct 13 Javascript
React diff算法的实现示例
Apr 20 Javascript
webpack中的模式(mode)使用详解
Feb 20 Javascript
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
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
PHP XML备份Mysql数据库
2009/05/27 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
8个PHP数组面试题
2015/06/23 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
Weblogc domain问题
2014/01/27 面试题
岗位职责的定义
2013/11/10 职场文书
应付会计岗位职责
2013/12/12 职场文书
秘书专业自荐信范文
2013/12/26 职场文书
中秋节超市促销方案
2014/01/30 职场文书
五好党支部事迹材料
2014/02/06 职场文书
企业法人授权委托书
2014/04/03 职场文书
对祖国的寄语大全
2014/04/11 职场文书
普通话演讲稿
2014/09/03 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android
Django基础CBV装饰器和中间件
2022/03/22 Python
golang使用map实现去除重复数组
2022/04/14 Golang
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL