Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 绘制DOM“伪”线_Javascript_Jquery_Html_Css_Tooltip - Fatal编程技术网

Javascript 绘制DOM“伪”线

Javascript 绘制DOM“伪”线,javascript,jquery,html,css,tooltip,Javascript,Jquery,Html,Css,Tooltip,我正在创建一个小的diff-/offset显示,我想在文本中的某些位置画一条线,以可视化发生diff的位置。基本上我想从中得到: 关于这个或类似的东西: 我知道canvas元素,我可以用它画线,但是我怎么能把这样的图像放在正确的位置呢 对于这种方法,有没有一个简单的CSS解决方案 有什么我可以遵循的最佳实践吗?例如,任何工具提示插件/脚本都必须使用类似于指向特定位置的东西 我很感谢你在这方面的帮助。指向我的JSFIDLE的原始链接: 通过在容器中添加跨距,基本上可以绘制任何需要的图形 选择一种颜

我正在创建一个小的diff-/offset显示,我想在文本中的某些位置画一条线,以可视化发生diff的位置。基本上我想从中得到:

关于这个或类似的东西:

我知道canvas元素,我可以用它画线,但是我怎么能把这样的图像放在正确的位置呢

对于这种方法,有没有一个简单的CSS解决方案

有什么我可以遵循的最佳实践吗?例如,任何工具提示插件/脚本都必须使用类似于指向特定位置的东西

我很感谢你在这方面的帮助。指向我的JSFIDLE的原始链接:

通过在容器中添加跨距,基本上可以绘制任何需要的图形
选择一种颜色,然后像在画图上那样用鼠标进行绘制。

通过在容器中添加跨距,基本上可以绘制任何需要的内容
选择一种颜色,然后像在画图上那样用鼠标进行绘制。

在需要标记的位置,将线条的右侧用一个跨距进行包裹。使用border-bottom和border-left属性。

在需要标记的位置,将线的右侧环绕成一个跨距。使用border bottom和border left属性。

我认为您最好使用工具提示。在我看来,我能想到的所有用CSS实现这一点的方法都是不成熟的

以这一个为例:


我纠正自己:也许您可以通过使用::before创建元素来获得您想要的。我不确定这是不是更好的选择,这取决于你的需要

我认为你最好带上工具提示。在我看来,我能想到的所有用CSS实现这一点的方法都是不成熟的

以这一个为例:


我纠正自己:也许您可以通过使用::before创建元素来获得您想要的。我不确定这是不是更好的选择,这取决于你的需要

您可以使用jQuery的和调用,通过JavaScript找到偏移量和维度。一旦有了源和目标框,就需要在它们之间画线了。这可以使用纯HTML+CSS来实现,方法是创建非常薄的彩色div,并根据需要旋转它们。如果使用正交线,就像在图片中一样,不需要旋转

给定jQuery元素e,您可以使用以下方法获得其边界框left、top、width和height:

function box(e) {
    var b = e.offset();
    b.width = e.width();
    b.height = e.height();
    return b;
}    

根据您最初的fiddle和@Mageek的评论,可以看到这一点。

您可以使用jQuery和调用,通过JavaScript找到偏移量和维度。一旦有了源和目标框,就需要在它们之间画线了。这可以使用纯HTML+CSS来实现,方法是创建非常薄的彩色div,并根据需要旋转它们。如果使用正交线,就像在图片中一样,不需要旋转

给定jQuery元素e,您可以使用以下方法获得其边界框left、top、width和height:

function box(e) {
    var b = e.offset();
    b.width = e.width();
    b.height = e.height();
    return b;
}    
根据您原来的小提琴和@Mageek的评论,您可以看到这一点。

结合:

HTML代码中注释的绝对位置靠近要添加或删除的文本,因此相对于文本放置 伪:后由两个边框组成的箭头 在CSS中使用pseudo:before和生成的内容“-”添加或删除文本的视觉提示 屏幕阅读器用户不知道添加或删除了什么,因为信息主要是通过使用颜色和CSS中生成的内容来传达的,只有VoiceOver会阅读这些信息,在这种情况下,我甚至不确定,因为屏幕阅读器倾向于忽略单个字符,因为它们经常被滥用为以纯文本形式制作列表的要点,而HTML列表项本应被使用 有可能在纯HTML/CSS中产生结果。如果每行都添加了一个单词,那么它将很容易被打断,右侧的注释将位于彼此的顶部。。。但是有了JS和:hover events plus:focus和tabindex,有视力的键盘用户就可以使用了,别忘了触摸事件!这是可以避免的。 尽管如此,它仍然支持缩放文本,仅在Firefox中可将文本缩放到第6级的200%;问题在于修改的数量、它们在文本中的接近程度、评论的长度和绝对位置

==>

通过结合:

HTML代码中注释的绝对位置靠近要添加或删除的文本,因此相对于文本放置 伪:后由两个边框组成的箭头 在CSS中使用pseudo:before和生成的内容“-”添加或删除文本的视觉提示 屏幕阅读器用户不知道添加或删除了什么,因为信息主要是通过使用颜色和CSS中生成的内容来传达的,只有VoiceOver会阅读这些信息,在这种情况下,我甚至不确定,因为屏幕阅读器倾向于忽略单个字符,因为它们经常被滥用为以纯文本形式制作列表的要点,而HTML列表项本应被使用 有可能在纯HTML/CSS中产生结果。它会呼吸的 如果每行上都添加了一个单词,那么右侧的注释将位于彼此的顶部。。。但是有了JS和:hover events plus:focus和tabindex,有视力的键盘用户就可以使用了,别忘了触摸事件!这是可以避免的。 尽管如此,它仍然支持缩放文本,仅在Firefox中可将文本缩放到第6级的200%;问题在于修改的数量、它们在文本中的接近程度、评论的长度和绝对位置

==>


在谈到与最终用户的交互时,我不确定应用程序应该做什么。您没有提到解决方案的跨浏览器性。无论如何,如果没有一些JavaScript片段,我不认为纯CSS和CSS3也能解决这个问题。所以,我想补充和建议

基本上,关于生产线,在其开发过程中需要记住一些事情:

有很多解决方案可以划清界限。如前所述,画布可以是一种选择,但我相信它不是一个更简单的选择

所建议的工作示例是通过CSS annitations完成的,这是一个很好的选择,比canvas更简单,并且可以改进以完成所建议的相同设计

如果您与最终用户的预期视觉交互接近FelipeAls的建议,则默认情况下,具有2倍边框宽度的div,加上right和botton边框宽度都设置为0,将解决您的行怀疑。我做了工作样品。在建议的示例中,我使用DOM相对位置来测量正确的线位置。尽管我使用jQuery实现了这一点,但您始终可以在纯JS或其他基于DOM的库中作为Mootools实现这一点


我真的希望它能对您有所帮助。

在谈到与最终用户的交互时,我不确定您的应用程序应该做什么。您没有提到解决方案的跨浏览器性。无论如何,如果没有一些JavaScript片段,我不认为纯CSS和CSS3也能解决这个问题。所以,我想补充和建议

基本上,关于生产线,在其开发过程中需要记住一些事情:

有很多解决方案可以划清界限。如前所述,画布可以是一种选择,但我相信它不是一个更简单的选择

所建议的工作示例是通过CSS annitations完成的,这是一个很好的选择,比canvas更简单,并且可以改进以完成所建议的相同设计

如果您与最终用户的预期视觉交互接近FelipeAls的建议,则默认情况下,具有2倍边框宽度的div,加上right和botton边框宽度都设置为0,将解决您的行怀疑。我做了工作样品。在建议的示例中,我使用DOM相对位置来测量正确的线位置。尽管我使用jQuery实现了这一点,但您始终可以在纯JS或其他基于DOM的库中作为Mootools实现这一点


我真的希望它能对您有所帮助。

我不确定这是否是您想要的,但我有一个用于纯JS和DOM的函数:我不确定这是否是您想要的,但我有一个用于纯JS和DOM的函数: