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


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中的Array对象使用说明
Jan 17 Javascript
JavaScript作用域与作用域链深入解析
Dec 06 Javascript
javascript中普通函数的使用介绍
Dec 19 Javascript
JS实现网站菜单拖拽移位效果的方法
Sep 24 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
Dec 22 Javascript
jQuery+ajax实现实用的点赞插件代码
Jul 06 Javascript
Vuejs第十篇之vuejs父子组件通信
Sep 06 Javascript
Angular的模块化(代码分享)
Dec 26 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
vue实现简单表格组件实例详解
Apr 16 Javascript
JS实现手写parseInt的方法示例
Sep 24 Javascript
JS可断点续传文件上传实现代码解析
Jul 30 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 Directory 函数的详解
2013/03/07 PHP
PHP 解决session死锁的方法
2013/06/20 PHP
php链表用法实例分析
2015/07/09 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
express.js中间件说明详解
2019/03/19 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
Python中str is not callable问题详解及解决办法
2017/02/10 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
python框架中flask知识点总结
2018/08/17 Python
django-初始配置(纯手写)详解
2019/07/30 Python
python3 logging日志封装实例
2020/04/08 Python
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
平面设计专业求职信
2014/08/09 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
Django程序的优化技巧
2021/04/29 Python
python多线程方法详解
2022/01/18 Python