如何限制拖动元素在interact.js中重叠

2024-04-15

容器中的拖动元素不应该重叠,我们如何限制。 请帮忙

交互API链接 http://interactjs.io/


抱歉,没有尽早回答这个问题。我相信你必须手动检查元素的顶部、底部、左侧和右侧边缘的位置,所以这就是我所做的:

//Call this function from within your .on('dragmove') method.
//It should replace your translations.

function noOverlap(event, overlapElements){
    var dx = event.dx;
    var dy = event.dy;

    //just for flagging when the target would overlap another element
    var overlap = false;
    var targetDims = event.target.getBoundingClientRect();

    for(i = 0; i < overlapElements.length; i++){
        var overlapElementDims =  
        overlapElements[i].getBoundingClientRect();

        //make sure the element doesn't look at itself..
        if(overlapElements[i] != event.target){
            //checks if the target "doesn't" overlap
            if(((targetDims.right + dx) < (overlapElementDims.left + 1)) 
            ||((targetDims.left + 1 + dx) > (overlapElementDims.right)) 
            ||((targetDims.top + 1 + dy) > (overlapElementDims.bottom)) 
            ||((targetDims.bottom + dy) < (overlapElementDims.top + 1))){

            //Basically, the target element doesn't overlap the current 
            //element in the HTMLCollection, do nothing and go to the 
            //next iterate
            }
            else{
                //This is if the target element would overlap the current element

                //set overlap to true and break out of the for loop to conserve time.

                overlap = true;
                break;
            }
        }
    };

    if(overlap === false){

        //if there's no overlap, do your normal stuff, like:
        event.target.x += dx;
        event.target.y += dy;

        event.target.style.webkitTransform =
            event.target.style.transform =
                'translate(' + event.target.x + 'px, ' + event.target.y + 'px)';

        //then reset dx and dy
        dy = 0;
        dx = 0;
    }
    else{
        if(event.interaction.pointers[event.interaction.pointers.length - 1].type 
        === "pointerup"){

            //check if the target "is" in the restriction zone
            var restriction = 
            interact(event.target).options.drag.restrict.restriction;
            var restrictionDims = restriction.getBoundingClientRect();

            if((targetDims.right > restrictionDims.right) || 
            (targetDims.left < restrictionDims.left) || 
            (targetDims.bottom > restrictionDims.bottom) || 
            (targetDims.top < restrictionDims.top)){
                event.target.style.webkitTransform =
                event.target.style.transform =
                    'translate(0px, 0px)';

                //then reset dx and dy
                dy = 0;
                dx = 0;

                //then reset x and y
                event.target.x = 0;
                event.target.y = 0;
            }
        }       
    } 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何限制拖动元素在interact.js中重叠 的相关文章

随机推荐

  • Javascript 单击打开和关闭菜单,不使用 jquery

    我想要一个菜单 可以单击打开 然后单击关闭 与悬停菜单类似 但需要单击 打开和单击关闭 我有三个可见的列表项 下面有子菜单 这些是用 css display none 隐藏的 我可以让它们显示 使用关键字 this 以及一个用于检查是否有
  • 如何检查 Perl 中打开(文件)是否成功?

    下面的代码 不太像 Perl 风格 usr bin perl if e mydir print directory doesn t exist n open my fh gt mydir file txt if fh print file
  • 设置 npm 注册表 URL 的用户名和密码

    我正在尝试使用 npm 从 url 安装软件包 http 主机 80 http host 80 我做了以下事情 npm 配置设置 strict ssl false npm 配置设置注册表 npm 代理http 主机 端口 http host
  • JavaScript - 控制 document.write 的插入点

    我想创建一个运行第三方脚本的页面 其中包括document write当 DOM 已经完全加载之后 我的页面不是 XHTML 我的问题是 document write 正在覆盖我自己的页面 这就是 DOM 加载后它所做的事情 我尝试重写 d
  • 使用谷歌地图 API iOS 进行反向地理编码

    我正在使用以下代码进行反向地理编码 void locationManager CLLocationManager manager didUpdateToLocation CLLocation newLocation fromLocation
  • Facebook API 人物搜索按国家/地区过滤

    我正在尝试使用 Facebook API Graph API 或 FQL 以有效者为准 搜索人员 到目前为止 它工作得很好 但我无法按国家或语言对其进行过滤 我目前正在检索此网址 https graph facebook com searc
  • 无法分配给变量,因为它是借用的

    我试图在循环中重新分配变量 但我不断遇到cannot assign to cur node because it is borrowed 下面为了简单起见我注释掉了循环 这是同样的问题 我该如何处理这个问题 fn naive largest
  • Java 未知格式转换异常

    下面的代码引发了这个错误 我不知道为什么 将 String format 输出到str变量 但我不知道它出了什么问题 Exception in thread main java util UnknownFormatConversionExc
  • Android 中的屏幕截图

    我想开发一个应用程序来截取 android 屏幕的屏幕截图 有人知道怎么做吗 这类似于 koushik duttas 屏幕截图 但是没有使用 root 并且有人有 koushik dutta 屏幕截图应用程序正在运行 不适合我 请让我知道
  • Kubernetes Dashboard 在整个网站上都是“被禁止的”

    我在 Kubernetes 的仪表板网站上到处都看到 被禁止 见图 重现 通过站点而不是从 shell 创建 Google Kubernetes 集群 选择 Kubernetes 版本 1 8 6 通过连接按钮打开外壳 gcloud con
  • Autobahn websockets Android 演示崩溃

    我是 websockets 的新手 我一直在使用 Autobahn websocket 来制作一个更大的项目 它在 python 和 js 版本中工作得很好 但我在 Android API 上遇到了麻烦 我正在遵循中的教程http www
  • 取消任务关闭窗口。如何检测任务是否同步返回?

    我遵循一种相当常见的模式 使用异步对话框方法确认 取消主窗口关闭 但是 在我调用来呈现对话框的异步任务中 在某些情况下我会立即返回布尔值 而不是等待对话框任务方法的返回 在这些情况下会抛出异常 System InvalidOperation
  • WPF/XAML:如何使 TextBlock 中的所有文本大写?

    我希望 TextBlock 中的所有字符都以大写形式显示
  • 无法使用 iframe 标签在 WebView 中播放视频?

    我正在使用以下数据来显示WebView 这些是 HTML 标签以及 指的是视频的 iframe 现在的问题是 当我点击它时 它显示播放按钮 但无法播放视频 我可以在里面播放这个视频吗WebView or not lt p gt lt p g
  • 反汇编中演示 volatile 的示例 C 代码?

    演示反汇编中易失性和非易失性之间差异的简短说明性 C 程序是什么 ie int main volatile int x vs int main int x 我们可以用什么来代替两者 这样生成的代码就不同了 例如 x 0 If x is no
  • 从原始 r 和 s 创建 DER 格式的 ECDSA 签名

    我有一个原始 ECDSA 签名 R 和 S 值 我需要 DER 编码版本的签名 有没有一种直接的方法可以使用 c 接口在 openssl 中执行此操作 我目前的尝试是使用i2d ECDSA SIG const ECDSA SIG sig u
  • 单选按钮选中更改事件触发两次

    请阅读我的问题 它不是重复的问题 我在 Windows 窗体上有三个单选按钮 所有这些按钮都具有关联的常见 CheckedChanged 事件 当我单击任何这些单选按钮时 它会触发 CheckedChanged 事件两次 这是我的代码 pr
  • 什么可能导致 ASP.NET 应用程序忘记用户?

    我有一个 ASP NET 应用程序 它似乎在一段时间后忘记了用户已登录 我正在使用会员资格提供商 当选择 记住 登录时 它会在会话期间记住它 我什至可以关闭浏览器 重新启动并返回 它仍然会登录 但过了一段时间它就会忘记 而且似乎在任何旧时间
  • 在 ASP.NET 3.5 中创建 RSS 源

    如何使用 C 在 ASP NET 3 5 中创建 RSS 提要 哪些框架部分可以帮助 NET 开发人员更轻松地发布 RSS 或 Atom 提要 NET 4 中是否有任何额外功能可以使此任务比 3 5 中更容易 3 5 中有一个新的命名空间
  • 如何限制拖动元素在interact.js中重叠

    容器中的拖动元素不应该重叠 我们如何限制 请帮忙 交互API链接 http interactjs io 抱歉 没有尽早回答这个问题 我相信你必须手动检查元素的顶部 底部 左侧和右侧边缘的位置 所以这就是我所做的 Call this func