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


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 相关文章推荐
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
js遍历、动态的添加数据的小例子
Jun 22 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
Aug 30 Javascript
jquery实现点击页面计算点击次数
Jan 23 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
Aug 12 Javascript
微信小程序利用co处理异步流程的方法教程
May 20 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
Feb 26 Javascript
js实现黑白div块画空心的图形
Dec 13 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
Jan 08 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
May 27 Javascript
layui清空,重置表单数据的实例
Sep 12 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批量删除数据
2007/01/18 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
js 数组操作代码集锦
2009/04/28 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
巧用replace将文字表情替换为图片
2014/04/17 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
python调用自定义函数的实例操作
2019/06/26 Python
python word转pdf代码实例
2019/08/16 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
Python魔术方法专题
2020/06/19 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
人力资源部培训专员岗位职责
2014/01/02 职场文书
《社戏》教学反思
2014/04/15 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书