【问题标题】:AngularJS: Styling dragged item with drag and dropAngularJS:通过拖放设置拖动项目的样式
【发布时间】:2015-08-30 22:09:57
【问题描述】:

基本上,我想要做的就是降低拖动项目的不透明度,使其略微透明。我的问题是,当最初开始拖动时,我似乎无法更改被拖动项目的样式。

<div class=" btn btn-droppable growBackground"
     ng-repeat="folder in Folders"
     data-drop="true"
     ng-model='Folders'
     jqyoui-droppable="{index: {{$index}},  onOver: 'moveFolderOnFolder($index)'}"
     data-jqyoui-options="{accept: '.folder'}">

        <div class="btn btn-draggable grow folder nospacing"
             data-drag="true"
             data-jqyoui-options="{revert: 'invalid', helper: 'clone'}"
             ng-model="Folders"
             <!-- IMPORTANT LINE HERE -->
             jqyoui-draggable="{index: {{$index}}, placeholder:true, animate:false, onDrag: 'storeDraggedFolderId(folder.Id)', onStart: 'addDraggingClass()', onStop: 'removeDraggingClass()' }">
            {{folder.Name}}
        </div>

这段代码的重要一点是在 jqyoui 选项中的第二个可拖动 div 中,我通过 onstop 和 onstart 方法应用了 folderopacity 类。

这段代码有如下效果——

底部块是当前被拖动的块。我希望这个具有不透明度样式,但我找不到这样做的方法(至少最初是这样。如果我在拖动完成时不删除类,它将在下次拖动时保持不透明度)。我似乎用一堆不同的属性尝试过这个,但没有成功。

有什么想法吗?

【问题讨论】:

    标签: angularjs drag-and-drop


    【解决方案1】:

    在拖拽的过程中,被拖拽的item会在class属性后面附加ui-draggable-dragging样式。

    将其添加到 css 中就可以了:

    .ui-draggable-dragging{
        opacity:0.3;
    }
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,您想捕捉“拖动”事件并相应地使用 ng-class 来添加/删除类吗?

      所以你可以添加一个 jqyoui-dragable 正在产生的拖动事件(我假设它的 angular-dragdrop):

      http://codef0rmer.github.io/angular-dragdrop/#/ 或者你可以只捕获 mousedown mouseup 和 mousemove 事件(容易出错)以及 ng-class 的混合

      活动的文档在网页中。

      您可能想使用 onStart 事件在控制器中捕获它

      onStart- 要调用的回调方法(必须在 控制器)当拖动开始时

      所以在它显示的文档中

      <div jqyoui-draggable="{onStart:'startCallback(item)'}">
      

      jsut 在控制器中添加回调:

          $scope.startCallback = function(){
          $scope.isDragged = true;
      }
      

      并在框中添加

      ng-class={'opacityClass':isDragged}
      

      对于另一个选项,只需检查鼠标何时向下而不是向上,并查看 mousemove 是否已被触发,如果所有这些状态都发生更新 ng-class。不知道为什么,但如果你想帮助解决这个问题

      如果

      【讨论】:

      • 您好,如果您查看我最初的帖子,我正在使用 onstart 方法来应用该类(抱歉,它不是很清楚)。问题是该类似乎只适用于拖动部分最初出现在屏幕上的位置,而不是鼠标移动的实际部分。如果拖动完成后我不删除类,并且我再次拖动相同的部分,它将具有不透明样式(但我显然想在拖动停止时删除样式)。
      • 抱歉错过了活动。所以你说你希望类应用于拖动项目的位置......所以如果我在第二个盒子上拖动它会获得不透明度并且第一个盒子类被删除?所以本质上您希望根据您的位置添加课程?对吗?
      • 对不起,不,我的意思是我希望通过鼠标移动的 div 在拖动时应用一个类,然后当它停止时它将失去样式拖。拖动时会应用样式,但不会应用到被拖动的实际部分。如果您看到我的图片,则底部项目正在被拖动,但未应用不透明度类。相反,它应用于对象的起始位置。我觉得 onstart 肯定可以工作,但由于某种原因它不是。
      • 如果您提供 jsfiddle 或 plunker 将帮助您解决此问题。但是,如果您希望该类在 onDrag 上触发,那么您可以做到,您可能需要寻找多个触发器...例如在 onDrag 上添加类并在 onStop 上删除它,您可能可以通过两种方式来实现。 . 一个是有几个 ng-class 和 onDrg 或 onStart 传递该框的索引或 id 以便您知道要更改哪个元素。如果你提供一个 jsfiddle 或其他东西,最好能帮上忙吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      相关资源
      最近更新 更多