Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mobile backbone.js在同一功能上触发一个触摸/鼠标事件_Mobile_Backbone.js - Fatal编程技术网

Mobile backbone.js在同一功能上触发一个触摸/鼠标事件

Mobile backbone.js在同一功能上触发一个触摸/鼠标事件,mobile,backbone.js,Mobile,Backbone.js,我有一个主干视图,其中包含移动和桌面版本的事件: events: { "touchstart .button": "action1", "mousedown .button": "action1", "touchend .button": "action2", "mouseup .button": "action2", } 我只希望从我的移动设备触摸时触发一个事件。目前在我的一个移动设备中,action1被触发了两次 我曾尝试使用来自的自定义方法,但不知何故,在An

我有一个主干视图,其中包含移动和桌面版本的事件:

events: {
  "touchstart .button": "action1",
  "mousedown  .button": "action1",
  "touchend   .button": "action2",
  "mouseup    .button": "action2",
}
我只希望从我的移动设备触摸时触发一个事件。目前在我的一个移动设备中,action1被触发了两次

我曾尝试使用来自的自定义方法,但不知何故,在Android 2.3中,touchstart之后的touchend自定义方法不会被触发,而是使用纯“touchend”触发


因此,我在想,如果触发了“touchend”,Backbone.js是否可以阻止“mouseup”被触发。

一个黑客解决方案是使用
下划线.js
函数
throttle
使该函数每x毫秒只能调用一次。检查文档,看看它是否适合您的需要

最后的解决办法是:

action1: _.throttle(function(params) {
    // Do what you do here
}, 400); // The timeframe within which the function can be called just once.

一个老套的解决方案是使用
underline.js
函数
throttle
使其能够使函数每x毫秒只能调用一次。检查文档,看看它是否适合您的需要

最后的解决办法是:

action1: _.throttle(function(params) {
    // Do what you do here
}, 400); // The timeframe within which the function can be called just once.

另一种方法,对我来说感觉稍微不那么刺耳:

我喜欢测试触摸事件,并在应用程序初始化时设置一个全局变量

MyApp.clickEvent=(“窗口”中的“ontouchstart”)?“touchstart”:“鼠标向下”

然后,在我看来,我会执行以下操作:

events: function() {
    var _events = {};
    _events[MyApp.clickEvent + " .button"] = "action1";

    return _events;
}

另一种方法,对我来说感觉稍微不那么刺耳:

我喜欢测试触摸事件,并在应用程序初始化时设置一个全局变量

MyApp.clickEvent=(“窗口”中的“ontouchstart”)?“touchstart”:“鼠标向下”

然后,在我看来,我会执行以下操作:

events: function() {
    var _events = {};
    _events[MyApp.clickEvent + " .button"] = "action1";

    return _events;
}

您可以定义一个功能来确定触摸设备,如:

function is_touch_device() {  
  try {  
    document.createEvent("TouchEvent");  
    return true;  
  } catch (e) {  
    return false;  
  }  
} 
  • 此函数来自另一个线程
然后在事件中使用它:

events: function() {
    if(is_touch_device) {
       return {
          /// touch events
       }

    } else {
      return {
        /// mouse events
      }


}
}

如果它们是完全相同的DERG,那么答案将是一个较少冗余的答案

您可以定义一个函数来确定触摸设备,如:

function is_touch_device() {  
  try {  
    document.createEvent("TouchEvent");  
    return true;  
  } catch (e) {  
    return false;  
  }  
} 
  • 此函数来自另一个线程
然后在事件中使用它:

events: function() {
    if(is_touch_device) {
       return {
          /// touch events
       }

    } else {
      return {
        /// mouse events
      }


}
}
如果它们完全相同,那么DERG的答案就不那么多余了