Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.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 我怎样才能暂时“离开”;块;bacon.js中使用另一个流的EventStream?_Javascript_Jquery_Frp_Bacon.js - Fatal编程技术网

Javascript 我怎样才能暂时“离开”;块;bacon.js中使用另一个流的EventStream?

Javascript 我怎样才能暂时“离开”;块;bacon.js中使用另一个流的EventStream?,javascript,jquery,frp,bacon.js,Javascript,Jquery,Frp,Bacon.js,我正试图用FRP概念来概括我的想法,并使用bacon.js构建一个图像滑块。我正在映射next按钮(这是一个人为的示例,顺便说一句)单击流,如下所示: var position = $slideshow.find('.next').asEventStream('click').map(function(){ return 1; }).scan(0, function(x,y){ return x + y < $slideshow.find('.slide').length

我正试图用FRP概念来概括我的想法,并使用
bacon.js
构建一个图像滑块。我正在映射
next
按钮(这是一个人为的示例,顺便说一句)单击流,如下所示:

var position = $slideshow.find('.next').asEventStream('click').map(function(){
    return 1;
}).scan(0, function(x,y){
    return x + y < $slideshow.find('.slide').length ? (x + y) : 0;
});

position.onValue(function(val){
    //set things
});
这感觉像作弊(特别是在做FRP“练习”时…),所以我想知道是否有任何方法可以将我的点击流与动画结束事件流结合起来:

var animationEndStream = $slideshow.asEventStream('animationend');

如果您设法将动画结束事件捕获为
EventStream
,例如
animEndE
,则现在可以将“正在制作动画”状态定义为
属性,如中所示

var animEndE = $slideshow.asEventStream('animationend')
var nextE = $slideshow.find('.next').asEventStream('click')
var prevE = $slideshow.find('.next').asEventStream('click')
var moveE = nextE.map(1).merge(prevE.map(-1))

var animatingP = moveE.awaiting(animEndE)
var position = moveE.filter(animatingP.not()).scan(0, function(x,y) { return x+y })
如您所见,我正在基于
animatingP
的否定过滤
moveE

var animEndE = $slideshow.asEventStream('animationend')
var nextE = $slideshow.find('.next').asEventStream('click')
var prevE = $slideshow.find('.next').asEventStream('click')
var moveE = nextE.map(1).merge(prevE.map(-1))

var animatingP = moveE.awaiting(animEndE)
var position = moveE.filter(animatingP.not()).scan(0, function(x,y) { return x+y })