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


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 相关文章推荐
js表数据排序 sort table data
Feb 18 Javascript
JavaScript 数组运用实现代码
Apr 13 Javascript
基于jQuery的为attr添加id title等效果的实现代码
Apr 20 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
Jun 20 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
js实现Form栏显示全格式时间时钟效果代码
Aug 19 Javascript
js倒计时简单实现方法
Dec 17 Javascript
1秒50万字!js实现关键词匹配
Aug 01 Javascript
ES6新特性七:数组的扩充详解
Apr 21 Javascript
JavaScript用200行代码制作打飞机小游戏实例
Jun 21 Javascript
vue 中滚动条始终定位在底部的方法
Sep 03 Javascript
js DOM的事件常见操作实例详解
Dec 16 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
改造一台复古桌面收音机
2021/03/02 无线电
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
基于Zend的Config机制的应用分析
2013/05/02 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
angular 实时监听input框value值的变化触发函数方法
2018/08/31 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
2020/12/07 Vue.js
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
python组合无重复三位数的实例
2018/11/13 Python
Python微信操控itchat的方法
2019/05/31 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
2020/11/05 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
中国宠物用品商城:E宠商城
2016/08/27 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
高一新生军训方案
2014/05/12 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书