javascript-过滤窗口上的事件与DOM节点上的单个事件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-过滤窗口上的事件与DOM节点上的单个事件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1455字,纯文字阅读大概需要3分钟。
内容图文
![javascript-过滤窗口上的事件与DOM节点上的单个事件](/upload/InfoBanner/zyjiaocheng/662/dcbe552f6b854465945cf583f3fe4cf0.jpg)
考虑以下代码示例:
import R from 'ramda';
import {Observable} from 'Rx';
var allClicks_ = Observable.fromEvent(window, 'click').share();
var getClicks = function(klass) {
return allClicks_.filter(e => {
return R.contains(klass, e.target.classList);
});
};
getClicks('red').subscribe(x => {
render('RED: ' + x.target.className);
});
getClicks('blue').subscribe(x => {
render('BLUE: ' + x.target.className);
});
我没有将单击事件侦听器添加到“ .red”和“ .blue”,而是向窗口添加了事件侦听器并过滤了“ .red”和“ .blue”上的事件.
现在这样的代码会出什么问题?它比向单个DOM节点添加事件侦听器更有效(或更低)?还是没有性能优势?
编辑:共享热的Observable,以便仅附加一个事件处理程序.
解决方法:
这是委托事件处理程序的示例.此模式非常有用.实际上如此有用,以至于jQuery和dojo之类的库都对此模式提供了内置支持(请参见jQuery.on和dojo.on的选择器参数).
向每个DOM节点添加事件处理程序实际上是O(n)操作,而这是O(1)操作.随着匹配的DOM节点数量的增加,委托事件处理程序模式实现了更大的收益.
有什么问题吗?
>如果在顶级元素(在本例中为窗口)和目标元素之间附加了事件处理程序,并且该事件处理程序执行ev.stopPropagation(),则委派的处理程序将永远不会看到该事件.
>如果您的过滤器功能过于复杂和缓慢,则浏览器将比平时运行过滤器花费更多的时间.
>在添加事件处理程序之后,您将获得针对DOM节点添加的事件.通常认为这是一件好事.但是,如果由于某种原因而没有想到,它可能会把您扔掉.
请注意,在您的特定示例中,实际上正在注册两个点击处理程序.您可以通过共享将其简化为单个实例:
var allClicks_ = Observable.fromEvent(window, 'click').share();
内容总结
以上是互联网集市为您收集整理的javascript-过滤窗口上的事件与DOM节点上的单个事件全部内容,希望文章能够帮你解决javascript-过滤窗口上的事件与DOM节点上的单个事件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。