javascript - Dragula 从 HammerJS 接收触摸事件?
问题描述
我想将 Dragula 与 HammerJS 结合起来,在 HammerJS 中的新闻事件之后,拖动只发生在 Dragula 中。使用当前代码,用户必须抬起手指并再次触摸拖动事件才能开始发生。
有没有办法在没有抬起手指的情况下长时间触摸后发生拖动事件?
目前我有一个名为 touch 的全局变量。只要 Touch 为真,就会返回 Dragula 拖动事件。我将 HammerJS 设置为使 touch 变量为 false,然后让 dragula 触摸事件发生。问题是它需要用户再次触摸屏幕才能发生 Dragula 触摸事件。
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="dragula.min.css">
<style>
body div {
height: 50px;
width: 50px;
background-color: burlywood;
margin-bottom: 20px;
}
</style>
</head>
<body>
<div>First</div>
<div>Second</div>
<div>Third</div>
<div>Fourth</div>
<div>Fifth</div>
<script src="dragula.min.js"></script>
<script src="hammer.min.js"></script>
<script>
var touch = true;
var scrol;
var subjs = document.querySelectorAll("body div");
subjs.forEach(function (entry) {
hammer = new Hammer(entry, {dragLockToAxis: true, dragBlockHorizontal: true}),
hammer.on('press', function(e){
touch = false;
e.target.classList.add("dragging");
document.querySelector('body div').addEventListener('touchmove', function(e) {
e.preventDefault();
console.log(e.changedTouches[0].clientY);
if (e.changedTouches[0].clientY < 80) {
if (scrol == undefined) {
scrol = setInterval(view.pageScroll,100);
}
} else if (e.changedTouches[0].clientY > 80 && e.changedTouches[0].clientY < (window.screen.height - 80)) {
console.log(scrol)
clearInterval(scrol);
scrol = undefined;
} else if (e.changedTouches[0].clientY > (window.screen.height - 80)) {
if (scrol == undefined) {
scrol = setInterval(view.pageScrollDown,100);
}
}
});
});
});
drake = dragula([document.querySelector('body')],{invalid: function (el, handle) {
return touch; // don't prevent any drags from initiating by default
}});
drake.on("drop",function(el, target, source, sibling){
clearInterval(scrol);
});
drake.on("dragend",function(el){
touch = true;
el.classList.remove('dragging')
});
var list = document.querySelector('body').children;
for (var i = 0; i < list.length; i++) {
list[i].addEventListener('click', function(){
if (touch == true) {
drake.destroy();
}
});
}
</script>
</body>
</html>
有没有办法从 HammerJS 事件启动 Dragula 触摸事件?
解决方案
推荐阅读
- go - 如何处理 Go 中包中支持文件的路径?
- regex - 如何获得正确的属性
- java - 即使使用 auto.offset.reset,我的 Java 消费者也无法从代理读取消息 - 最早
- lua - 尝试编辑包含特定键的数组
- apache-kafka - 如何编辑 JMX 配置文件以使 Kafka 公开主题?
- php - 使用 PHP Oauth 类创建 API 身份验证
- regex - 试图从 Postman 中的 post 调用中获取会话值:TypeError: postman.getResponseHeader is not a function
- r - 使用R查找哪些点位于缓冲区内?
- python - 我无法将字段命名为“来自”
- javascript - 由于“X-frame-options”设置为“拒绝”,Facebook 评论在网站的所有页面上被禁用