Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用RxJS Observable更改拖动事件上的css类_Javascript_Rxjs_Observable - Fatal编程技术网

Javascript 使用RxJS Observable更改拖动事件上的css类

Javascript 使用RxJS Observable更改拖动事件上的css类,javascript,rxjs,observable,Javascript,Rxjs,Observable,嗨,我的目标是使用Observable sequence来监听dragEnter/dragleave事件来更改css类。即: var myDraggableListEl = document.querySelector.... var itemDragIn$ = Rx.Observable.fromEvent(myDraggableListEl, 'dragenter').map((e)=> e.target); var itemDragOut$ = Rx.Observable.fro

嗨,我的目标是使用Observable sequence来监听dragEnter/dragleave事件来更改css类。即:

var myDraggableListEl = document.querySelector....

var itemDragIn$ = Rx.Observable.fromEvent(myDraggableListEl, 'dragenter').map((e)=> e.target);

var itemDragOut$ = Rx.Observable.fromEvent(myDraggableListEl, 'dragleave').map((e)=> e.target);
基本上,我只想在“dragenter”上添加一个“hover”类,然后在dragleave上删除同一个类

我想知道是否有一种聪明的方法来“合并”这2个,这样订阅就会是这样的:

.subscribe( (boolAdd, className, target ) => {
   boolAdd ?  target.classlist.add(className): target.classlist.remove(className)
}
也许我只是想得太多了,我只是把这两个观测值分开,但我只是想知道是否有人做到了这一点,或者他们是否有更好的方法。
谢谢

使用
Rx.Observable.merge()
方法完全可以做到这一点

链接:

示例(如下所示):

尽管请考虑以下可能更可读:

    // addClass and removeClass are defined somewhere (can represent jquery's functions)
    Rx.Observable
        .fromEvent($el, 'dragenter')
        .subscribe(function(e){
            addClass(e.target, 'dragg');
        });

    Rx.Observable
        .fromEvent($el, 'dragleave')
        .subscribe(function(e){
            removeClass(e.target, 'dragg');
        });

你能添加plunkr吗?@Gary添加了一个JSFIDLE:)我正在尝试使用scroll和click事件进行合并,似乎破坏了代码。
    // addClass and removeClass are defined somewhere (can represent jquery's functions)
    Rx.Observable
        .fromEvent($el, 'dragenter')
        .subscribe(function(e){
            addClass(e.target, 'dragg');
        });

    Rx.Observable
        .fromEvent($el, 'dragleave')
        .subscribe(function(e){
            removeClass(e.target, 'dragg');
        });