我试图用HammerJS检测双击和平移(轻按一次,然后按,移动和释放),但我不知道该怎么做。我阅读了文档,但我不明白我怎么也找不到一个简单的"潘与'#34; double"点击并平移。
实际上我可以使用以下代码检测它,但我想知道是否有更好的解决方案。
var gestureManager = new Hammer.Manager( this.canvas, {
recognizers: [
[ Hammer.Tap ],
[ Hammer.Pan ],
[ Hammer.Pan, { event: 'panend' } ]
]
);
gestureManager.on( 'tap', ( ev ) => {
this.tapTime = new Date().getTime();
});
gestureManager.on( 'pan', ( ev ) => {
var panTime = new Date().getTime();
if ( panTime - this.tapTime < 750 ) {
this.isDragEnabled = true;
...
}
});
gestureManager.on( 'panend', ( ev ) => {
if ( this.isDragEnabled ) {
...
this.isDragEnabled = false;
}
});
有什么建议吗?
答案 0 :(得分:0)
我做过类似的事情,试图在触摸持续一段时间后检测到一个平底锅。它基于您可以启用和禁用识别器的事实。
var shortPress = new Hammer.Press({
time: 500, // how long to press before you can start dragging
event: 'shortPress'
});
var pan = new Hammer.Pan({ event: 'pan', enable: false });
var mc = new Hammer.Manager(element);
mc.add(shortPress);
mc.add(pan);
mc.on("shortPress", function(ev) {
pan.set({ enable: true });
});
mc.on("pan", function(ev) {
// do whatever you need
});
// don't forget to disable the pan recognizer when the dragging ends
mc.on("panend pancancel shortPressup", function(ev) {
pan.set({ enable: false });
});
但是对于你的双击和平移场景,我认为它更复杂,因为你不能只用一个带有2个水龙头的水龙头来切换按下识别器,因为只有在你拿起它时才能检测到它。手指。因此,它会更像是检测一个水龙头,启用平移,但如果在一定时间后没有启动,则设置超时以禁用它。但是你已经这样做了,在这种情况下你的代码似乎更简单。
顺便说一句,您可能还希望在平移前允许按下,以便在您点按两次时保持该情况,但保持手指静止一段时间,然后才移动它。