【问题标题】:How to show "show more" button when text has ellipsis?文本有省略号时如何显示“显示更多”按钮?
【发布时间】:2018-05-03 12:34:59
【问题描述】:

在发布此问题之前,我已在 Google 和此处搜索过。 我找到了几个解决我的问题的方法,但没有一个适合我的需求。

这是我的代码:Plunker

    <div *ngIf="description.length > 200" class="ui mini compact buttons expand">
        <button class="ui button" (click)="showMore($event)">Show more</button>
    </div>

“显示更多”按钮仅在文本长度超过 200 个字符时出现。 如您所见,这似乎是一个不错的解决方案。

showMore(event: any) {
    $(event.target).text((i, text) => { return text === "Show more" ? "Show less" : "Show more";    });
    $(event.target).parent().prev().find('.detail-value').toggleClass('text-ellipsis');
}

无论如何,我可以有一个不长 200 个字符且不适合 SPAN 元素的文本,然后它有省略号但“显示更多”按钮不出现。

无论如何,我怎样才能使我的解决方案发挥作用?您知道解决该问题的解决方法或最佳解决方案吗?

【问题讨论】:

    标签: javascript html css angular ellipsis


    【解决方案1】:

    使用可能的解决方案进行编辑:

    //our root app component
    import {Component, NgModule, VERSION, OnInit} from '@angular/core'
    import {BrowserModule} from '@angular/platform-browser'
    import {ElementRef,ViewChild} from '@angular/core';
    
    @Component({
      selector: 'my-app',
      template: `
        <div class="ui segment detail-container" (window:resize)="checkOverflow(span)">
          <span class="title-container" role="heading">User details</span>
          <div class="detail-group">
            <div class="detail-element">
              <span class="detail-label">Name</span>
              <span class="detail-value">John</span>
            </div>
            <div class="detail-element">
              <span class="detail-label">Surname</span>
              <span class="detail-value">Smith</span>
            </div>
          </div>
    
          <div class="detail-group">
            <div class="detail-element">
              <span class="detail-label">Description</span>
              <span #span class="detail-value text-ellipsis">{{description}}</span>
            </div>
            <div class="ui mini compact buttons expand">
                <button  *ngIf="checkOverflow(span) && showMoreFlag" class="ui button" (click)="showMore($event)">Show more</button>
                <button  *ngIf="!showMoreFlag" class="ui button" (click)="showMore($event)">Show less</button>
            </div>
          </div>
        </div>
      `,
      styleUrls: ['src/app.css']
    })
    
    
    
    export class App implements OnInit {
      description: string = 'Lorem ipsum dolor sit a ';
      showMoreFlag:boolean = true;
    
      constructor() {
      }
    
      ngOnInit(): void {
        this.overflowOcurs = this.checkOverflow(this.el.nativeElement);
      }
    
      showMore(event: any) {
            this.showMoreFlag = !this.showMoreFlag;
            $(event.target).parent().prev().find('.detail-value').toggleClass('text-ellipsis');
        }
    
        checkOverflow (element) {
        if (element.offsetHeight < element.scrollHeight ||
            element.offsetWidth < element.scrollWidth) {
          return true;
        } else {
          return false;
        }
      }
    }
    
    @NgModule({
      imports: [ BrowserModule ],
      declarations: [ App ],
      bootstrap: [ App ]
    })
    export class AppModule {}
    

    Plunker 正常工作:

    https://plnkr.co/edit/HCd6ds5RBYvlcmUtdvKr

    【讨论】:

    • 这可能是我的问题的解决方法,无论如何这不是我想要的。
    • 那你在找什么?如果你解释我可以帮助你!
    • 我正在寻找一种在出现省略号时显示“显示更多”按钮的方法,而不是字符长度。
    • 感谢您的回答,但如果您调整页面大小,它将不起作用:(
    • 这很容易解决。我编辑了,你可以查看结果。
    【解决方案2】:

    我推荐使用“ng2-truncate”。

    使用此组件,您可以根据长度或字数或其他内容截断代码。

    希望这个组件对你有所帮助。

    Plunker

    npm

    【讨论】:

    • 长度还是单词?线呢?
    • @smartmouse。它不支持行,但支持最大长度或字数过滤器。 {{ "abcdefghijkl" |截断:3 }} => abc... 或 {{ "abcd ef gh" |单词:2 }} => abcd ef..
    • 那不是我要找的。还是谢谢你。
    • 转到此链接ng2-truncate-source 并克隆源代码,然后更改支持行的分隔符。
    • 如果我能做到,我就不需要在这里提出问题了 :)
    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 2017-09-06
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2020-11-20
    相关资源
    最近更新 更多