<svg>元素在鼠标事件期间更新位置时无法移动

詹姆斯·牛顿

设定一个的左侧和顶部属性svg元件,或一个div含有svg当呼叫来自于鼠标事件内部元件失败。

我创建了一个jsFiddle来说明这一点。下面的演示HTML页面供参考。在Chrome,Firefox和Safari中进行了测试。

这是svg元素的预期行为吗?

我希望用户能够拖动svg元素。我该如何实现?


<!DOCTYPE html>
<html>
<head>
  <title>SVG</title>
  <meta charset="utf-8" />
  <style>
  .dot {
      position: absolute;
  }

  #green{
      left: 20px;
      top: 20px;
  }

  #orange{
      left: 20px;
      top: 60px;
  }

  #red {
      left: 20px;
      top: 100px;
      background: red;
      height: 20px;
      width: 20px;
  }
  </style>

  <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
</head>

<body>    
    <svg version="1.1"
             xmlns="http://www.w3.org/2000/svg"
             baseProfile="tiny"
             id="green"
             class="dot"
             width="20" height="20">
     <circle cx="10" cy="10" r="10" fill="green" />
    </svg>

    <div id="orange" class="dot">
        <svg version="1.1" xmlns="http://www.w3.org/2000/svg" baseProfile="tiny" width="20" height="20">
            <circle cx="10" cy="10" r="10" fill="orange" />
        </svg>
    </div>

    <div id="red" class="dot"></div>

    <script>
        $(function ready() {
            var dots = $(".dot")
            dots.on("mousedown touchstart", startDrag)

            var $doc
            var $dot
            var offsetX
            var offsetY

            function startDrag(event) {
                $doc = $(document)
                $doc.on("mousemove", drag)
                $doc.on("mouseup", stopDrag)
                $dot = $(event.target)
                var offset = $dot.offset()
                offsetX = offset.left - event.pageX
                offsetY = offset.top - event.pageY
            }

            function stopDrag(event) {
                $doc.off("mousemove mouseup")
            }


            function drag(event) {
                var left = event.pageX + offsetX
                var top = event.pageY + offsetY
                $dot.css({
                    left: left,
                    top: top
                })
            }
        })
    </script>

</body>
</html>
FabrícioMatté

您想要this代替event.target

$dot = $(this)

小提琴

event.target引用引发事件的DOM元素(在您的情况下,是<circle>在SVG内部)。

另一方面,this在jQuery事件处理程序内部引用附加了该处理程序的DOM元素,即,.dot触发事件元素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何移动svg元素?

来自分类Dev

svg元素的位置

来自分类Dev

无法对SVG路径元素执行点击事件

来自分类Dev

无法对SVG路径元素执行点击事件

来自分类Dev

SVG 和 js 鼠标事件

来自分类Dev

svg:svg与svg:g元素的性能

来自分类Dev

svg:svg与svg:g元素的性能

来自分类Dev

正在移动svg:svg无法正常工作

来自分类Dev

在svg中获取鼠标位置

来自分类Dev

svg元素的“显示”属性如何影响鼠标事件?

来自分类Dev

在多个重叠的SVG元素上检测鼠标事件

来自分类Dev

SVG秤,无需移动位置

来自分类Dev

SVG秤,无需移动位置

来自分类Dev

无法在 Angular 7 中的 SVG 上触发鼠标事件

来自分类Dev

在svg元素中移动<text>

来自分类Dev

如何跟踪移动的svg元素相对于固定的svg元素的位置?

来自分类Dev

鼠标处理重叠的SVG元素无法正常工作

来自分类Dev

鼠标处理重叠的SVG元素无法正常工作

来自分类Dev

如何获得SVG元素的位置

来自分类Dev

从xml更改svg元素位置

来自分类Dev

svg路径在旋转时从其正常位置移动

来自分类Dev

无法使用Javascript在移动Safari中读取SVG元素内容

来自分类Dev

Snap.svg捕获鼠标滚轮事件

来自分类Dev

调整大小+移动时SVG元素被切断

来自分类Dev

使用<use>元素时,SVG单击事件未触发/冒泡

来自分类Dev

悬停时捕捉SVG动画SVG /离开时重置SVG

来自分类Dev

样式和鼠标与 SVG 元素的交互

来自分类Dev

多个SVG元素上的SVG悬停问题

来自分类Dev

Snap.SVG附加SVG元素