UC浏览器中touch事件的异常记录

  以前也在UC上面栽过几个坑,不过都是页面显示方面的。上个周的时候,商品详情页重做,要添加个上拉显示详情的效果。

  有两个条件需要判断:

    1、是否到达底部;

    2、到达底部之后拖动的y轴距离。
  效果写完后,本地chrome模拟和手机chrome测试OK,在手机QQ、微信内置浏览器以及UC出现BUG。
  经多次测试发现在UC中有如下几个问题:

    1、touch事件的顺序不一致

     手指触摸后进行拖动操作然后离开屏幕,在chrome里面的顺序是:touchstart->touchmove->touchend。
     而在UC下面的顺序是touchstart->touchmove,然后就没有了!touchend绑定的函数死活都不触发。

     后来查了下,UC在触摸结束离开屏幕的时候触发的事件是touchcancel,得同时对touchcancel进行判断。

    2、touchcancel函数最后计算出来的差值也不一致

     手指在屏幕进行拖动操作的时候,在chrome里面会生成touchmove*n个事件。

      而在UC里面,之后在拖动的最初会触发一个touchmove事件,对,就是一个!

      所以拖动同样的距离,在UC里面计算出来的差值基本上都是个位数。

测试代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<meta http-equiv="Expires" CONTENT="-1">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">
<meta charset="UTF-8">
<title>uc touch test</title>
<style type="text/css">
#touchBox {margin: 100px auto; width: 300px; height: 300px;border: 1px solid #000;}
p {color:#000;}
</style>
</head>
<body>
    <div id="touchBox">
        <p>初始: <span id="coordStart"></span></p>
        <p>移动:<span id="coordMove"></span></p>
        <p>结束:<span id="coordEnd"></span></p>
        <p>事件:<span id="moveEvent"></span></p>
    </div>
</body>
</html>
<script type="text/javascript">
    var x,y,ex,ey,mx,my;
    var s = document.getElementById(‘coordStart‘),
        m = document.getElementById(‘coordMove‘),
        e = document.getElementById(‘coordEnd‘),
        ev = document.getElementById(‘moveEvent‘),
        b = document.getElementById(‘touchBox‘);

    b.addEventListener("touchstart",touchStart,false);
    b.addEventListener("touchmove",touchMove,false);
    b.addEventListener("touchend",touchEnd,false);
    b.addEventListener("touchcancel",touchCancel,false);

    function touchStart(){
        var touch = event.targetTouches[0];
        x = touch.pageX;
        y = touch.pageY;
        s.innerHTML = x+","+y;
    }

    function touchMove(){
        var touch = event.targetTouches[0];
        mx = touch.pageX;
        my = touch.pageY;
        ex = x - touch.pageX;
        ey = y - touch.pageY;
        m.innerHTML = mx+","+my;
    }

    function touchEnd(){
        ev.innerHTML = ‘touchend‘;
        e.innerHTML = ex+","+ey;
    }

    function touchCancel(){
        ev.innerHTML = ‘touchcancel‘;
        e.innerHTML = ex+","+ey;
    }
</script>

    

      

时间: 2024-10-02 07:17:02

UC浏览器中touch事件的异常记录的相关文章

浏览器中关于事件的那点事儿

在前端中,有一个很重要的概念就是事件.我对于事件的理解就是使用者对浏览器进行的一个动作,或者说一个操作. 本文会介绍很多与事件有关的东西,虽然我的出发点有那么点一网打尽的意思m不过也难以盖全,所以就把最常用,最基本也相对重要的内容拿出来记录一下. Javascript绑定事件的方式 传统的事件绑定 因为各种历史原因,事件的绑定在不同的浏览器总是有不同的写法,当然现在可能大多数人都已经习惯于jQuery的事件绑定,而不清楚javascript的原生事件绑定是什么样子. 非常传统的事件的绑定方式,是

浏览器中关于事件的那点事儿(转)

摘要:事件在Web前端领域有很重要的地位,很多重要的知识点都与事件有关.本文旨在对常用的事件相关知识做一个汇总和记录. 在前端中,有一个很重要的概念就是事件.我对于事件的理解就是使用者对浏览器进行的一个动作,或者说一个操作. 本文会介绍很多与事件有关的东西,虽然我的出发点有那么点一网打尽的意思m不过也难以盖全,所以就把最常用,最基本也相对重要的内容拿出来记录一下. Javascript绑定事件的方式 传统的事件绑定 因为各种历史原因,事件的绑定在不同的浏览器总是有不同的写法,当然现在可能大多数人

【转】浏览器中关于事件的那点事儿

转自:http://my.oschina.net/blogshi/blog/192658 摘要:事件在Web前端领域有很重要的地位,很多重要的知识点都与事件有关.本文旨在对常用的事件相关知识做一个汇总和记录.   在前端中,有一个很重要的概念就是事件.我对于事件的理解就是使用者对浏览器进行的一个动作,或者说一个操作. 本文会介绍很多与事件有关的东西,虽然我的出发点有那么点一网打尽的意思m不过也难以盖全,所以就把最常用,最基本也相对重要的内容拿出来记录一下. Javascript绑定事件的方式 传

Android中Touch事件传递总结

TouchEvent TouchEvent 分三种事件:down.move.up. 其中move事件在一个操作中(这里说的一个操作就是用户与屏幕的交互,即由down到up的动作序列)可能会发生多次. 但是,我们认为一个动作序列会包含以上三种事件,因此,在事件处理中就是要处理好这个过程,而最重要的就是down事件,这是一个动作序列的起始,没有down谈不上后面的事件了. 所以,我们把消耗down事件的类当做是这个动作序列的最终载体. 如果Down事件不归你处理,那这个动作序列的move,up也不归

Android中Touch事件的传递机制

由于之前对于android的事件传递机制不了解,今天正好不忙,赶紧抽出时间来理一下这方面的知识,本文结合demo,对android的事件传递机制进行分析. 在事件传递过程中,离不开以下三个方法: 1.dispatchTouchEvent 分发touchEvent,返回值为true时表示TouchEvent被当前View处理,事件不会向下层传递(包括后续的onInterceptTouchEvent和onTouchEvent), dispatchTouchEvent会收到后续的ACTION_MOVE

UC 浏览器远程调试手机web网页记录

浏览器远程调试插件有很多,本来要使用chrome浏览器的调试插件的,但是需要FQ才能使用(公司网络有限制,果断放弃),最终选择使用UC浏览器的. 其实UC官网插件使用已经介绍的很详细了,但是有几处坑需要注意一下额! 参考进行配置UC远程调试:http://plus.uc.cn/document/webapp/doc5.html 1,如下图,如果是win64位系统,应该解压到C:\Windows\SysWOW64目录下 2,如下图,安装adb成功后,执行以下命令进行映射端口时,命令之间有空格,可以

【笔记】uc浏览器中以及移动端浏览器中元素垂直居中的方法

关于css 的垂直居中有很多方法,但是uc 浏览器还真是一个移动端浏览器清流之中的泥石流!! 最近在慕课网学习vue webApp 的制作,其中有一个是让元素内的文字与图标垂直居中 电脑端的chrome 和手机浏览器的默认浏览器打开都没有什么差异,唯独uc 浏览器打开会有一点点的偏移,心里很不舒服于是把vertical-align 的属性都配对了一遍最终找到了办法 先看代码 <!-- 弹出层显示按钮 --> <div v-if="seller.data.supports&quo

WAP端 touch事件触发顺序记录

IOS7.0 safari 滚动滚动条的时候, 最后手指放开 (scroll 总是在 touchend后面,所以要用 setTimeout) touchstart touchmove(多个) touchend scroll(一个)IOS8.4 safari 滚动滚动条的时候 touchstart touchmove(多个) scroll(0个或者多个) touchend scroll(0个或者多个) IOS7.0 和 IOS8.4 UC 浏览器 10.6.5.627 滚动滚动条的时候 正常滚动的

关于 Chrome 浏览器中 onresize 事件的 Bug

我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 bug 吧,估计他们的工程师认为浏览器打开时也算窗口发生了变化.解决问题之前我搜索了相关内容,确实有关于 Chrome 的 onresize 的问题,但跟我遇到的问题还有很大不同.我把这个问题抽象为以下函数: function init() { alert('a'); window.onresiz