React.Js添加与删除onScroll事件的方法详解


Posted in Javascript onNovember 03, 2017

React简介

React是有Facebook开发出来用于构建前端界面的JS组件库,由于其背后的强大背景,使得这款库在技术开发上完全没有问题。

React的优势

  • 解决大规模项目开发中数据不断变化变得难以操作的问题;
  • 组件化开发,使得开发更加快速;
  • 单向数据流,有利于找到问题;
  • 虚拟DOM,在React内部有一套diff算法可以快速的计算出整体需要改动的位置,从而做到快速局部刷新;举个栗子:删除一个列表再插入个新表,计算后会比较出不同然后插进去;

前言

大家都可能会遇到这样的问题,那就是滚动事件 。比较获取div的滚动事件,在ReactJS想要给div添加一个滚动事件,那基本上是添加不上的(可能是我的能力有限吧,反正我到目前为止,还没有找到可以直接给DIV添加滚动事件的)。

要想实现滚动,那就必须得componentWillMount里注册scroll事件, window.addEventListener(‘scroll', this.onScroll.bind(this)) ,添加事件非常容易的就添加上了。

在componentWillUnmount 里删除 window.removeEventListener(‘scroll', this.onScroll.bind(this)) 

添加容易,删除难,上面那种 remove是删除不了的。在其它页面里,如果你滚动也会触发 onScroll里的事件,此时就会报错,说组件已经卸载,不能进行操作,检查一下代码等等吧。

我想肯定有遇到了,也有解决的办法,果真找到了一篇文章移除 scroll 办法的。

代码如下:

componentDidMount() {
 regScroll(this.handler.bind(this));
 //window.addEventListener('scroll', this.handler.bind(this),false)
}

componentWillUnmount() {
 window.onscroll = '';
 //window.removeEventListener('scroll', this.handler.bind(this),false)
}
 //添加事件监听
function regScroll(myHandler) {
 if (window.onscroll === null) {
 window.onscroll = myHandler
 } else if (typeof window.onscroll === 'function') {
 var oldHandler = window.onscroll;
 window.onscroll = function () {
 myHandler();
 oldHandler();
 }
 }
}
//删除所有事件监听
function removeScrollHandler(){
 window.onscroll=''
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js判断为空Null与字符串为空简写方法
Feb 24 Javascript
jQuery取消特定的click事件
Feb 29 Javascript
详解jQuery中的deferred对象的使用(一)
May 27 Javascript
微信小程序 详解页面跳转与返回并回传数据
Feb 13 Javascript
jQuery 实现双击编辑表格功能
Jun 19 jQuery
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
Jul 10 Javascript
iframe与主框架跨域相互访问实现方法
Sep 14 Javascript
vue移动端路由切换实例分析
May 14 Javascript
微信小程序input框中加入小图标的实现方法
Jun 19 Javascript
vue实现循环切换动画
Oct 17 Javascript
js中console在一行内打印字符串和对象的方法
Sep 10 Javascript
基于Cesium绘制抛物弧线
Nov 18 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 #jQuery
nginx配置React静态页面的方法教程
Nov 03 #Javascript
angular中ui calendar的一些使用心得(推荐)
Nov 03 #Javascript
mui上拉加载更多下拉刷新数据的封装过程
Nov 03 #Javascript
基于ES6作用域和解构赋值详解
Nov 03 #Javascript
AngularJS中controller控制器继承的使用方法
Nov 03 #Javascript
vue解决跨域路由冲突问题思路解析
Nov 03 #Javascript
You might like
一些常用的php简单命令代码集锦
2007/09/24 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
js读取cookie方法总结
2014/10/31 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
关于雷锋的演讲稿
2014/05/10 职场文书
工业设计专业自荐书
2014/06/05 职场文书
绿色环保标语
2014/06/12 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
通知的写法
2015/04/23 职场文书
计算机教师工作总结
2015/08/13 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python