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 相关文章推荐
jquery 模式对话框终极版实现代码
Sep 28 Javascript
使用jquery实现select添加实现后台权限添加的效果
May 28 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
Aug 12 Javascript
JS实现不规则TAB选项卡效果代码
Sep 16 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
May 10 Javascript
AngularJS控制器之间的数据共享及通信详解
Aug 01 Javascript
微信小程序自动客服功能
Nov 02 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
Nov 28 Javascript
Node.js的Koa实现JWT用户认证方法
May 05 Javascript
vue2.0项目实现路由跳转的方法详解
Jun 21 Javascript
JS实现百度网盘任意文件强制下载功能
Aug 31 Javascript
JS数组实现分类统计实例代码
Sep 30 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
简单的过滤字符串中的HTML标记
2006/12/25 PHP
php创建多级目录代码
2008/06/05 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
Python分支结构(switch)操作简介
2018/01/17 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
三年大学生活自我鉴定
2014/01/21 职场文书
医务人员自我评价
2014/01/26 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
刮痧观后感
2015/06/05 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python
python数据处理之Pandas类型转换
2022/04/28 Python