Angular 2 window.scrollTo不工作?

时间:2017-01-25 05:58:37

标签: javascript jquery html css angularjs

我试图让它成为我的div元素,设置为" overflow:auto"将在用户拖动元素时滚动。

拖动元素可以正常工作,因此可以检索正确的鼠标数据(例如初始拖动时的x / y位置(onDragStart)以及鼠标移动时的当前x / y位置。

我意识到滚动的逻辑可能已关闭,但我更多的是尝试让div元素滚动。任何有关错误的见解都将不胜感激......材料设计也在使用中。

注意:我使用ng-metadata将Angular 1移植到Angular 2,实际上Angular 1或Angular 2中的任何指导都会有所帮助。

@autobind
onDragStart({clientX, clientY}) {
  this.initY = clientY;
  if (this.isDragging) return;
  document.addEventListener('mousemove', this.dragListener = (e) => {
  e.preventDefault();
  if (Math.max(Math.abs(e.clientX - clientX), Math.abs(e.clientY - clientY)) > 3) {
    document.removeEventListener('mousemove', this.dragListener);
    document.addEventListener('mousemove', this.onDrag);
    this.dragListener = this.onDrag;
    this.fileService.dragSource = this.file;
    // onDrag needs to be called before Angular can set the proper classes
    this._element.toggleClass('dragging', this.isDragging);
    this._element.toggleClass('bulk-dragging', this.inBulkDragOp);
    this.onDragScroll(e);
    this.onDrag(e);
    this.drag.emit();
    this._scope.$applyAsync();
  }
});
}

@autobind
onDrag(e) {
  console.log("Dragging...");
  console.log(e);
  var currentY = e.clientY;
  var range = 100; // Range of 100px before scrolling begins... May need tweaking if too responsive

if (currentY > this.initY + range) {
  console.log("SCROLL DOWN");
  window.scrollTo(0, 500);
} else if (currentY < this.initY - range) {
  console.log("SCROLL UP");
}
e.preventDefault();
this._element.css('transform', `translate(${e.clientX - this._element[0].clientWidth / 2}px, ${e.clientY - this._element[0].clientHeight / 2}px)`);
}

1 个答案:

答案 0 :(得分:2)

我的容器标签设置为100%的高度,这似乎打破了滚动的功能。删除它解决了问题。