React 实现组件拖拽功能

##实现React组件的拖拽功能


  HTML5原生支持拖拽功能,没有看过相关文档,恰好自己想实现一下React组件的拖拽,在网上看了一些文章之后再结合自己的思考实现了一个简陋的圆形,感觉性能不是很好。


/**

* Created by w on 2018/3/16.

*/

import Reactfrom 'react';

import ReactDOMfrom 'react-dom';

import './dragImg.css';

class DragImgextends React.Component {

constructor(props) {

super(props);

this.state = {

cursor:'pointer',

relativeX:0,

relatveY:0,

isDragging:false

        };

this.handleMouseEnter =this.handleMouseEnter.bind(this);

this.handleMouseLeave =this.handleMouseLeave.bind(this);

this.handleMouseDown =this.handleMouseDown.bind(this);

this.handleMouseUp =this.handleMouseUp.bind(this);

this.handleMouseMove =this.handleMouseMove.bind(this);

}

componentDidMount() {

let node =this.refs.dragPanel;

node.style.left ='50px';

node.style.top ='50px';

}

handleMouseEnter(e) {

this.setState({

cursor:'cursor'

        })

}

handleMouseLeave(e) {

this.setState({

isDragging:false

        })

}

handleMouseDown(e) {

this.setState({

isDragging:true

        })

}

handleMouseUp(e) {

console.log(this.state.isDragging);

this.setState({

relativeX:0,

relativeY:0,

isDragging:false

        })

}

handleMouseMove(e) {

let node =this.refs.dragPanel;

this.setState({

cursor:'move',

relativeX: e.clientX -node.offsetLeft,

relativeY: e.clientY -node.offsetTop,

});

if (this.state.isDragging) {

node.style.left = e.pageX -this.state.relativeX +'px';

node.style.top = e.pageY -this.state.relativeY +'px';

}

}

render() {

return

                    onMouseEnter={this.handleMouseEnter}                    onMouseLeave={this.handleMouseLeave}                    onMouseDown={this.handleMouseDown}                    onMouseUp={this.handleMouseUp}                    onMouseMove={this.handleMouseMove}                    ref="dragPanel" style={{'cursor':this.state.cursor}}>

}

}

ReactDOM.render(,document.getElementById('root'));


+ e.clientX,e.clientY和e.pageX,e.PageY的区别是算不算上滚动条

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,061评论 0 2
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,862评论 1 18
  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 800评论 0 3
  • GUIDS 第一章 为什么使用React? React 一个提供了用户接口的JavaScript库。 诞生于Fac...
    jplyue阅读 3,611评论 1 11
  • 妈妈反思:用简短的话和孩子沟通,学会倾听,每天多点描述性赞扬
    马靖恩阅读 117评论 0 0