html拖拽节点组件,前端拖拽组件优化

本文探讨了Html5 Drag API在实现拖拽组件时存在的问题,如拖动影子不明显、元素频繁回流重绘以及缺乏动画效果。作者提出了一种优化方案,通过鼠标事件替代Drag API,实现更流畅的拖拽体验。优化包括在mousedown时克隆元素为 ghost 并隐藏原元素,设置 ghost 为 fixed 位置,以及在 mousemove 和 mouseend 事件中处理元素位置,避免DOM频繁变动。
摘要由CSDN通过智能技术生成

为什么弃用Html5 drag Api

之前我也用的Drag Api写了一个draggable组件,使用起来总觉得体验有点不好。

先来看有赞做的类似的拖拽UI组件,它引用的sortablejs库封装了Drag Api

bV7hOa?w=1461&h=642

1、拖拽的时候跟随鼠标的影子成为ghost,是Api自动生成的。但是由于这是一个很简洁的页面,背景全为白色在拖拽的时候其实很难看出拖到了哪里。Api虽然提供了e.dataTransfer.setDragImage(img, 0, 0)方法让我们在去改变这个ghost,但是设置的这个img必须是HTML img element、HTML canvas element,否则它必须是一个可见的节点。简单来说就是如果你设置的ghost不是canvas或者img元素,而是你自定义的html元素,那你必须把它append到document中。

document.getElementById("drag-with-create-add").addEventListener("dragstart", function(e) {

var crt = this.cloneNode(true);

crt.style.backgroundColor = "red";

document.body.appendChild(crt);

e.dataTransfer.setDragImage(crt, 0, 0);

}, false);

这种方式好像解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值