移动端事件

1. 网络状态改变事件

H5新增了两个监听网络状改变的事件

  1. online 网络已连接
  2. offline 网络已断开
<body>
  <script>
    // 找到控制台中的network模拟断网-->点击向下的箭头,选择offline 或online就会触发断网,连网事件
    window.addEventListener("online", function () {
      console.log('网络已连接')
    })
    window.addEventListener("offline", function () {
      console.log('网络断开')
    })
  </script>
</body>

2. 全屏

HTML5 规范允许用户自定义网页上的任意元素全屏显示

2.1 全屏方法
  1. Node.requestFullScreen() 开启全屏显示
  2. document.cancelFullScreen() 关闭全屏显示
  3. document.fullscreen 检测是否处于全屏(尽量不要用说)

由于兼容问题, 需要加兼容前缀,例如webkit内核浏览器: webkitRequestFullScreen

处理兼容的写法

if(img.requestFullScreen){
    img.requestFullScreen()
}else if(img.webkitRequestFullScreen){
    img.webkitRequestFullScreen()
}
// ......
full.onclick = function(){
    img.webkitRequestFullScreen()
    setTimeout(function(){
        alert(document.fullscreen)
    },2000)
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Document</title>
</head>

<body>
  <div id="fullscreen">
    <h1>大家好</h1>
    <p>hello world</p>
    <button id="full">全屏</button>
    <button id="cacelfull">取消全屏</button>
  </div>
  <script>
    full.onclick = function () {//全屏
      fullscreen.webkitRequestFullScreen()
      //检查是否全屏,全屏返回true 不全屏false。需要有个延迟
      setTimeout(() => {
        console.log(document.fullscreen)
      }, 1000)
    }
    cacelfull.onclick = function () {//退出全屏
      document.webkitCancelFullScreen()
      //检查是否全屏,全屏返回true 不全屏false。需要有个延迟
      setTimeout(() => {
        console.log(document.fullscreen)
      }, 1000)
    }
  </script>
</body>

</html>
2.2 全屏伪类选择器

:fullscreen

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Document</title>
</head>
<style>
  #fullscreen:fullscreen h1 {
    /*伪类:fullscreen如果处于全屏状态 */
    color: red;
  }

  #fullscreen:fullscreen p {
    /*伪类:fullscreen如果处于全屏状态 */
    color: yellow;
  }
</style>

<body>
  <div id="fullscreen">
    <h1>大家好</h1>
    <p>hello world</p>
    <button id="full">全屏</button>
    <button id="cacelfull">取消全屏</button>
  </div>
  <script>
    full.onclick = function () {//全屏
      fullscreen.webkitRequestFullScreen()
      //检查是否全屏,全屏返回true 不全屏false。需要有个延迟
      setTimeout(() => {
        console.log(document.fullscreen)
      }, 1000)
    }
    cacelfull.onclick = function () {//退出全屏
      document.webkitCancelFullScreen()
      //检查是否全屏,全屏返回true 不全屏false。需要有个延迟
      setTimeout(() => {
        console.log(document.fullscreen)
      }, 1000)
    }
  </script>
</body>

</html>

3. 移动端事件

3.1、PC端事件
  1. onclick 鼠标点击触发
    . onmousedown 鼠标按下触发
    . onmousemove 鼠标移动触发
    . onmouseup 鼠标抬起触发
3.2、移动端触屏事件
  1. ontouchstart 手指按下触发(相当于mousedown)
    . ontouchmove 手指移动触发
    . ontouchend 手指抬起触发
3.3、事件监听
  1. addEventListener(‘不带on的事件名’,事件函数,是否冒泡 )事件绑定
  2. 绑定多少个事件就执行多少个,不会存在前后事件覆盖的问题
  3. 冒泡 从下往上,把事件一直向上传递,点击最下面的元素,最下面先执行
  4. 捕获 从上往下,把事件一直向下传递,点击最上面的元素,最上面先执行
3.4、event对象
  1. 标准事件函数默认的第一个参数
  2. 是描述发生事件的详细信息
3.5、阻止默认事件
  1. 事件默认行为:当一个事件发生的时候浏览器自己会默认做的事情
  2. 比如正常情况下,鼠标可以拖拽图片,a标签跳转,手指长按可以选中文字,右键菜单等
  3. e.preventDefault( ) 阻止默认行为,且解决在IOS上有网页回弹的橡皮筋现象
3.6、阻止冒泡
  1. 在需要的时候的,标准用e.stopPropagation( ) 阻止冒泡问题,比如有时需要复制文本
3.7、获取手指信息
  1. touches 当前屏幕上的手指列表(所有触点的集合)
    . targetTouches 当前元素上的手指列表(触发事件元素上的触点集合) changedTouches 触发当前事件的手指列表
  2. 获取手指的个数 e.changedTouches.length
  3. 获取坐标 e.changedTouches[0].pageX
3.8、手指对象的区别
  1. 在touchend的时候想要获取手指列表,只能用changedTouches
  2. 原因在于,手指抬起了,也就没有touches(屏幕上的手指个数),targetTouches(元素上的手指个数)了
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Document</title>
</head>

<body>
  <script>
    //PC鼠标事件  移动端touch事件
    document.onmousedown = function (ev) {//鼠标按下
      console.log('onmousedown', ev);
    }
    document.onmouseup = function (ev) {//鼠标抬起
      console.log('onmouseup', ev);
    }
    document.onmousedown = function (ev) {//一次按下 一次抬起 触发一次单击
      console.log('onmouseclick', ev);
    }
    document.ontouchstart = function (ev) {//手指按下触发
      console.log('ontouchstart', ev);
      console.log(ev.changedTouches.length)//获取手指个数
    }

    document.ontouchmove = function (ev) {//手指移动触发
      console.log('ontouchmove', ev);
    }
    document.ontouchendt = function (ev) {//手指抬起触发
      console.log('ontouchend', ev);
    }
  </script>
</body>

</html>
3.9、防止误触问题
  1. 用JS做判断,手指移动就不跳转,没有移动,说明是点击,就跳转
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Document</title>
  <style>
    #box {
      width: 300px;
      height: 300px;
      background-color: pink;
    }
  </style>
</head>

<body>
  <div id="box"></div>
  <script>
    //防误触
    box.addEventListener( //通过addEventListener绑定了touchmove事件,手指一移动,会给box绑定isMove属性,值为true。
      "touchmove",
      function () {
        this.isMove = true;//定义一个变量来标识用户是否在元素上移动,
      })

    box.addEventListener(//每次鼠标按下抬起时,判断鼠标是否移动,如果移动可能是误触,不是点击事件。
      "touchend",
      function () {
        //如果是移动就不会走if里边的事件.
        if (!this.isMove) {//这里是真正的点击事件 移动了就不是点击事件
          // window.location.href = this.href;
          console.log('1这里是真正的点击事件')
          return;
        }
        this.isMove = false;
        console.log('2误触')
      })
  </script>
</body>

</html>
3.10 300ms延迟

移动端网页点击历史问题

  1. 移动端屏幕小,pc网页大

  2. 网页缩小了,双击放大

  3. 单机后等待300ms, 判断用户是不是双击

解决300ms延迟 https://github.com/ftlabs/fastclick(链接中有使用方法)借助第三方工具---fastclick方法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Document</title>
  <style>
    #box {
      width: 300px;
      height: 300px;
      background-color: pink;
    }
  </style>
</head>
<body>
  <div id="box"></div>
    //使用前要先引入FastClick。通过在线的cdn,搜boots cdn--搜fastclick-->复制fastclick的js代码地址
  <script src="https://cdn.bootcdn.net/ajax/libs/fastclick/1.0.6/fastclick.js"></script>
  <script>
    //防误触解决移动端300ms延迟--借助第三方工具FastClick
    if ('addEventListener' in document) {
      document.addEventListener('DOMContentLoaded', function () {
        FastClick.attach(document.body);//FastClick在整个页面生效
      }, false);
      box.onclick = function () {
        console.log(1111);
      }
    }
  </script>
</body>

</html>

注意: touch事件不会等300ms

解决300ms延迟方法二--加上阻止用户点击user-scalable=no,阻止放大相当于阻止了双击

<meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no">

4. 其他移动端事件

4.1 tap类事件

触碰事件,我目前还不知道它和touch的区别,一般用于代替click事件,有tap longTap singleTap doubleTap四种之分

tap: 手指碰一下屏幕会触发

longTap: 手指长按屏幕会触发

singleTap: 手指碰一下屏幕会触发

doubleTap: 手指双击屏幕会触发

4.2. swipe类事件

滑动事件,有swipe swipeLeft swipeRight swipeUp swipeDown 五种之分

swipe:手指在屏幕上滑动时会触发

swipeLeft:手指在屏幕上向左滑动时会触发

swipeRight:手指在屏幕上向右滑动时会触发

swipeUp:手指在屏幕上向上滑动时会触发

swipeDown:手指在屏幕上向下滑动时会触发

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 1.网络状态改变事件 H5新增了两个监听网络状态改变的事件 online 网络以连接 offline 网络已断开 ...
    送你回城决阅读 253评论 0 1
  • 在前端的移动Web开发中,有一部分事件只在移动端产生,如触摸相关的事件。接下来给大家简单总结一下移动端的事件。 1...
    IT老马阅读 5,068评论 1 20
  • 一、 基础事件 1.click事件 单击事件,类似于PC端的click,但在移动端中,连续click的触发有200...
    满天繁星_28c5阅读 654评论 0 0
  • 一:理解click的300ms的延迟响应Click事件在移动手机开发中有300ms的延迟,因为在手机早期,浏览器系...
    2dcc2b155e1e阅读 127评论 0 1
  • 为什么移动端不用click移动端的click有300ms延迟的问题,在移动端浏览器中,连续两次点击是缩放操作,所以...
    樊小勇阅读 716评论 0 4