在cordova / ionic应用程序中,有一个上一级监听器和一个上级监听器,该上一级监听器连接了上级监听器,下一级子监听器则订阅了选项卡上的事件,如下所示:
<div on-hold="doSomething()">
<div on-tap="doSomething2()">...</div>
</div>
它有时会起作用,但是在按下时间大于500ms时,有些情况下执行了选项卡操作而不是保持操作。
可以用更好的方式做到这一点吗?请考虑到child-div完全填写了父项,因此应该保持这种状态。
提前致谢。
在尝试了stopPropagation之后,我想出了以下答案,需要setTimeout来检查是否握住了鼠标/光标。
当仅单击child-div(red)时,就会发出doSomething2的警报,而按住child-div警报时,则会发出parent的doSomething:
var holding = false;
var secondFunctionCall = false;
document.getElementById("c1").addEventListener('mousedown', function(e) {
holding = true;
setTimeout(function(){
if(holding){
secondFunctionCall = false;
alert("calling doSomething()");
}
},500);
}, false);
document.getElementById("c2").addEventListener('mousedown', function(e) {
holding = true;
secondFunctionCall = true;
}, false);
document.getElementById("c2").addEventListener('mouseup', function(e) {
holding = false;
if(secondFunctionCall){
alert("calling doSomething2()");
}
}, false);
#c2 {
width: 200px;
height: 200px;
background-color: red;
}
#c1 {
width: 220px;
height: 220px;
background-color: yellow;
}
<div id="c1">
<div id="c2">
</div>
</div>
当将此代码转换为cordova-app时,鼠标事件类型必须替换为触摸事件类型,因为此处已对此进行了解答。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句