标签: touchstart

如何绑定'touchstart'和'click'事件但不回复两者?

我正在开发一个必须在各种设备上运行的移动网站.黑莓手机让我头疼的是黑莓.

我们需要支持键盘点击和触摸事件.

理想情况下,我只是使用:

$thing.click(function(){...})
Run Code Online (Sandbox Code Playgroud)

但我们遇到的问题是,这些黑莓设备中的一些从触摸到触发点击时会有非常烦人的延迟.

解决方法是改为使用touchstart:

$thing.bind('touchstart', function(event){...})
Run Code Online (Sandbox Code Playgroud)

但是,如何绑定这两个事件,但只触发一个?我仍然需要键盘设备的click事件,但当然,如果我使用触摸设备,则不希望点击事件触发.

一个额外的问题:是否有这样做,另外还适用于甚至没有touchstart事件的浏览器?在研究这个问题时,看起来BlackBerry OS5不支持touchstart,因此还需要依赖该浏览器的点击事件.

附录:

也许更全面的问题是:

使用jQuery,是否可以/建议使用相同的绑定处理触摸交互和鼠标交互?

理想情况下,答案是肯定的.如果没有,我有一些选择:

1)我们使用WURFL获取设备信息,因此可以创建我们自己的设备矩阵.根据设备的不同,我们将使用touchstart或点击.

2)通过JS检测浏览器中的触摸支持(我需要对此进行更多的研究,但似乎这是可行的).

但是,这仍然存在一个问题:支持BOTH的设备如何.我们支持的一些手机(即Nokias和黑莓手机)同时具有触摸屏键盘.所以这种方式让我完全回到原来的问题......是否有办法允许两者同时以某种方式?

jquery click touchstart

193
推荐指数
8
解决办法
37万
查看次数

在Windows Phone的IE Touchstart事件在几秒钟后自动结束

我有一个非常具体的问题.我正在为手机写一个网页,上面有一个按钮.我正在检测touchevent包括IE在内的每个浏览器,但在IE上它是非常具体的.几秒钟后它会自动结束.你能以某种方式帮助我吗?这是我的代码(修改过的代码,但仍然无法正常工作):

if (window.navigator.pointerEnabled) {
    tapButton.addEventListener("pointerup", function(e) {
        e.preventDefault();
        addClass(this, 'clicked');
        buttonTouched = true;
    }, false);
    tapButton.addEventListener("pointerdown", function(e) {
        e.preventDefault();
        removeClass(this, 'clicked');
        buttonTouched = false;
    }, false);
    alert("pointerEnabled");
}
else if (window.navigator.msPointerEnabled) {
    tapButton.addEventListener("MSPointerDown", function(e) {
        e.preventDefault();
        addClass(this, 'clicked');
        buttonTouched = true;
    }, false);
    tapButton.addEventListener("MSPointerUp", function(e) {
        e.preventDefault();
        removeClass(this, 'clicked');
        buttonTouched = false;
    }, false);
    alert("mspointerEnabled");
}
else {
    alert("ordinary touch");
    tapButton.addEventListener('touchstart', function(e) {
        e.preventDefault();
        addClass(this, 'clicked');
        buttonTouched = true;
    }, false);
    tapButton.addEventListener('touchend', function(e) {
        e.preventDefault();
        removeClass(this, 'clicked');
        buttonTouched …
Run Code Online (Sandbox Code Playgroud)

javascript internet-explorer windows-phone touchstart

39
推荐指数
1
解决办法
1018
查看次数

Angularjs中的ng-touchstart和ng-touchend

我有上触发功能的元件ng-mousedownng-mouseup.但是,它在触摸屏上不起作用,是否有任何指令ng-touchstartng-touchend

javascript mouseup mousedown touchstart angularjs

16
推荐指数
2
解决办法
3万
查看次数

使用 JavaScript 确定平板电脑上的触摸位置

我有一个名为“元素”的对象。如果有人触摸平板电脑,我想返回触摸位置相对于对象的 x 和 y 坐标,即对象的左上角具有坐标 x=0 和 y=0。

我知道如何在台式机上实现这一点:

$(function() {
$(document).mousedown(function(e) {
  var offset = $("#element").offset();
  var relativeX = (e.pageX - offset.left);
  var relativeY = (e.pageY - offset.top);
  alert(relativeX+':'+relativeY);
  $(".position").val("afaf");
});
});
Run Code Online (Sandbox Code Playgroud)

所以我猜应该用“touchstart”代替“mousedown”这个词。但是,它仍然不起作用。

如何更改上面的代码,使其适用于带有“touchstart”而不是“mousedown”的平板电脑?

javascript position touch tablet touchstart

12
推荐指数
2
解决办法
1万
查看次数

Android浏览器可以快速连续两次点击事件

我正在尝试使用JavaScript和jQuery来捕获触摸事件.但是我在Android 2.3.2上的Web浏览器中看到了一些非常奇怪的行为:每当我点击屏幕,然后快速点击屏幕上的其他位置时,浏览器:

  • 暂时显示橙色边框并突出显示整个屏幕,
  • 发给我错误的事件.

橙色边框似乎只是同一个潜在问题的一个相关症状,所以我并不太担心它 - 它实际上很方便能够告诉浏览器何时搞砸了.我真正想知道的是,我如何能够持续获得两次快速点击的正确触摸事件?我相信,当问题得到解决时,橙色边框也会消失.

以下是我到目前为止所制定的所有痛苦细节.

这是一个显示问题的页面,并显示有关收到的每个事件的详细信息和时间的大量诊断信息.如果你点击蓝色矩形,你肯定会得到橙色闪光/坏事件,然后快速点击黑色矩形.

我的jQuery代码非常标准.该log功能的实施并不重要; 问题是浏览器在应该的时候没有调用它.

el = $('#battle');
el.on('touchstart', function(event) {
  log(event);
  return event.preventDefault();
});
el.on('touchend', function(event) {
  return log(event);
});
el.on('touchcancel', function(event) {
  return log(event);
});
el.mousedown(function(event) {
  log(event);
  return event.preventDefault();
});
return el.mouseup(function(event) {
  return log(event);
});
Run Code Online (Sandbox Code Playgroud)

关于我最初描述的现象的更多细节:

橙色边框和突出显示:这是相同的橙色边框,并突出显示浏览器在单击时绘制超链接.但是页面上没有超链接,浏览器在整个屏幕周围绘制橙色边框 - 或者更具体地说,是围绕外部<div id="battle">我通过jQuery挂钩事件.

错误事件:在我的touchstart事件处理程序,我打电话event.preventDefault(),告诉浏览器不滚动,而不是合成鼠标事件,等等.因此,我希望只得到touchstarttouchend事件.我做了,第一次点击.但不是touchstart/ touchend对于第二次敲击,我得到的所有数量的触摸事件的组合,合成的鼠标事件,以及偶尔touchcancel的第二次敲击,或第一次轻触甚至重复的事件.详情如下.

此行为也仅在非常特殊的情况下发生:

  • 第一个水龙头必须短(小于~200ms).
  • 此后第二次敲击必须快速到达(第一次敲击后不到约450ms touchstart). …

javascript jquery android touchstart

9
推荐指数
1
解决办法
2922
查看次数

如何在iOS设备上用touchstart替换click

目的

单击时关闭锚标记的父div.在下面的代码中,我想在用户单击锚标记close_performance_tt时隐藏div performance_tt.

问题

花了几个小时后,无法让它在iOS设备上运行.在其他一切工作正常,甚至是BlackBerry 10设备.

<div id="performance_tt" style="display: none;width: 300px;height: 200;overflow: auto;padding: 5px;background-color: yellow;">
    <div>Website performance has become an important consideration for most sites.
    The speed of a website affects usage and user satisfaction, as well as search engine rankings, a factor that directly correlates to revenue and retention.
    As a result, creating a system that is optimized for fast responses and low latency is key.</div>
    <a id="close_performance_tt" href="#">Close</a>
    <script>
    var userAgent = navigator.userAgent.toLowerCase();
    var isiOS …
Run Code Online (Sandbox Code Playgroud)

jquery click ipad touchstart

8
推荐指数
1
解决办法
3万
查看次数

如何在我的手指已经在屏幕上之后添加到DOM的元素上捕获touchmove事件?

我正在为iPad开发一个javascript/html5项目.

我需要能够捕获一个元素上的touchmove事件,该元素DOMtouchstart事件被触发后直到事件发生之后才被添加到该元素(即直到一个人将手指放在屏幕上之后).

我试过模拟一个touchstart事件并以编程方式触发它...

$( "#container" ).append( element );
element.on( "touchmove", doStuff );
var ev = $.Event( "touchstart" );
element.trigger( ev );
Run Code Online (Sandbox Code Playgroud)

......但这不起作用.我可以doStuff开始射击的唯一方法是抬起手指,然后再次触摸屏幕,触发第二个touchstart事件.

如何在屏幕上已经touchmove添加到DOM手指之后的元素上捕获事件?

javascript jquery touchstart jquery-events

7
推荐指数
1
解决办法
2万
查看次数

jquery touchstart没有处理文档

如果您使用以下语法,一个简单的touchstart事件将起作用:http: //jsfiddle.net/rwdu4hb9/

$(function(){
    $('.test').on('touchstart', function(){
        alert("Clicked");
    });
});
Run Code Online (Sandbox Code Playgroud)

但是如果你想为所有即将到来的元素添加你的活动,请$(document).on(..)点击这里:http: //jsfiddle.net/rwdu4hb9/1/

$(function(){
    $(document).on('touchstart', '.test', function(){
        alert("Clicked");
    });
});
Run Code Online (Sandbox Code Playgroud)

该事件不会被触发.这次电话有什么问题?

使用iOS 8.0.2在iPad上测试

jquery ipad touchstart

7
推荐指数
1
解决办法
6602
查看次数

如果已经滚动(在 iPhone 上),则不会在可滚动 div 上触发 touchstart 事件

我在 iPhone 6 设备上滚动时遇到了这个问题(在 Safari 和 Chrome 上测试):

给定一个可滚动的 div,如果我在 div 已经处于惯性滚动运动时触摸它,滚动运动会按预期停止,但touchstart事件根本不会触发。

当小米Android装置(在Chrome测试)测试的滚动停止touchstart事件被触发。

为什么touchstart没有触发?。这是 iPhone 上的标准行为吗?

我已经设置了一个小提琴来测试这种行为:

https://fiddle.jshell.net/galoxia/L63wj9or/

只需做出手势以“激活”蓝色框上的惯性滚动,然后再次触摸以停止它。在 Android 上,您将touchstart在黄色框中看到。在 iPhone 上你不会。

scroll mobile-safari touch-event touchstart web

7
推荐指数
1
解决办法
746
查看次数

Android - JavaScript:在缩放或滚动页面之前不会触发touchstart事件

在我的Android应用程序中,用户可以使用ViewPager浏览一些HTML页面,用户可以触摸要突出显示的元素.

问题是当尝试使用以下代码使用javascript获取触摸事件时,elementFromPoint在导航到新页面时返回null,但在用户缩放页面或滚动页面后,它可以正常工作.

我发现touchstart事件的注册发生在缩放或滚动页面之后.所以它在那之后工作,虽然它在$(document).ready()上注册

        $(document).ready(function(){
            document.addEventListener("touchstart", touchstart, false);     
        });     

        function touchstart(e) {                              
            var x = e.targetTouches[0].clientX; 
            var y = e.targetTouches[0].clientY;                             
             el = document.elementFromPoint(x, y);  
            }
Run Code Online (Sandbox Code Playgroud)

谢谢

javascript android webview touch-event touchstart

6
推荐指数
1
解决办法
7730
查看次数