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


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 相关文章推荐
Javascript 检测、添加、移除样式(className)函数代码
Sep 08 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
Dec 24 Javascript
初识Javascript小结
Jul 16 Javascript
直接拿来用的15个jQuery代码片段
Sep 23 Javascript
javascript高级编程之函数表达式 递归和闭包函数
Nov 29 Javascript
关于iframe跨域POST提交的方法示例
Jan 15 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
Dec 20 Javascript
详解Node.js模板引擎Jade入门
Jan 19 Javascript
JS逻辑运算符短路操作实例分析
Jul 09 Javascript
vue服务端渲染添加缓存的方法
Sep 18 Javascript
javascrit中undefined和null的区别详解
Apr 07 Javascript
JavaScript如何借用构造函数继承
Nov 06 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
php框架Phpbean说明
2008/01/10 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
php实现文件下载实例分享
2014/06/02 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
javascript实现移动端上传图片功能
2020/08/18 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
用python处理MS Word的实例讲解
2018/05/08 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
HTML5 canvas 瀑布流文字效果的示例代码
2018/01/31 HTML / CSS
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
Linux机考试题
2015/10/16 面试题
非功能性需求都包括哪些方面
2013/10/29 面试题
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
会计应聘求职信范文
2013/12/17 职场文书
《我的伯父鲁迅先生》教学反思
2014/02/12 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
一年级小学生评语
2014/04/22 职场文书
初二学习计划书范文
2014/04/27 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
python分分钟绘制精美地图海报
2022/02/15 Python