react+ts拖拽刷新,记录位置

tex部分:

import { Component, createRef } from "react";
import "./index.less"
interface iProps{}
interface iState{}
interface idata{
    top:number;
    left:number;
}
export default class About extends Component<iProps, iState>{
    elementBox = createRef<HTMLDivElement>();
    disX:number = 0;
    disY:number = 0;
    X:number = 0;
    Y:number = 0;
    sData?:idata
    constructor(props:iProps){
        super(props);
        this.state ={}
    }
    FnBox(){
        return this.elementBox.current as HTMLDivElement
    }
    FnMove(ev:MouseEvent){
        this.X=ev.clientX-this.disX
        this.Y=ev.clientY-this.disY

        this.FnBox().style.left = this.X+"px"
        this.FnBox().style.top = this.Y+"px"
        localStorage.sData = JSON.stringify({left:this.X,top:this.Y})
        // console.log(localStorage.sData,1111);
        
    }
    FnUp(){
        document.onmousemove = null;
        document.onmouseup = null;
    }
    FnDown(ev:MouseEvent){
       this.disX = ev.clientX-this.FnBox().offsetLeft;
       this.disY = ev.clientY-this.FnBox().offsetTop;
       document.onmousemove = this.FnMove.bind(this)
       document.onmouseup=this.FnUp
       return false;
    // ev.preventDefault();
    }
    componentDidMount(){
        this.FnBox().onmousedown=this.FnDown.bind(this)
        if(localStorage.sData){
            this.sData = JSON.parse(localStorage.sData)
            console.log(this.sData,122211);
                if(this.sData){
                    this.FnBox().style.left = this.sData.left+'px'
                    this.FnBox().style.top = this.sData.top+"px"
                
            }
        }
    }
    render(){
        return(
          <div className="about">
              <div className="about-box" ref={this.elementBox}></div>
          </div>
        )
    }
}

less部分:

.about{
    .about-box{
        width: 100px;
        height: 100px;
        background-color: red;
        position: absolute;
        left: 0;
        top: 0;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值