react实现拖拽

import React from ‘react‘

export default class extends React.Component {  constructor(props) {    super(props);    this.state = {      translateX: 0,      translateY: 0,    };  }  small_down=(e)=> {    var obig = this.refs.move.parentNode;    var osmall = this.refs.move;    var e = e || window.event;    /*用于保存小的div拖拽前的坐标*/    osmall.startX = e.clientX - osmall.offsetLeft;    osmall.startY = e.clientY - osmall.offsetTop;    /*鼠标的移动事件*/    document.onmousemove = function(e) {      var e = e || window.event;      osmall.style.left = e.clientX - osmall.startX + "px";      osmall.style.top = e.clientY - osmall.startY + "px";      /*对于大的DIV四个边界的判断*/      let x=obig.offsetWidth-osmall.offsetWidth      let y=obig.offsetHeight-osmall.offsetHeight      if (e.clientX - osmall.startX <= 0) {        osmall.style.left = 0 + "px";      }      if (e.clientY - osmall.startY <= 0) {        osmall.style.top = 0 + "px";      }      if (e.clientX - osmall.startX >= x) {        osmall.style.left = x + "px";      }      if (e.clientY - osmall.startY >= y) {        osmall.style.top = y + "px";      }    };    /*鼠标的抬起事件,终止拖动*/    document.onmouseup = function() {      document.onmousemove = null;      document.onmouseup = null;    };  }  componentDidMount(){

}  render() {    return (      <div        style={{ width:"500px" ,height:"500px" ,background:"red" ,margin:"0 auto" ,position:"relative"}}      >        <div ref="move" onMouseDown={e => this.small_down(e)} style={{position:"absolute", left: `${this.state.translateX}px`,top:`${this.state.translateY}px`, width: 100, height: 100, backgroundColor: ‘blue‘, }} />      </div>    )  }};

原文地址:https://www.cnblogs.com/liuerpeng/p/10040794.html

时间: 2024-10-16 01:36:40

react实现拖拽的相关文章

React.js实现原生js拖拽效果及思考

一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖拽效果. 首先,其实拖拽效果的思路是很简单的.主要就是三个步骤: 1.onmousedown的时候,启动可拖拽事件,记录被拖拽元素的原始坐标参数. 2.onmousemove的时候,实时记录鼠标移动的距离,结合被拖拽元素第一阶段的坐标参数,计算并设置新的坐标值. 3.onmouseup的时候,关闭可拖拽事件

再谈React.js实现原生js拖拽效果

前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目地就是要尽量避免直接操作dom元素,所以我们在对dom元素进行操作的时候需要注意,我之前为了获取form的参数就直接用了var dragBox=document.getElementById('form')去找dom,但是其实记录from的初始位置,可以在其子组件更新父组件参数的时候调用.即在MyF

react 拖拽排序

react 拖拽排序.项目中用到了,记一笔.没有用react-dnd, 没有用react-beautiful-dnd, 因为需求简单,所以就自己撸了一个. 代码很简单 定义css, 两个动画 .drag-up { -webkit-animation: dragup ease 0.2s 1; animation: dragup ease 0.2s 1; -webkit-animation-fill-mode: forwards; animation-fill-mode: forwards; bac

React-Native ListView拖拽交换Item

在高仿"掘金"客户端的那个项目中,你会发现在打开和关闭"首页展示标签"中,我并没有实现可拖拽换位item的效果.不过在自己新写的Gank.io项目中,将这一功能实现了一把,在此记录一下.先上效果图 对,就是这样- 在实现这个效果前,我的思路是这样的,布局->item可点击突出显示->可移动item->可交换item->抬起手指恢复正确的位置.下面一一解释. 布局 忘了说了,由于这个界面的item的元素较少,并且为了方便起见,我并没有采用Lis

react-dnd 拖拽

介绍 React DnD 是一组 React 高阶组件,可以用来帮你构建复杂的拖拽接口,同时解耦你的组件.React DnD 非常适合像 Trello 和 Storify 这样的应用,在不同地方通过拖拽转移数据,而组件会改变它们的外观和应用的状态来响应拖拽事件. 基本用法 把应用的根组件包装在 DragDropContext 中 把可以拖拽的组件包装在 DragSource 中 设置 type 设置 spec,让组件可以响应拖拽事件 设置 collect,把拖拽过程中需要信息注入组件的 prop

拖拽插件SortableJS

在项目中,经常会遇到一些涉及到拖拽的需求,github上面有一个开源的SortableJS的插件,支持Vue,React,Angular等多种框架,实现效果很好,基本可以满足大部分的需求,下面就第一次在jquery中的使用做个简单的demo记录. 引入文件Sortable.min.js 指定包裹容器的id 根据api开始创建使用即可 <!DOCTYPE html> <html> <head> <meta charset="utf-8" />

element+sortablejs插件实现拖拽排序效果

背景1.后台管理系统中表格需要实现行拖拽功能2.表格使用element组件库中el-table 方案介绍 1.Sortable.js介绍:Sortable.js是一款轻量级的拖放排序列表的js插件引用自官方文档:No jQuery required. Supports Meteor, AngularJS, React, Polymer, Vue, Knockout and any CSS library, e.g. Bootstrap.参考地址: https://github.com/Sorta

拖拽原理以及代码实现

拖拽功能主要是用在让用户做一些自定义的动作,比如拖动排序,弹出框拖动移动等等:挺好玩儿.下面分享一下拖拽的原理,和码友们一起学习! 拖拽流程: 1)事件:onmousedown:onmousemove:onmouseup: 2)实现原理分析: 拖拽是通过获取鼠标移动的距离来实现的,即计算移动前的位置的坐标(x,y)与移动中的位置的坐标(x,y)差值.当onmousedown或onmousemove时,都可以获取到当前鼠标的位置,即移动前的坐标值与移动中的坐标值.参考如下图: 如上图所示: 在on

Qt之QAbstractItemView视图项拖拽(二)

一.需求说明 上一篇文章Qt之QAbstractItemView视图项拖拽(一)讲述了实现QAbstractItemView视图项拖拽的一种方式,是基于QDrag实现的,这个类是qt自己封装好了的,所以可定制性也就没有了那么强,最明显的是,这个类在执行exec方法后,mouse系列的回调接口就被阻塞了,随之而来的问题就是拖拽时item项没有了hover特性,为了解决这个问题,我们就不能使用QDrag类来实现拖拽了,这也是这篇文章我要讲述的内容. 二.效果展示 如图1是demo的效果展示,比较丑,