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


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 相关文章推荐
javascript中直接写php代码的方法
Jul 31 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
不同编码的页面表单数据乱码问题解决方法
Feb 15 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
Mar 25 Javascript
JavaScript html5 canvas绘制时钟效果(二)
Mar 27 Javascript
基于javascript实现简单的抽奖系统
Apr 15 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
May 17 Javascript
微信小程序 scroll-view实现锚点滑动的示例
Dec 06 Javascript
Vue实现固定定位图标滑动隐藏效果
May 30 Javascript
浅入深出Vue之组件使用
Jul 11 Javascript
Vue商品控件与购物车联动效果的实例代码
Jul 21 Javascript
ssm+vue前后端分离框架整合实现(附源码)
Jul 08 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/03/19 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
js 替换
2008/02/19 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
Python如何实现文本转语音
2016/08/08 Python
Python unittest单元测试框架总结
2018/09/08 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
Python如何用filter函数筛选数据
2020/03/05 Python
python实现文法左递归的消除方法
2020/05/22 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
实习护理工作自我评价
2013/09/25 职场文书
亮剑精神演讲稿
2014/05/23 职场文书
体操比赛口号
2014/06/10 职场文书
走群众路线学习笔记
2014/11/06 职场文书
就业意向书范本
2015/05/11 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书