Polymer 2.0 - 尝试实现 HTML5 拖放

标签 polymer polymer-2.x

我正在尝试为polymer2.0组件实现HTML5拖放,类似于http://jsfiddle.net/U55rc/中的拖放选项。

HTML:

<base href="https://raw-dot-custom-elements.appspot.com/PolymerElements/iron-flex-layout/v2.0.0/iron-flex-layout/">
<script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="iron-flex-layout-classes.html">
<dom-module id="demo-element">
  <template>
    <style include="shared-styles">
      :host {
        display: block;

        padding: 10px;
      }

     .card {
        margin: 24px;
        padding: 16px;
        color: #757575;
        border-radius: 5px;
        background-color: #fff;
        box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
      }
    </style>


    <div  draggable="true" ondragstart="{{drag(event)}}" >
    Input:
    <input type="text"/>
    </div>
              <div class="card" id="div1" ondrop="{{drop(event)}}" ondragover="{{allowDrop(event)}}"></div>
  </template>

  <script>
    Polymer({
      is: 'demo-element',
      allowDrop:function(ev){
            ev.preventDefault();
        },
      drag: function(ev){
          ev.dataTransfer.setData("text",ev.target.id);
      },
      drop:function(ev){
          ev.preventDefault();
          var data=ev.dataTransfer.getData("text");
          console.log(ev)
          ev.target.appendChild(document.getElementById(data));
      }
    });

  </script>
  <script>Polymer({is: "demo-element"});</script>
</dom-module>
<demo-element></demo-element>

JSFiddle 供引用: https://jsfiddle.net/Nagasai_Aytha/b62to481/

最佳答案

这里的关键是使用on-<event> native HTML5 拖放事件的表示法。此外,您不需要事件的数据绑定(bind)符号。

这是您更正后的标记。

HTML:

    <base href="https://raw-dot-custom-elements.appspot.com/PolymerElements/iron-flex-layout/v2.0.0/iron-flex-layout/">
    <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
    <link rel="import" href="iron-flex-layout-classes.html">
    <dom-module id="demo-element">
      <template>
        <style include="shared-styles">
          :host {
            display: block;

            padding: 10px;
          }

         .card {
            margin: 24px;
            padding: 16px;
            color: #757575;
            border-radius: 5px;
            background-color: #fff;
            box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
          }
        </style>


        <div id="draggedDiv" draggable="true" on-dragstart="drag" >
        Input:
        <input type="text"/>
        </div>
                  <div class="card" id="div1" on-drop="drop" on-dragover="allowDrop"></div>
      </template>

      <script>
        Polymer({
          is: 'demo-element',
          allowDrop:function(ev){
                ev.preventDefault();
            },
          drag: function(ev){
              ev.dataTransfer.setData("text",ev.target.id);
          },
          drop:function(ev){
              ev.preventDefault();
              var data=ev.dataTransfer.getData("text");
              console.log(ev)
              ev.target.appendChild(this.shadowRoot.querySelector('#' + data));
          }
        });

      </script>
      <script>Polymer({is: "demo-element"});</script>
    </dom-module>
    <demo-element></demo-element>

关于Polymer 2.0 - 尝试实现 HTML5 拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44892191/

相关文章:

javascript - 与 connectedCallback 相关的模板冲压时间

javascript - 采用高分子 Material 设计的 Phonegap 不起作用

javascript - NEON 动画动画结束事件?

polymer - 具有对象类型属性的 Lit 元素

javascript - 使用 mixin 显示灰色背景

javascript - 如何动态包含样式表以应用于 Polymer 2 元素?

javascript - 当我在 Polymer 2 中输入电子邮件时,我的登录密码不会自动完成

同级元素之间的 polymer 发送/接收事件

javascript - 无法让 Polymer 2 iron-flex-layout 工作

windows - 如何解决在 Windows 上的 Ubuntu 上更新 polymer-cli 由于 .git : Permission denied 而失败