rxjs - 拖放自动滚动(dom-autoscrolling)

标签 rxjs ng2-dragula

我有一个列表 text元素并希望在我拖动新元素时自动将我的列表滚动到底部。

一旦我拖放列表中的元素一次,下面的示例就可以正常工作。

我相信我需要打一次 observable拖之前。

我正在使用 draguladom-autoscrolling .

import {takeUntil} from "rxjs/internal/operators/takeUntil";
import * as autoScroll from 'dom-autoscroller';

const drake = this.dragulaService.find(this.dragulaBagName);
this.dragulaService.drag.pipe(
  takeUntil(this.destroyed$),
).subscribe(([bag, movingEl, containerEl]) => {
  autoScroll(containerEl.parentNode, {
    margin: 20,
    pixels: 10,
    scrollWhenOutside: true,
    autoScroll: function () {
      return this.down && drake && drake.drake && drake.drake.dragging;
    }
  });
});

显然,this.down在回调中 autoScroll一开始就设置为false...一旦拖放一次,它就可以正常工作。

有任何想法吗?

最佳答案

尝试使用 (mousedown)="initAutoScroll()"

initAutoScroll(){
  const drake = this.dragulaService.find(this.dragulaBagName);
  this.scroll = autoScroll(
  containerEl.parentNode,
  {
    margin: 30,
    maxSpeed: 25,
    scrollWhenOutside: true,

    autoScroll: function () { 
      return this.down && drake.drake.dragging;
    }
  });
}


this.dragulaService.dragend.asObservable().subscribe(value => {
  if (this.scroll) {
    this.scroll.destroy();  // destroy when don't use auto-scroll
  }
});

关于rxjs - 拖放自动滚动(dom-autoscrolling),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51396506/

相关文章:

javascript - 合并的可观察量不包含序列,即使合并者包含序列

system.reactive - 如何采取第一次发生,然后抑制事件 2 秒(RxJS)

node.js - Angular 7 : Uncaught ReferenceError: global is not defined when adding package

angular - 未捕获的 TypeError : ctorParameters. map 不是函数

javascript - dragula - 如何禁用在其父容器中的拖动

javascript - node_modules\ng2-dragula\index.js 未导出“DragulaModule”

angular - 在 Angular 12 应用程序中使用 RXJS 进行多个顺序 API 调用

javascript - 使用 ngrx/store 进行观察 - 竞争条件

angular - 错误 TS2339 : Property 'takeUntil' does not exist on type 'Observable<Foo>' and other rxjs v. 6 个错误

javascript - ng2 - Dragula 动画和样式导入不正确