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 相关文章推荐
Flexigrid在IE下不显示数据的处理的解决方法
Oct 24 Javascript
jQuery事件用法实例汇总
Aug 29 Javascript
jQuery大于号(>)选择器的作用解释
Jan 13 Javascript
jquery对复选框(checkbox)的操作汇总
Jan 13 Javascript
Boostrap入门准备之border box
May 09 Javascript
深入理解jQuery之防止冒泡事件
May 24 Javascript
JavaScript第一篇之实现按钮全选、功能
Aug 21 Javascript
request请求获取参数的实现方法(post和get两种方式)
Sep 27 Javascript
angularjs中回车键触发某一事件的方法
Apr 24 Javascript
浅谈JS函数节流防抖
Oct 18 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
Jan 20 Javascript
浅析vue-router原理
Oct 19 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/02/14 PHP
php cli换行示例
2014/04/22 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
javascript实现unicode和字符的互相转换
2007/07/18 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
python字符串排序方法
2014/08/29 Python
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
详解Django框架中的视图级缓存
2015/07/23 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
银行员工辞职信范文
2014/01/20 职场文书
社区居务公开实施方案
2014/03/27 职场文书
商业项目策划方案
2014/06/05 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
瘦西湖导游词
2015/02/03 职场文书
黑白记忆观后感
2015/06/18 职场文书
无故旷工检讨书
2015/08/15 职场文书
MySQL锁机制
2021/04/05 MySQL
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Python机器学习之逻辑回归
2021/05/11 Python
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server