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


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 相关文章推荐
css transform 3D幻灯片特效实现步骤解读
Mar 27 Javascript
JSON中双引号的轮回使用过程中一定要小心
Mar 05 Javascript
用JavaScript实现页面重定向功能的教程
Jun 04 Javascript
JS实现点击事件统计的简单实例
Jul 10 Javascript
js实现图片上传预览原理分析
Jul 13 Javascript
判断div滑动到底部的scroll实例代码
Nov 15 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
Jul 25 Javascript
koa2实现登录注册功能的示例代码
Dec 03 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
Jan 23 Javascript
JS实现简单打字测试
Jun 24 Javascript
vue实现同时设置多个倒计时
May 20 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 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快速排序quicksort实例详解
2016/09/28 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
python获取图片颜色信息的方法
2015/03/18 Python
python中的计时器timeit的使用方法
2017/10/20 Python
Python生成数字图片代码分享
2017/10/31 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
python实现关键词提取的示例讲解
2018/04/28 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
使用Python实现分别输出每个数组
2019/12/06 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
python自动化发送邮件实例讲解
2021/01/04 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
结婚典礼证婚词
2014/01/08 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
什么是Python装饰器?如何定义和使用?
2022/04/11 Python