私はcyclejsを勉強し、div movabbleを作る方法に対処するにはいくつかの問題があります。起動するにはCyclejsとxとyで要素を動かす
、私は目的がマップがダウンしているときの動きを生成することである私が
- マウスダウン
- のmouseup
- のMouseMove
を計算する必要が3つのイベントを分離しており、私がマウスアップしたときに停止します
ここに私が持っているもの:
import {div} from '@cycle/dom'
import xs from 'xstream'
const getStyle = left => top => {
return ({
style: {
position: 'absolute',
left: left + 'px',
top: top + 'px',
backgroundColor: '#FF0000',
cursor: 'pointer'
}
})
}
function intent(DOMSources) {
const marble$ = DOMSources.select('.marble')
const marbleDown$ = marble$.events('mousedown')
const marbleMove$ = marble$.events('mousemove')
const marbleUp$ = marble$.events('mouseup')
return {marbleDown$, marbleUp$, marbleMove$}
}
function model({marbleDown$, marbleUp$, marbleMove$}) {
return xs.combine(marbleDown$, marbleMove$)
.map(([marbleDown, marbleMove]) => marbleMove)
.map(ev => ({x: ev.pageX, y: ev.pageY}))
.endWhen(marbleUp$)
}
function view(state$) {
return state$
.startWith({x: 0, y: 0})
.map(value => div('.marble', getStyle(value.x)(value.y), 'Move me ! ' + value.x + ' - ' + value.y))
}
export function Marble(sources) {
const changes$ = intent(sources.DOM)
const state$ = model(changes$)
const vTree$ = view(state$)
return {DOM: vTree$}
}
私の問題はモデル部分に表示されるようです。私がdivとmousedownとそれに入り、要素を動かすと、要素を上下に移動することができず、上下に移動することはできません。
私の2番目の問題は、私がマウスでブートンを離れるとき、私はそれに焦点を合わせるときに動き続けます。
私は悪い方法で何かを逃しているようです。
私は関数の間に追加しました。 RxjsのtakeUntillと同じです。詳細については、CycleJSオートコンプリート検索の例を参照してください。あなたの質問は私が機能の間に見つけるのに役立ちます、ありがとう:) –