React+ES6 实例化教程(4)

在自己发了之前的几篇文章之后感觉还是没有什么进展,读的人很少并且自己也意识到这样写的进度很慢了,那我就再抽出我的多一点时间来加快我的进度。

继上次说的计数组件之后这次我打算写一个很常见但是能训练很多react的点的小功能组件,这就是很多学习者很熟悉的拖拽事件,虽然说这个很简单但是他能比较实际的反映出react功能的强大之处。废话少说我们开始吧。

通过前面的学习认识大家有可能意识到我们修改这中小例子的时候其实就是在修改我们的js文件其他的不需要动很多的东西,所以我们就先分析一下我们的这个例子需要我们做一些什么。拖拽事件牵扯很多的DOM交互这也是我之所以说这个例子的原因。

首先我们需要的是一个实现拖拽的元素(Drag组件),另外需要给他一个定位,其中最重要的就是我们需要分析我能实现拖拽最重要的数据是什么?那就是样式的left以及top值,这样的话我们就应该将这两个放在组件的state中然后这两个值就是我们这次操作的主要数据,另外就是我们需要获取DOM元素并且动态的获取鼠标的位置与鼠标开始拖拽的位置然后进行运算,经过这样的分析我们就大概清楚我们需要做的是什么了.

第一步我们需要在界面添加一个拖拽元素,像这样:


浏览器展示

代码显示像这样:


react.js

这样的话我们的基本的DOM结构就写好了接下来我们需要做的就是动态获取鼠标的位置以及元素定位了,这样的话就需要我们绑定事件来实现。

第二部,我们对拖拽元素添加鼠标事件来进行对拖拽的反应,像这样:


绑定鼠标事件代码

然后我们在组件中写一下具体的实现函数:


对应的函数事件

其中我需要解释的就是这里面的参数ev这个是经过react处理的参数,输出后会发现里面会有鼠标事件的所有元素,包括位置目标对象等等,大家可以仔细看一下。然后我们就是进入界面看一下我们鼠标点击下去的时候会不会有相应的操作。如果你不粗心的话应该很顺利的才出现了相应的输出。

第三步就是我们需要进行运算就是我们需要获得鼠标开始拖拽的位置就是鼠标位置减去元素的定位数值,算法我相信大家比我强的多也熟悉的多吧,就这样我们还需要调用this.setState()来进行动态的获取以及赋值来改变元素的位置,试想一下我们改变元素位置是发生在鼠标移动的事件中所以我们这个setState是要写在鼠标移动事件里面的,代码像这样:


鼠标位置算法实现

这样的话我们的一个简单的拖拽事件就完成了,需要强调的是我这里面的css样式都写在了行内并且也是以this.state的值进行渲染的,以后我会给大展示我们经常接触的那种样式,还有就是在这里面我们基本用的是原生js进行编写的,往后走我还会给大家展示结合JQ的编写react组件的教学,希望大家能跟随我的脚步进行学习。

最近我还在同步更新webpack的教学文章希望有用的着的同学过去看一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,265评论 25 707
  • 本笔记基于React官方文档,当前React版本号为15.4.0。 1. 安装 1.1 尝试 开始之前可以先去co...
    Awey阅读 7,632评论 14 128
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,808评论 1 18
  • 有时候,人们总忽视了,在熟悉路边,不经意间的风景。 下午时分,闲来无事走去后街,瞧见两只小狗挤在一起,分享着路边餐...
    老西瓜阅读 120评论 0 0
  • 有一件事困扰了我很久 我小时候可以说是一个三观端正积极向上的孩子——虽然实力不怎么样,但也算是名垂青史:我救了...
    备用文档阅读 1,072评论 2 9