react+typescript 写拖拽 (pc端)

这篇博客展示了如何在React中创建一个简单的拖拽组件。通过监听鼠标事件,实现了元素的拖动功能,允许用户通过鼠标按下、移动和释放来改变元素的位置。主要涉及的技术包括React的事件处理、状态管理和CSS绝对定位。

这是js和html的代码

import React, { Component,createRef } from "react";

import './index.less'

interface Props{

}
interface State{

}

class Drag extends Component<Props,State>{
  disX:number = 0
  disY:number = 0
  X:number =0
  Y:number =0

    drag=createRef<HTMLDivElement>()
    constructor(props:Props){
        super(props)
        this.state={

        }
    }
    FnDown(ev:React.MouseEvent<HTMLDivElement>):void{
        // console.log(ev)
        if(this.drag.current){
            this.disX=ev.clientX -this.drag.current.offsetLeft
            this.disY=ev.clientY -this.drag.current.offsetTop


        }
        document.onmousemove=this.More.bind(this)
        document.onmouseup=this.Fnup.bind(this)
      console.log(this.drag)
    }
    More(ev:MouseEvent):void{

        this.X=ev.clientX - this.disX
        this.Y=ev.clientY - this.disY
      

        if(this.drag.current){

            this.drag.current.style.left=this.X+"px"
            this.drag.current.style.top=this.Y+"px"
         }
    
        

    }
    Fnup(){
        console.log(2)
        document.onmousemove=null
        document.onmouseup=null
    }
    render(){
        return(<div ref={this.drag} onMouseDown={this.FnDown.bind(this)} className="drag">

        </div>)
    }

}
export default Drag

这是less的代码

.drag{
    width: 100px;
    height: 100px;
    background: red;
    border-radius: 50%;
    position: absolute;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值