javascript - jQuery:可拖动以下行:视觉“链接这两件事”指示器
问题描述
在 Adobe AfterEffects 中,您可以使用“育儿”工具将图层相互链接。(我想这就是它的名称,已经有一段时间了。)您单击并按住图标,然后将其拖到目的地。作为视觉指示器,它从父级到鼠标指针绘制一条线。
Draggable/droppable/helper icon...我已经得到了所有这些。我找不到的信息——主要是因为我找不到到达那里的谷歌搜索词——是如何绘制一条在一端锚定而另一端跟随鼠标指针的线。
更新:HTML5 Canvas 可能不是办法,因为它完全覆盖了它下面的任何东西。所以我回到第一方格。
解决方案
这里有一个很棒的解决方案,使用 SVG。我还将发布作者@Ani 的代码。
使用一条线连接两个 div 的过程:
创建两个 div 并根据需要为它们提供任何位置
<div id="div1" style="width: 100px; height: 100px; top:0; left:0; background:#e53935 ; position:absolute;"></div>
<div id="div2" style="width: 100px; height: 100px; top:0; left:300px; background:#4527a0 ; position:absolute;"></div>
(为了解释起见,我正在做一些内联样式,但为样式制作一个单独的 css 文件总是好的)
<svg><line id="line1"/></svg>
线标签允许我们在两个指定的点(x1,y1)和(x2,y2)之间画一条线。(作为参考,请访问 w3schools。)我们尚未指定它们。因为我们将使用 jQuery 来编辑行标签的属性 (x1,y1,x2,y2)。
在标签写
line1 = $('#line1');
div1 = $('#div1');
div2 = $('#div2');
我使用选择器来选择两个 div 和 line...
var pos1 = div1.position();
var pos2 = div2.position();
jQuery position() 方法允许我们获取元素的当前位置。有关更多信息,请访问https://api.jquery.com/position/(您也可以使用 offset() 方法)
现在我们已经获得了我们需要的所有位置,我们可以画线如下......
line1
.attr('x1', pos1.left)
.attr('y1', pos1.top)
.attr('x2', pos2.left)
.attr('y2', pos2.top);
jQuery .attr() 方法用于更改所选元素的属性。
我们在上面的行中所做的只是改变了行的属性
x1 = 0
y1 = 0
x2 = 0
y2 = 0
至
x1 = pos1.left
y1 = pos1.top
x2 = pos2.left
y2 = pos2.top
由于 position() 返回两个值,一个 'left' 和另一个 'top',我们可以使用 .top 和 .left 使用对象轻松访问它们(此处为 pos1 和 pos2)
现在线标签有两个不同的坐标来绘制两点之间的线。
推荐阅读
- javascript - Javascript:在 setTimeout 循环中从 DIV 中追加和删除图像
- macos - GDB 8.2 macOS High Sierra - 程序在“运行”后立即停止
- python - selenium.common.exceptions.WebDriverException:消息:未知错误:Chrome 无法在 RaspberryPi 上使用 Selenium 和 Chrome 启动
- c# - .NET Core 与 .NET Framework / C# 控制台应用程序 - 方法不起作用
- javascript - 引用'#'?尝试制作音频控件
- vba - 创建电子邮件,附件上传后保存到草稿
- c++ - C++ 日期库因时区而失败
- javascript - 模拟用户在文本框 javascript 中书写
- php - 如何在php的for循环中使用array_push和键值
- spring - Spring Boot Rest 服务应用程序问题与路由逻辑到 mongo db