js移动端事件基础及常用事件库详解


Posted in Javascript onAugust 15, 2017

一、事件基础

PC:click、mouseover、mouseout、mouseenter、mouseleave、mousemove、mousedown、mouseup、mousewheel、keydown、keyup、load、scroll、blur、focus、change...

移动端:click(单击)、load、scroll、blur、focus、change、input(代替keyup、keydown)...TOUCH事件模型(处理单手指操作)、GESTURE事件模型(处理多手指操作)

TOUCH:touchstart、touchmove、touchend、touchcancel

GESTURE:gesturestart、gesturechange、gestureend

1、click:在移动端click属于单击事件,不是点击事件,在移动端的项目中我们经常会区分单击做什么和双击做什么,所以移动端的浏览器在识别click的时候,只有确定是单击后才会把它执行:

在移动端使用click会存在300ms的延迟:浏览器在第一次点击结束后,还需要等到300ms看是否触发了第二次点击,如果触发了第二次点击就不属于click了,没有触发第二次点击才属于click

下面代码是移动端模拟click时间的代码

function on(curEle,type,fn){
   curEle.addEventListener(type,fn,false);
  }
  var oBox = document.querySelector('.box');
  //移动端采用click存在300ms延迟
  // oBox.addEventListener('click',function(){
  //  this.style.webkitTransform = 'rotate(360deg)'
  // },false)
  //使用TOUCH事件模型实现点击操作(单击&&双击)
  on(oBox,'touchstart',function(ev){
   //ev:TouchEvent事件 属性 type、target、preventDefault(returnValue)、stopPropagation、changedTouches、touches
   //changedTouches和touches都是手指信息的集合(touchList),touches获取到值的必要条件只有手指还在屏幕上才可以获取,所以在touchend事件中如果想获取手指离开的瞬间坐标只能使用changedTouches获取
   var point = ev.touches[0];
   this['strX'] = point.clientX;
   this['strY'] = point.clientY;
   this['isMove'] = false;
  })
  on(oBox,'touchmove',function(ev){
   var point = ev.touches[0];
   var newX = point.clientX,
    newY = point.clientY;
   //判断是否发生滑动,我们需要判断偏移的值是否在30PX以内
   if(Math.abs(newX-this['strX'])>30 || Math.abs(newY-this['strY'])>30){
    this['isMove'] = true;
   }
  })
  on(oBox,'touchend',function(ev){
   if(this['isMove'] === false){
    //没有发生移动 点击
    this.style.webkitTransitionDuration = '1s';
    this.style.webkitTransform = 'rotate(360deg)';
    var delayTimer = window.setTimeout(function(){
     this.style.webkitTransitionDuration = '0s';
     this.style.webkitTransform = 'rotate(0deg)';
    }.bind(this),1000);
   }else{
    //滑动
    this.style.background = 'red';
   }
  })

同时也可以使用fastclick.js来解决移动端click事件的300ms延迟 (github地址https://github.com/zhouxiaotian/fastclick)

2、点击、单击、双击、长按、滑动、左滑、右滑、上滑、下滑

单击和双击(300MS)

点击和长按(750MS)

点击和滑动(X/Y轴偏移的距离是否在30PX以内,超过30PX就是滑动)

左右滑动和上下滑动(X轴偏移的距离 > Y轴偏移的距离 = 左右滑 相反就是上下滑)

左滑和右滑(偏移的距离 >0 = 右滑  相反就是左滑)

二、常用的事件库

FastClick.js :解决CLICK事件300MS的延迟

TOUCH.js:百度云移动手势库  GitHub地址  https://github.com/Clouda-team/touch.code.baidu.com

实例如下:

var oBox = document.querySelector('.box');
  //单击
  touch.on(oBox,'tap',function(ev){
   this.style.webkitTransitionDuration = '1s';
   this.style.webkitTransform = 'rotate(360deg)';
   var delayTimer = window.setTimeout(function(){
    this.style.webkitTransitionDuration = '0s';
    this.style.webkitTransform = 'rotate(0deg)';
    window.clearTimeout(delayTimer)
   }.bind(this),1000)
  })
  //双击
  touch.on(oBox,'doubletap',function(ev){
   this.style.webkitTransitionDuration = '1s';
   this.style.webkitTransform = 'rotate(-360deg)';
   var delayTimer = window.setTimeout(function(){
    this.style.webkitTransitionDuration = '0s';
    this.style.webkitTransform = 'rotate(0deg)';
    window.clearTimeout(delayTimer)
   }.bind(this),1000)
  })
  //长按
  touch.on(oBox,'hold',function(ev){
   this.style.backgroundColor = 'red';
  })

HAMMER.js

Zepto.js:被誉为移动端的小型JQ,JQ由于是在PC端使用的,所以代码中包含了大量对于ie低版本浏览器的兼容处理,而ZEPTO只应用在移动端开发,所以在JQ的基础上没有对低版本的ie进行支持

JQ中提供了很多的选择器类型及DOM操作方法,但是ZEPTO只是实现了部分常用的选择器和方法。例如:JQ中的动画方法有animate、hide、show、fadeIn、fadeOut、fadeToggle、slideDown、slideUp、slideToggle...但是在ZEPTO中只有animate

ZEPTO的源代码大小比JQ小很多

ZEPTO专门为移动端开发而诞生,所以相对于JQ来说更适合移动端:

ZEPTO的animate动画方法支持了CSS3动画的操作

ZEPTO专门的准备了移动端常用 的事件操作:tap、singleTap、doubleTap、longTap、swipe、swipeUp、swipeDown、swipeLeft、swipeRight

实例代码如下:

$('.box').singleTap(function(ev){
   $(this).animate({
    rotate:'360deg'
   },1000,'linear',function(){
    this.style.webkitTransform = 'rotate(0)'
   })
  })

  $('.box').on('touchstart',function(){
   $(this).css('background','red')
  })
  $.ajax({
   url:'',
   type:'get',
   dataType:'json',
   cache:false,
   success:function(){
    
   }
  })

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery实现切换页面布局使用介绍
Oct 09 Javascript
JavaScript中字符串拼接的基本方法
Jul 07 Javascript
AngularJS控制器controller正确的通信的方法
Jan 25 Javascript
jQuery实现调整表格单列顺序完整实例
Jun 20 Javascript
JS关闭窗口时产生的事件及用法示例
Aug 20 Javascript
详解堆的javascript实现方法
Nov 29 Javascript
js事件冒泡与事件捕获详解
Feb 20 Javascript
JS+Ajax实现百度智能搜索框
Aug 04 Javascript
微信小程序返回上一页传参并刷新过程解析
Dec 13 Javascript
vue中的.$mount('#app')手动挂载操作
Sep 02 Javascript
ES6学习教程之Promise用法详解
Nov 22 Javascript
小程序自定义轮播图圆点组件
Jun 25 Javascript
js实现移动端轮播图效果
Dec 09 #Javascript
JavaScript递归算法生成树形菜单
Aug 15 #Javascript
JavaScript中附件预览功能实现详解(推荐)
Aug 15 #Javascript
input输入框内容实时监测(附代码)
Aug 15 #Javascript
vue的基本用法与常见指令
Aug 15 #Javascript
vue如何集成raphael.js中国地图的方法示例
Aug 15 #Javascript
JavaScript与Java正则表达式写法的区别介绍
Aug 15 #Javascript
You might like
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
图片onload事件触发问题解决方法
2011/07/31 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
基于scrapy的redis安装和配置方法
2018/06/13 Python
Python 编程速成(推荐)
2019/04/15 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
办公室文秘岗位职责
2013/11/15 职场文书
项目建议书格式
2014/03/12 职场文书
网络宣传方案
2014/03/15 职场文书
运动会宣传口号
2014/06/09 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
Python中requests库的用法详解
2022/06/05 Python