【问题标题】:programmatically resize div vertically以编程方式垂直调整 div 的大小
【发布时间】:2017-09-25 16:24:00
【问题描述】:

我正在使用 Angular4+。

我想以编程方式垂直调整 div 的大小。我不知道该怎么做。我不知道从哪里开始。以及如何实现它。我对使用 jquery 不感兴趣。使用 Angular 的方式实现此目的的任何想法或解决方案。

.textarea {
   min-height: 150px;
   border:1px solid #ddd;
   padding:15px;
   position:relative;
}

.textarea::before{
   content: '';
   position: absolute;
   bottom: 0;
   margin-left: -15px;
   cursor: s-resize;
   height: 9px;
   width: 100%;
   border-top: 1px solid #f1f1f1;
   overflow: hidden;
   background-color: #eff0f1;
   background-image: url('https://cdn.sstatic.net/Sites/stackoverflow/img/sprites.svg');
   background-image: url('https://cdn.sstatic.net/Sites/stackoverflow/img/sprites.svg'),none;
   background-position: 210px -364px;
   background-size: initial;
   background-repeat: no-repeat;
}
<div class="textarea"contenteditable="true">
  this is a text area
</div>

堆栈闪电战https://stackblitz.com/edit/angular-text-resizable

【问题讨论】:

    标签: javascript angular css typescript


    【解决方案1】:

    ngStyle 应该可以解决问题:

    <div class="textarea"contenteditable="true" [ngStyle]="{'height.px': height}">
    this is a text area
    </div>
    

    height 是组件中的变量:

    @Component(...)
    export class Component {
      height = 500;
    }
    

    【讨论】:

    【解决方案2】:

    一个指令

    import { Directive, HostListener, ElementRef, OnInit } from '@angular/core';
    
    @Directive({
      selector: '[resizer]'
    })
    export class NgxResizerDirective implements OnInit {
    
      height: number;
      oldY = 0;
      grabber = false;
    
      constructor(private el: ElementRef) { }
    
      @HostListener('document:mousemove', ['$event'])
      onMouseMove(event: MouseEvent) {
    
        if (!this.grabber) {
          return;
        }
    
        this.resizer(event.clientY - this.oldY);
        this.oldY = event.clientY;
      }
    
      @HostListener('document:mouseup', ['$event'])
      onMouseUp(event: MouseEvent) {
        this.grabber = false;
      }
    
      resizer(offsetY: number) {
        this.height += offsetY;
        this.el.nativeElement.parentNode.style.height = this.height + "px";
      }
    
      @HostListener('mousedown', ['$event']) onResize(event: MouseEvent, resizer?: Function) {
        this.grabber = true;
        this.oldY = event.clientY;
        event.preventDefault();
      }
    
      ngOnInit() {
        this.height = parseInt(this.el.nativeElement.parentNode.offsetHeight);
      }
    
    }
    

    HTML

    <div class="textarea"contenteditable="true">
      this is a text area
      <div resizer></div>
    </div>
    

    工作示例https://stackblitz.com/edit/angular-text-v-resizable

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多