微信小程序左右滑动切换页面详解及实例代码


Posted in Javascript onFebruary 28, 2017

微信小程序——左右滑动切换页面事件

微信小程序的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend。

这三个事件最重要的属性是pageX和pageY,表示X,Y坐标。

touchstart在触摸开始时触发事件;
touchend在触摸结束时触发事件;
touchmove触摸的过程中不断激发这个事件;

这三个事件都有一个timeStamp的属性,查看timeStamp属性,可以看到顺序是touchstart => touchmove=> touchmove => ··· =>touchmove =>touchend。

第一步:在wxml文件中绑定事件(需要左右滑动的界面)

<view class="container" bindtouchstart="touchStart" bindtouchmove="touchMove" bindtouchend="touchEnd">
 // do something
</view>

第二步:在js文件中处理左右滑动逻辑

var touchDot = 0;//触摸时的原点
var time = 0;// 时间记录,用于滑动时且时间小于1s则执行左右滑动
var interval = "";// 记录/清理 时间记录
var nth = 0;// 设置活动菜单的index
var nthMax = 5;//活动菜单的最大个数
var tmpFlag = true;// 判断左右华东超出菜单最大值时不再执行滑动事件

// 触摸开始事件
touchStart:function(e){ 
  touchDot = e.touches[0].pageX; // 获取触摸时的原点
  // 使用js计时器记录时间  
  interval = setInterval(function(){
    time++;
  },100); 
},
// 触摸移动事件
touchMove:function(e){ 
  var touchMove = e.touches[0].pageX;
  console.log("touchMove:"+touchMove+" touchDot:"+touchDot+" diff:"+(touchMove - touchDot));
  // 向左滑动  
  if(touchMove - touchDot <= -40 && time < 10){
    if(tmpFlag && nth < nthMax){ //每次移动中且滑动时不超过最大值 只执行一次
      var tmp = this.data.menu.map(function (arr, index) {
        tmpFlag = false;
        if(arr.active){ // 当前的状态更改
          nth = index;
          ++nth;
          arr.active = nth > nthMax ? true : false;
        }
        if(nth == index){ // 下一个的状态更改
          arr.active = true;
          name = arr.value;
        }
        return arr;
      })
      this.getNews(name); // 获取新闻列表
      this.setData({menu : tmp}); // 更新菜单
    }
  }
  // 向右滑动
  if(touchMove - touchDot >= 40 && time < 10){
    if(tmpFlag && nth > 0){
      nth = --nth < 0 ? 0 : nth;
      var tmp = this.data.menu.map(function (arr, index) {
        tmpFlag = false;
        arr.active = false;
        // 上一个的状态更改
        if(nth == index){
          arr.active = true;
          name = arr.value;
        }
        return arr;
      })
      this.getNews(name); // 获取新闻列表
      this.setData({menu : tmp}); // 更新菜单
    }
  }
  // touchDot = touchMove; //每移动一次把上一次的点作为原点(好像没啥用)
},
 // 触摸结束事件
touchEnd:function(e){
  clearInterval(interval); // 清除setInterval
  time = 0;
  tmpFlag = true; // 回复滑动事件
},

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
基于jquery实现的表格分页实现代码
Jun 21 Javascript
JavaScript 基础篇之运算符、语句(二)
Apr 07 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
Jan 06 Javascript
javascript中setTimeout的问题解决方法
May 08 Javascript
JQuery中基础过滤选择器用法实例分析
May 18 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
Sep 01 Javascript
Node.js的基本知识简单汇总
Sep 19 Javascript
JS百度地图搜索悬浮窗功能
Jan 12 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
Sep 13 Javascript
mpvue将vue项目转换为小程序
Sep 30 Javascript
JS实现的排列组合算法示例
Jul 16 Javascript
vue如何清除浏览器历史栈
May 25 Vue.js
微信小程序 使用腾讯地图SDK详解及实现步骤
Feb 28 #Javascript
Vue.js父与子组件之间传参示例
Feb 28 #Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
Feb 28 #Javascript
JS对象创建的几种方式整理
Feb 28 #Javascript
js仿淘宝评价评分功能
Feb 28 #Javascript
jQuery布局组件EasyUI Layout使用方法详解
Feb 28 #Javascript
three.js绘制地球、飞机与轨迹的效果示例
Feb 28 #Javascript
You might like
php 动态多文件上传
2009/01/18 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
PHP实现八皇后算法
2019/05/06 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
谈谈JavaScript中的垃圾回收机制
2020/09/17 Javascript
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
python自动化测试之连接几组测试包实例
2014/09/28 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Python字符串格式化输出方法分析
2016/04/13 Python
django使用html模板减少代码代码解析
2017/12/12 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
写出二分查找算法的两种实现
2013/05/13 面试题
擅自离岗检讨书
2014/02/11 职场文书
晨会主持词
2014/03/17 职场文书
爱情保证书大全
2014/04/29 职场文书
岗位说明书范文
2014/05/07 职场文书
结对共建工作方案
2014/06/02 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers