React中TypeScript中移动端拖拽(附css样式)

import React, { Component,createRef } from "react";
import './Drag.less'

interface Props{

}

interface State{
    
}

class Drag extends Component<Props,State>{
    disY:number=0
    disX:number=0
    y:number=0
    x:number=0
    dragElement = createRef<HTMLDivElement>()
    // eslint-disable-next-line
    constructor(props:Props){
        super(props)
        this.state={
        }
    }
    FnStart(ev:React.TouchEvent<HTMLDivElement>):void{
        if(this.dragElement.current){
            this.disY = ev.changedTouches[0].pageY - this.dragElement.current.offsetTop
            this.disX = ev.changedTouches[0].pageX - this.dragElement.current.offsetLeft
        }
        document.ontouchmove=this.FnMove.bind(this)
        document.ontouchend=this.FnEnd.bind(this)

    }
    FnMove(ev:TouchEvent){
        this.y = ev.changedTouches[0].pageY - this.disY
        this.x = ev.changedTouches[0].pageX - this.disX
        if(this.dragElement.current){
            this.dragElement.current.style.left=this.x + 'px'
            this.dragElement.current.style.top=this.y + 'px'
        }
    }
    FnEnd(){
        document.ontouchmove=null
        document.ontouchend=null
    }
    render(){
        return (<div className="drag" onTouchStart={this.FnStart.bind(this)} ref={this.dragElement}></div>)
    }
}
export default Drag;
.drag{
    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、付费专栏及课程。

余额充值