美文网首页
react-dnd使用添加覆盖层-1

react-dnd使用添加覆盖层-1

作者: skoll | 来源:发表于2020-08-27 11:49 被阅读0次

拖拽时候图标快照

1 .getEmptyImage():返回透明空值的函数Image。使用connect.dragPreview()的的DragSourceConnector完全隐藏浏览器绘制拖动预览。方便使用绘制自定义拖动层DragLayer。请注意,自定义拖动预览在IE中不起作用
2 .默认的是半透明的拖拽样式

自定义拖拽预览

1 .他的本质其实是原来的不动,单独整体添加一个拖拽层
2 .当发现有被拖拽的组件,就渲染一个被拖拽的组件跟随鼠标。
3 .原来的组件的跟随鼠标隐藏掉
4 .放下鼠标,渲染层的组件消失

// 给拖拽的元素加一个自定义样式
import React,{CSSProperties} from 'react'
import {useDragLayer} from 'react-dnd'
import Box from './box'
const layerStyles:CSSProperties={
    position:"fixed",
    pointerEvents:'none',
    zIndex:100,
    left:0,
    top:0,
}
export default function CustomDragLayer(){
    const {
        itemType,
        isDragging,
        item,
        initialOffset,
        currentOffset
    }=useDragLayer(monitor=>({
        item:monitor.getItem(),
        itemType:monitor.getItemType(),
        initialOffset:monitor.getInitialSourceClientOffset(),
        currentOffset:monitor.getSourceClientOffset(),
        // 这个是当前鼠标的相对位置
        isDragging:monitor.isDragging()
    }))
    function getItemStyles(initialOffset:any, currentOffset:any) {
        if (!initialOffset || !currentOffset) {
          return {
            display: "none"
          };
        }
        let { x, y } = currentOffset;
        const transform = `translate3d(${x}px, ${y}px,0)`;
        return {
          transform,
          WebkitTransform: transform,
          position:"absolute" as "absolute",
        };
    }
    console.log(itemType)
    function renderItem(){
        switch (itemType){
            case 'GLASS':
                return <Box name="item" type="GLASS" isDropped={true} />
            default:
                return null
            // 拖拽的有新的组件可以添加到这里
        }
    }
    return (
        <div style={layerStyles}>
            <div style={getItemStyles(initialOffset,currentOffset)}>
                {renderItem()}
            </div>
        </div>
    )
}

//核心

//使用
<CustomLayer></CustomLayer>
//鼠标拖拽显示的覆盖层

<Box name="bottle" type="GLASS" isDropped={true} />
//实际的所有拖拽组件

相关文章

  • react-dnd使用添加覆盖层-1

    拖拽时候图标快照 1 .getEmptyImage():返回透明空值的函数Image。使用connect.drag...

  • 绘制导航路线

    绘制导航路线 1. 理论支持 路线也是一个覆盖层 在地图上操作覆盖层,其实操作的是覆盖层的数据模型1. 添加覆盖层...

  • iOS 绘制导航路线

    一、简介 路线也是一个覆盖层 理论指导:在地图上操作覆盖层,其实操作的是覆盖层的数据模型 添加覆盖层:在地图上添加...

  • react.js 拖拽

    react.js拖拽排序功能的实现 1.使用 react-dnd npm install--save react-...

  • react-dnd 使用

    优势 1 .遇到一个不能忍受的问题,就是拖拽的时候那个禁止按钮无法替换。看下这个拖拽组件有什么东西是别的不能替代的...

  • 前端里的“拖拖拽拽”

    最近在项目中使用了 react-dnd[https://react-dnd.github.io/react-dnd...

  • 模态框覆盖层取消不掉

    问题:采用ajax异步通讯获取数据,使用$("#myModal").modal('hide');不能关闭覆盖层出现...

  • react-native的Image添加毛玻璃效果

    图片添加毛玻璃效果,不需要添加爱第三方库,用自带blurRadius属性,另外需要修改覆盖层颜色,只需盖上一层vi...

  • [译]《Motion Design for iOS》(二十七)

    是时候添加一些动画了。为了警告框的显示,如我之前所说,我们想要覆盖层从完全透明(不可见)变成半透明。我们还想要添加...

  • react拖曳组件react-dnd的简单封装使用

    分享原因 由于项目中需要使用拖曳组件(需求:全局,跨组件,跨数据),我选择了react-dnd 概念 React ...

网友评论

      本文标题:react-dnd使用添加覆盖层-1

      本文链接:https://www.haomeiwen.com/subject/icdojktx.html