Свойство объекта события Polymer drag-drop содержит родительский srcElement

Я создаю простое одностраничное приложение с использованием Polymer. Я создал пользовательский элемент, который содержит демо-версию Polymer-drag-drop. Действие перетаскивания и создания div работает нормально, свойство relatedTarget объекта события содержит ссылку на правильный перетаскиваемый div. Проблема заключается в том, что свойство srcElement и target содержат ссылки на родительский полимерный элемент shadowRoot, в данном случае «workspace-drop».

eventProperties

РЕДАКТИРОВАТЬ:

Ведение журнала event.currentTarget on fire также содержит ссылку на parentDiv, содержащий цветные дочерние элементы. <div flex horizontal style="border: 1px dotted silver;">

Код выглядит следующим образом (почти демо, но в полимерном элементе):

<link rel="import" href="/components/polymer/polymer.html">
  <script src="/components/webcomponentsjs/webcomponents.js">
  </script>
      <link rel="import" href="/components/core-drag-drop/core-drag-drop.html">


<polymer-element name="workspace-drop">
  <template>
<style>

    html {
      font-family: 'Helvetica Neue', 'Roboto', 'Arial', sans-serif;
    }

    body {
      height: 100vh;
      margin: 0;
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
    }

    .box {
      display: inline-block;
      width: 100px;
      height: 100px;
      margin: 16px;
    }

    .dropped {
      position: absolute;
      border: 1px solid black;
      width: 5px;
      height: 5px;
    }

  </style>
<div flex horizontal style="border: 1px dotted silver;">

    <core-drag-drop></core-drag-drop>

    <div class="box" style="background-color: lightblue;" draggable="false"></div>

    <div class="box" style="background-color: orange;" draggable="false"></div>

    <div class="box" style="background-color: lightgreen;" draggable="false"></div>

    <div id="hello">Hello World</div>

  </div>



  <div id="drop" hash="test" class="box" style="border: 3px solid silver; position: relative; width: 300px; height: 300px;" draggable="false"></div>



  </template>
  <script>
 (function(){

 addEventListener('drag-start', function(e) {

      var dragInfo = e.detail;
      // flaw #2: e vs dragInfo.event
      console.log(e.detail);
      var color = dragInfo.event.target.style.backgroundColor;
      dragInfo.avatar.style.cssText = 'border: 3px solid ' + color + '; width: 32px; height: 32px; border-radius: 32px; background-color: whitesmoke';

      dragInfo.drag = function() {};
      dragInfo.drop = drop;
    });
    //
    function drop(dragInfo) {
      var color = dragInfo.avatar.style.borderColor;
      var dropTarget = dragInfo.event.relatedTarget;

      if (color && dropTarget.id === 'drop') {
        var f = dragInfo.framed;
        var d = document.createElement('div');
        d.className = 'dropped';
        d.style.left = f.x - 4 + 'px';
        d.style.top = f.y - 4 + 'px';
        d.style.backgroundColor = color;
        dropTarget.appendChild(d);
        dropTarget.style.backgroundColor = color;
      }
    }


    Polymer({
        ready: function(){


        }

    });
     })();
  </script>
</polymer-element>

Любая помощь приветствуется!


person andrsnn    schedule 28.12.2014    source источник


Ответы (1)


Догадаться. Это связано с этим вопросом.

При регистрации объекта события currentTarget имеет значение null, но при регистрации event.currentTarget регистрируется значение. Почему?

Регистрация события после завершения действия перетаскивания возвращает ссылку на объект в его завершенном состоянии. Регистрация конкретного свойства event.target при запуске перетаскивания дала ссылку на правильный объект при запуске.

person andrsnn    schedule 28.12.2014