jquery – 在svg元素上拖放Html5

前端之家收集整理的这篇文章主要介绍了jquery – 在svg元素上拖放Html5前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试按照html5拖放教程 here.我无法在rect元素上注册dragstart事件.如果我将事件从draggable更改为mousedown,则调用handleDragStart处理程序.请忽略代码中的其他空白注册.

JSFiddle here

<!DOCTYPE html>
<html><head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
  <style type="text/css" media="screen">
    svg rect { cursor: move; }
  </style>
</head><body>
  <h1>SVG/HTML 5 Example</h1>
  <svg id="cvs">
    <rect draggable="true" x="0" y="10" width="100" height="80" fill="#69c" />
    <rect x="50" y="50" width="90" height="50" fill="#c66" />        
  </svg>
  <script type="text/javascript" src="loc.js"></script>
</body></html>

loc.js

$(document).ready(function() {    
    function handleDragStart(e) {
        log("handleDragStart");                
          this.style.opacity = '0.4';  // this ==> e.target is the source node.
    };

    var registercb = function () {
            $("#cvs > rect").each(function() {
                  $(this).attr('draggable','true');
              });
            $("#cvs > rect").bind('dragstart',handleDragStart);    
            $(window).mousedown(function (e) {        

            });    
            $(window).mousemove(function (e) {                
            });
            $(window).mouseup(function (e) {
                log("mouseup");                
            });
        };

    function log() {
      if (window.console && window.console.log)
        window.console.log('[XXX] ' + Array.prototype.join.call(arguments,' '));
    };

    registercb();
});

解决方法

此行为可能由以下几个原因引起:

> HTML 5拖放是一团糟,according to this article.我知道它有点老了,但问题似乎仍未解决
> jQuery不支持SVG DOM模型.因此,它的某些部分可能有效,而有些部分则无效(如offset()或width()).

我绝对不会依赖HTML5拖放现在放弃支持,而是使用库来处理这个问题.如果你想使用SVG,你可以尝试Raphaël.如果你也需要jQuery,也许SVG plugin是要走的路.请注意,目前这两个项目都没有积极开发.我知道这不是一个令人满意的答案,但我也必须学习,jQuery和SVG并不能很好地结合在一起.希望有人证明我错了;).

猜你在找的jQuery相关文章