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


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 ajax abort()的使用方法
Oct 28 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
May 28 Javascript
node.js中的fs.createWriteStream方法使用说明
Dec 17 Javascript
JavaScript采用递归算法计算阶乘实例
Aug 04 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
May 17 Javascript
基于BootStrap环境写jQuery tabs插件
Jul 12 Javascript
zTree树形插件异步加载方法详解
Jun 14 Javascript
基于vue-resource jsonp跨域问题的解决方法
Feb 03 Javascript
vue使用技巧及vue项目中遇到的问题
Jun 04 Javascript
JS大坑之19位数的Number型精度丢失问题详解
Apr 22 Javascript
vue.js路由mode配置之去掉url上默认的#方法
Nov 01 Javascript
微信小程序 使用腾讯地图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重定向的三种方法分享
2012/02/22 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
VSCode launch.json配置详细教程
2020/06/18 Javascript
jQuery实现本地存储
2020/12/22 jQuery
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
django框架自定义用户表操作示例
2018/08/07 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
教师自我评价范文
2013/12/16 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
力克胡哲观后感
2015/06/10 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技