当前位置: 首页 > 知识库问答 >
问题:

当高度超过最大高度时,使离子文本区域可滚动

岳嘉石
2023-03-14

我正在尝试在我的应用程序中实现聊天。

我写了一个自动调整离子文本区域如下:视图

<ion-footer [keyboardAttach]="content">
  <ion-toolbar class="text-input">
    <ion-item no-lines>
      <ion-textarea autosize
        rows="1"
        placeholder="Votre message..."
        autocomplete="on"
        autocorrect="on"
        [(ngModel)]="message"
        >
      </ion-textarea>
      <button ion-button small icon-only round item-end color="secondary" (tap)="onSend()">
        <ion-icon name="send"></ion-icon>
      </button>
    </ion-item>
  </ion-toolbar>
</ion-footer>

CSS

ion-footer {
    ion-toolbar.toolbar.toolbar-ios {
      &.toolbar:last-child {
        padding-bottom: 0px;
        height: auto;
      }
    }
    ion-item.item-textarea {
      background-color: transparent;
    }
    .text-input {
      height: auto;
      div.input-wrapper {
        background-color: #fff;
        border-radius: 20px;
        textarea.text-input {
          margin-left: 8px;
          max-height: 100px;
        }
      }
    }
  }

指令

import {ElementRef, HostListener, Directive, OnInit, ViewChild} from '@angular/core';
import {Content} from 'ionic-angular';

@Directive({
  selector: 'ion-textarea[autosize]'
})

export class AutosizeDirective implements OnInit {
  @HostListener('input', ['$event.target'])
  onInput(textArea:HTMLTextAreaElement):void {
    this.adjust();
  }

  constructor(public element:ElementRef) {
  }

  ngOnInit():void {
    setTimeout(() => this.adjust(), 0);
  }

  adjust():void {
    let textArea = this.element.nativeElement.getElementsByTagName('textarea')[0];
    textArea.style.overflow = 'hidden';
    textArea.style.height = 'auto';
    textArea.style.height = textArea.scrollHeight + "px";
  }
}

除了滚动,一切都很好。

当我超过100px最大高度时,我无法在ion文本区域中滚动。。。因此,如果我想纠正文本中隐藏的部分,那是不可能的。此外,当我试图滚动它实际上滚动聊天(离子内容)。。。

知道我该怎么解决这个问题吗?

共有1个答案

长孙阳泽
2023-03-14

我是这样解决的。SCSS

.text-input {
      height: auto;
      div.input-wrapper {
        background-color: #fff;
        border-radius: 20px;
        textarea.text-input {
          margin-left: 8px;
          //overflow-y: auto;
          //max-height: 100px;
        }
      }
    }

并使用包含调整功能的自定义自动调整指令:

adjust():void {
    let textArea = this.element.nativeElement.getElementsByTagName('textarea')[0];
    textArea.style.height = 'auto';
    if (textArea.scrollHeight < 100) {
      textArea.style.height = textArea.scrollHeight + "px";
      textArea.style.overflowY = 'hidden';
    } else {
      textArea.style.height = "100px";
      textArea.style.overflowY = 'auto';
    }

  }

希望这能帮助其他人。

 类似资料:
  • 我试图设置一个渐变覆盖整个页面 这是我的代码: (我知道我写的最大高度:1%;,请继续阅读) 正如我所说,身高:100% 不起作用,所以我尝试使用各种输入,我看到的是,当我使用像素作为最大高度时,渐变的高度会发生变化,但无论我选择什么输入作为百分比的最大高度,渐变的高度都会保持不变,例如,在我的代码中,我使用了最大高度:1% 和渐变仍然超出了网页的高度。 我检查了开发工具,并应用了max heig

  • 问题内容: 我想在页面上居中放置宽度/高度未知的图像,同时确保它比页面大时会缩小(即使用/ )。 我尝试使用该方法,但是在Firefox中,对于用声明的元素中的所有元素均被忽略。有没有办法在不使用高度的情况下垂直居中可变高度元素? 我可以更改标记。JavaScript是可以接受的,但是我不能使用JQuery(或任何其他JS库)。 问题答案: 这应该证明可以很好地工作…不需要JavaScript :

  • 问题内容: 我想创建仅由类名支持的展开/折叠动画(使用JavaScript来切换类名)。 我要上一堂课 另一个(我也尝试过value ,它根本没有动画) 进行动画处理: 我使用CSS过渡在它们之间进行切换,但是浏览器似乎在为所有这些多余的动画设置动画,因此它会延迟折叠效果。 有没有办法做到这一点(本着同样的精神- 使用CSS类名)没有副作用(我可以减少像素数,但是显然有缺点,因为它可能会切断合法文

  • 基本上,我在我的网站顶部有一个div,上面有logo,最初logo有一个高度,div的大小将与logo的高度一致(笔中为200px)。 我想做的是,当我向下滚动时,使徽标变小,或者当我向上滚动时,使徽标变大,基本上,scrollY值需要以某种方式链接到图像高度(直到我向下滚动到一个点,我不想继续收缩标志)。 我尝试用一个状态设置高度css属性,并用一个事件监听器更新它,每次检测到滚动时都会更新状态

  • 问题内容: 我使用此 CSS将最大高度设置为 谁能给我一个普遍的答案, 和 之间有什么区别? 问题答案: 这是W3Clink的解释: 以下算法描述了两个属性[min-height和max-height]如何影响’height’属性的使用值: 临时使用的高度是根据上面“计算高度和边距”下的规则计算的(不包括“最小高度”和“最大高度”)。 如果此暂定高度大于“最大高度”,则会再次应用上述规则,但是这次

  • 问题内容: 编写CSS媒体查询时,有什么方法可以使用“或”逻辑指定多个条件? 我正在尝试做这样的事情: 问题答案: 使用逗号指定两个(或多个)不同的规则: 从https://developer.mozilla.org/en/CSS/Media_queries/ …此外,您可以在逗号分隔的列表中组合多个媒体查询;如果列表中的任何媒体查询为true,则将应用关联的样式表。这等效于逻辑“或”运算。