3

我在我的 div 上使用角度拖放指令。

我也在使用 Bootstrap CSS 面板。面板标题是我用作 dnd dragHandle 的。

<div class="panel-heading dragHandle">
    <h4>Click & drag here to move</h4>
</div>

我希望整个 div 可以根据标题拖动,但是一旦进入 div(显示文本的位置),我就使用指令 dnd-nodrag。这目前有效,因为当光标在内部而不是在面板标题上时,您无法拖动 div;但是,我希望能够复制 div 中的文本。

<div dnd-nodrag class="panel-body" draggable="true">
    <p> THIS IS THE TEXT I WANT TO COPY </p>
</div>

在我看来, nodrag 指令只允许选择/复制输入元素内的文本。我需要能够从 div 中复制纯文本。

上述两个代码片段都嵌套在具有“面板”类和 dnd-draggable 指令的 div 中。

有什么解决办法吗?我缺少任何指令吗?请帮忙。提前谢谢!

另外——我尝试在 CSS 中调整用户选择样式,但没有成功。我的尝试:

<div class="panel-body" style="-webkit-user-select: all">
    <p> THIS IS THE TEXT I WANT TO COPY</p>
</div>
4

1 回答 1

0

此问题已在 bugzilla 中报告,

问题链接:https ://github.com/react-dnd/react-dnd/issues/178

https://bugzilla.mozilla.org/show_bug.cgi?id=195361

https://bugzilla.mozilla.org/show_bug.cgi?id=800050

但是我已经使用解决方法解决了这个问题,

当您检查 Div 元素时,您会看到下面的代码将可拖动属性设置为 true,因此在 Firefox 中您无法使用鼠标光标选择文本。

<li ng-repeat="item in models.lists.A" dnd-draggable="item" dnd-moved="models.lists.A.splice($index, 1)" dnd-effect-allowed="move" dnd-selected="models.selected = item" ng-class="{'selected': models.selected === item}" class="ng-scope" draggable="true">
          <div dnd-nodrag="" draggable="true">
            <div class="theheader" dnd-handle="" **draggable="true"**>A header</div>
            <div class="thebody">
              Selecting test works on Chrome/Safari.  Doesn't work on Firefox/Edge
              <input type="text" ng-model="item.label" class="ng-pristine ng-valid">
            </div>
          </div>
        </li>

解决方法:在 html 中,

<input type="text" ng-model="item.label" class="ng-pristine ng-valid"
ng-click="vm.disableDrag()" ng-blur="vm.enableDrag()">

在 JS 文件中,

/**
  *find li and disable the draggable feature, so the input can be edited using mouse in firefox  
  */
vm.disableDrag= function($event) {
    var $li = $event.currentTarget.parentNode;
    angular.element($li).attr("draggable", false)
}
/**
 * find li element and Enalbe the draggable feature, on blur of the editable input
 */
vm.enableDrag = function($event) {
    var $li = $event.currentTarget.parentNode;
    angular.element($li).attr("draggable", true)
}
于 2017-04-13T12:08:29.767 回答