JavaScript 的自定义事件库.有吗?建议

Custom event library for JavaScript. Are there any? Recommendations?

本文关键字:有吗 建议 事件 自定义 JavaScript      更新时间:2023-09-26

我正在寻找一个JavaScript库,它允许我使用我可以订阅和触发的自定义事件。我还需要事件名称/范围的工作方式与消息队列中的主题类似,您可以在其中订阅命名空间并获取该命名空间的所有事件。

例如

var myCustomEventHandler = new CustomEventHandler();
myCustomEventHandler.bind('my.event', function(data) { console.log('Event 1'); });
myCustomEventHandler.bind('my.other.event', function(data) { console.log('Event 2'); });
myCustomEventHandler.bind('my.*', function(data) { console.log('Event 3'); });
myCustomEventHandler.trigger('my.event');
// Logs "Event 1" and "Event 3"
myCustomEventHandler.trigger('my.other.event');
// Logs "Event 2" and "Event 3"
myCustomEventHandler.trigger('my.something.else');
// Logs "Event 3"

我可以编写一些自定义的东西,但如果有开源库,我更喜欢使用开源库。

干杯。

YUI 2 也有类似的东西,我假设 YUI 3 也有,但我还没有足够详细地研究它来了解它。EventEmitter 似乎至少可以满足您的一些要求,而且要小得多。microjs 事件的其他一些库也可能很有前途。

看看豆子。真棒。

我还建议看看js-signals。

这是他们网站的基本示例:

//custom object that dispatch a `started` signal
var myObject = {
    started : new signals.Signal()
};
function onStarted(param1, param2){
    alert(param1 + param2);
}
myObject.started.add(onStarted); //add listener
myObject.started.dispatch('foo', 'bar'); //dispatch signal passing custom parameters
myObject.started.remove(onStarted); //remove a single listener

试试 RxJS。

这暴露了 Javascript 中 Reactive Extensions 和 Linq 的强大功能。例:

this.searcher = $(me._textboxSelector)
        .toObservable("keyup")
        .Select(function (_) {
            return $(me._textboxSelector).val();
        })
        .Where(function (str) {
            if (me._madeSomeHiding && str.length < me._minStringLength) {
                $(me._itemsSelector).show();
            }

这允许在列表上创建筛选器。因此,您可以说如果用户键入 2 个字符并停止 250 毫秒,然后执行某些操作。

我在一天中遇到了同样的问题,所以我创建了一个超级小的库来帮助我处理事件。看看它,也许你会发现它很有用。

https://github.com/anvk/Events.js

var events = new utils.Events();
var callback1 = function() {...};
var callback2 = function(arg1, arg2) {...};
events.on('event A', callback1);
events.on('event B', callback2);
events.emit('event A');
events.emit('event B', [var1, var2]);

一个JavaScript事件库,用于jQuery事件提供的所有内容,而无需jQuery。

https://github.com/AtheistP3ace/jAwn

老问题,但这是我为个人使用而放在一起的东西,但我基本上采用了 jQuery 并仅对他们的事件内容进行了自定义构建。去除了 Sizzle 和他们强加给你的其他一切,即使使用自定义事件构建也是如此。

这只剩下特定的事件代码和缓存(事件需要)。此代码已使用所有最新的 3.0 jQuery 更新和错误修复进行了更新。这只能保证与jQuery 3.0支持的任何浏览器一起使用(https://jquery.com/browser-support/)。总而言之,min文件是13kb,支持jQuery可以对事件执行的所有操作。命名空间、自定义事件、直接和委托事件、传递数据、触发事件,应有尽有。

阅读文档。这很简单。就像 jQuery 一样工作,而不是在 jQuery 对象上调用 on、off、trigger 等,而是将元素作为第一个参数传递。

正如我之前所说,我这样做是为了个人使用,所以这不是我不断支持和更新的项目,但我尽量让它保持最新以供我自己使用,并确保它具有最新的修复程序。我已经在多个项目中使用它多年了,效果很好。我最近才把它放在GitHub上,以防其他人发现它有用。

试试 KeyderJS:

Keyder(document.getElementById("my_element")).click(function(){
    alert("Mouse button pressed");
}, function(){
    alert("Mouse button released");
});
有点

晚了,但你可能对 https://github.com/asyncly/EventEmitter2 感兴趣

从描述:

特征

Namespaces/Wildcards.
Times To Listen (TTL), extends the once concept with many.
Browser environment compatibility.
Demonstrates good performance in benchmarks

我也建议使用KeyderJS,因为它是一个"简单而强大的JavaScript库"。我发现并且仍然发现它非常有用。它使我的编码更容易。它还具有许多浏览器兼容性。

此外,您不必非常了解JavaScript即可使用它,并且可以成为JavaScript新手或专家来使用它。