我正在为我的Web应用程序使用angularJS,我需要编写一个包含拖动操作的组件。当我尝试实现目标时,我发现很难控制指针周围的拖动效果,因为它不是真正的元素,而是图像剪切(我认为)。目前,拖动图像是被拖动元素的副本,并包含悬停效果,甚至具有其父元素的白色背景。 (我剪切了两个图像并在下面显示)
那么我该如何使用CSS或JS修改拖动效果?
我在触发dragstart事件时为被拖动的元素添加了一个“正在拖动”类,并更改了被拖动元素的样式。但是拖动的图像保持不变。
html
<div ng-if="current == -1" class="form-library">
<div ng-repeat="(key, item) in formMap"
class="form-type-items"
ng-class="{'is-dragging': dragInfo.type == 'add' && key == dragInfo.data.type}"
draggable="true"
ng-dragstart="onDragStart($event, key)"
ng-dragend="onDragEnd($event)">
<div class="form-type-icon">
<i class="{{'iconfont icon-'+item.icon}}"></i>
</div>
<span class="form-type-name">{{ item.name }}</span>
</div>
</div>
scss
&:hover {
.form-type-name {
color: $brand-color-1;
}
.form-type-icon {
.iconfont {
color: $brand-color-1;
}
}
}
&.is-dragging {
opacity: 0.36;
background-color: transparent;
.form-type-name {
color: $gray-2;
}
.form-type-icon {
.iconfont {
color: $gray-2;
}
}
}
答案 0 :(得分:0)
在开始拖动后,似乎已应用样式,因此,拖动的可视副本是刚开始拖动时实例中元素的浅表副本。解决方法是,您可以尝试先应用样式,然后在元素上设置draggable属性,然后在元素发布后将其删除
<div ng-if="current == -1" class="form-library">
<div ng-repeat="(key, item) in formMap"
class="form-type-items"
ng-class="{'is-dragging': dragInfo.type == 'add' && key == dragInfo.data.type}"
draggable="true"
on-mousedown="onMouseDown($event, key)"
on-mouseup="onMouseUp($event)">
<div class="form-type-icon">
<i class="{{'iconfont icon-'+item.icon}}"></i>
</div>
<span class="form-type-name">{{ item.name }}</span>
</div>
</div>
<script>
function onMouseDown(e) {
// set variable that will apply necessary class to TRUE
// then add draggable attribute
e.target.setAttribute('draggable', true)
}
function onMouseUp(e) {
// set variable for drabble class to FALSE
// then remove draggable attribute
e.target.setAttribute('draggable', false)
}
</script>