H5移动端事件详细介绍

1、PC端与移动端H5事件对比


1)PC端事件:


onclick鼠标点击触发
onmousedown鼠标按下触发
onmousemove鼠标移动触发
onmouseup鼠标抬起触发


代码块:

         // PC端的拖拽事件
        let Obox=document.querySelector("#box");
        //按下事件
        Obox.onmousedown=function(e){
            console.log(e);
            console.log("pc按下");
            //移动事件,写在按下事件里面,因为是按下-移动-抬起
            Obox.onmousemove=function(e){
                console.log(e);
                console.log("pc移动");
            }
            //抬起事件
            Obox.onmouseup=function(e){
                console.log(e);
                console.log("pc抬起");
                //需要清除移动和抬起事件
                Obox.onmousemove=Obox.onmouseup=null;
            }
        }

2)移动端触屏事件


ontouchstart手指按下触发
ontouchmove手指移动触发
ontouchend手指抬起触发


代码块:

        //移动端事件
        let Obox=document.querySelector("#box");

        //手指按下触发
        Obox.ontouchstart=function(e){
            console.log(e);
            console.log("移动端事件:手指按下触发");

            //手指移动触发
            Obox.ontouchmove=function(e){
                console.log(e);
                console.log("移动端事件:手指移动触发")
            }
             //手指抬起触发
             Obox.ontouchend=function(e){
                console.log(e);
                console.log("移动端事件:手指抬起触发")
            }
        }

3)移动端采用:事件监听addEventListener


代码块:

        //移动端事件 手指按下 移动 抬起
        //手指按下触发
        Obox.addEventListener("touchstart",function(e){
          console.log("移动端事件:手指按下触发");
        });
        //手指移动触发
        Obox.addEventListener("touchmove",function(e){
          console.log("移动端事件:手指移动触发")
        });
          //手指抬起触发
          Obox.addEventListener("touchend",function(e){
          console.log("移动端事件:手指抬起触发");
        });

原因:


原因之一:

//移动端事件在谷歌浏览器中使用监听事件的原因如下:
        //1、通过on的方式添加touch事件在谷歌浏览器下无效,在火狐浏览器下生效
        let Obox=document.querySelector("#box");
        Obox.ontouchstart=function(){
            console.log("点击1");
        };
        Obox.ontouchstart=function(){
            console.log("点击2");
        };
        //2、通过以上的代码可以知道,同一个事件在火狐浏览器中,通过on方式添加事件是会被覆盖掉的,即执行最后一个事件
        //3、通过on方式添加不同的事件,在火狐浏览器中不会被覆盖掉
        Obox.ontouchmove=function(){
            console.log("点击3");
        };

原因之二:
addEventListener事件绑定多少个事件它就执行多少个事件,并且在谷歌一直被识别,且编译顺序从上往下

let Obox=document.querySelector("#box");
Obox.addEventListener("touchstart",function(e){
    console.log("我的手接触到了屏幕1");
});
Obox.addEventListener("touchmove",function(e){
    console.log("我的手接触到了屏幕2");
});
Obox.addEventListener("touchend",function(e){
    console.log("我的手接触到了屏幕3");
});

为什么移动端使用:touch事件,PC端使用:onclick事件

let Obox=document.querySelector("#box");
   Obox.onmousedown=function(e){
       console.log("pc端点击事件");
   };
   Obox.ontouchstart=function(){
       console.log("移动端按下事件");
   };
   //通过以上代码可以看出,鼠标事件可以在移动端使用,但会有300ms的延迟
   //(因为先执行了移动端的按下事件,后执行了pc端的点击事件),按正常的逻辑应该是先执行点击事件,后执行移动端的按下事件
   //解决方法:一般使用fastclick.js解决移动端浏览器的300ms延迟问题
   //fastclick是专门解决移动端浏览器300ms延迟点击事件的问题所开发的一个轻量的库
   //fastclick.js:检测到touchendd事件的时候,会通过DOM自定义事件立即触发模拟 一个click事件,并把浏览器在300ms之后真正大的click事件阻止掉

4)总结


PC端事件:
用on方式添加touch事件在谷歌浏览器下无效
用on方式添加事件会被覆盖
鼠标事件在移动端可以使用,但是有300毫秒的延迟

 

移动端触屏事件:
addEventListener(‘不带on的事件名’,事件函数,是否冒泡)事件绑定
addEventListener绑定多少事件就执行多少个,不会存在前后事件覆盖的问题
addEventListener绑定touch事件在谷歌浏览器下一直识别

 

2、阻止默认事件


事件默认行为:当一个事件发生的时候浏览器自己会默认做的事情
比如正常情况下,鼠标可以拖拽图片,a标签可以跳转,手指长按可以选中文字,右键菜单,提交表单等。
e.preventDefault()阻止默认行为
但是阻止之后网页上的所有滚动条会失效,一般不会阻止默认

 <div id="test">
        <a href="https://www.baidu.com">a标签跳转:文字复制</a>
    </div>
    <script>
        //从chrom 56版本开始,在windows,document和body上面注册的3个移动端事件处理函数中调用e.prevenrDrfault()
        //但是会被浏览器忽略掉,且不会阻止默认行为,控制台还会报错
        let Obox=document.querySelector("#test  a");
        Obox.addEventListener("touchstart",function(e){
            e.preventDefault();
            //阻止默认事件
        },{passive:false});

 

3、阻止冒泡


事件冒泡:由内往外
事件捕获:由外往内
如果同时存在捕获和冒泡时,捕获的优先级高于冒泡。

 

4、阻止默认


在需要的时候,标准用e.stopPropagation( ) 阻止冒泡问题,比如有时候需要手指长按复制文本
user-select: none; css可以阻止复制文本
document.onselectstart= function(){return false}; js阻止选中文本( //代码简写 document.οnselect=()=>false)

 

5、获取手指信息

 

 let Oapp=document.querySelector("#app");
        Oapp.addEventListener("touchstart",function(e){
            console.log(e);
        });

 

6、获取设备信息


获取设备信息的作用:当用户访问一个网页的时候,可以获取用户的设备信息,返回相应的网站页面(一个官网的网页都会使用移动端和PC端两套代码书写,很少使用响应式布局来书写,因为响应式布局比较麻烦,也无法判断网页是该返回移动端的网页还是Pc端的网站。

let Oapp=document.querySelector("#app");
        Oapp.addEventListener("touchstart",function(e){
          //navigator 获取用户浏览器信息(UA:User-Agent)
          let userAgentInfo=navigator;
          console.log(userAgentInfo);
        });
        //navigator.appName 返回浏览器的名称
        //navigator.appCodeName 返回浏览器的代码名
        //navigator.appVersion 返回浏览器的平台和版本信息
        document.write("版本信息:"+navigator.appVersion)

获取设备信息常用API

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值