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与图片美化checkbox和radio控件的代码(打包下载)
Nov 11 Javascript
JQuery之拖拽插件实现代码
Apr 14 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
Nov 23 Javascript
JavaScript判断文件上传类型的方法
Sep 02 Javascript
JavaScript通过join函数连接数组里所有元素的方法
Mar 20 Javascript
详解JavaScript中的客户端消息框架设计原理
Jun 24 Javascript
Vue.js实现微信过渡动画左右切换效果
Jun 13 Javascript
javascript将list转换成树状结构的实例
Sep 08 Javascript
p5.js实现斐波那契螺旋的示例代码
Mar 22 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
Jan 07 Javascript
.netcore+vue 实现压缩文件下载功能
Sep 24 Javascript
three.js显示中文字体与tween应用详析
Jan 04 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 数组二分法查找函数代码
2010/02/16 PHP
php检测文本的编码
2015/07/26 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
javascript 构造函数方式定义对象
2015/01/02 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
轻松学习JavaScript函数中的 Rest 参数
2019/05/30 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
Windows下python3.6.4安装教程
2018/07/31 Python
pytorch的batch normalize使用详解
2020/01/15 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
八项规定对照检查材料
2014/08/31 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
Nginx快速入门教程
2021/03/31 Servers
MySQL中的隐藏列的具体查看
2021/09/04 MySQL
python程序的组织结构详解
2021/12/06 Python
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技