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的答案就不那么多余了