【HarmonyOS NEXT】Text组件超长省略号展示模式如何实现支持中间省略与头部省略模式

 

【关键字】

Text / 超长省略号 / 中间省略 / 头部省略 / 模式定义

【问题描述】

ArkTS的Text组件,超长省略号展示模式不支持中间省略与头部省略模式,是否有替代方案?

【解决方案】

使用Text的ellipsisMode属性可以实现。

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text#%E7%A4%BA%E4%BE%8B6

示例代码:

@Entry
@Component
struct TextExample6 {
  @State text: string = 'This is set ellipsisMode to EllipsisMode text content This is set ellipsisMode to EllipsisMode text content.'
  @State ellipsisModeIndex: number = 0;
  @State ellipsisMode: EllipsisMode[] = [EllipsisMode.START, EllipsisMode.CENTER, EllipsisMode.END]
  @State ellipsisModeStr: string[] = ['START', 'CENTER', 'END']
  build() {
    Column() {
      Text(this.text)
        .fontSize(16)
        .border({ width: 1 })
        .lineHeight(20)
        .maxLines(1)
        .textOverflow({overflow:TextOverflow.Ellipsis})
        .ellipsisMode(this.ellipsisMode[this.ellipsisModeIndex])
        .width(300)
        .margin({ left: 20, top: 20 })

      Row() {
        Button('更改省略号位置:' + this.ellipsisModeStr[this.ellipsisModeIndex]).onClick(() => {
          this.ellipsisModeIndex++
          if(this.ellipsisModeIndex > (this.ellipsisModeStr.length - 1)) {
            this.ellipsisModeIndex = 0
          }
        })
      }.margin({ top: 10 })
    }
  }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的前端分页组件,它可以选择跳转的页数,当页数大于6页时,中间会加上省略号。 ```html <div class="pagination"> <ul> <li class="prev-page">上一页</li> <li class="page active">1</li> <li class="page">2</li> <li class="page">3</li> <li class="page">4</li> <li class="page">5</li> <li class="page">6</li> <li class="ellipsis">...</li> <li class="page">10</li> <li class="next-page">下一页</li> </ul> </div> ``` ```css .pagination { display: flex; justify-content: center; align-items: center; } .pagination ul { display: flex; list-style: none; margin: 0; padding: 0; } .pagination li { display: inline-block; margin: 0 5px; font-size: 14px; cursor: pointer; } .pagination li.active { color: #fff; background-color: #007bff; border-color: #007bff; } .pagination li:hover:not(.active) { color: #007bff; border-color: #007bff; } .pagination li.ellipsis { margin: 0 10px; } .pagination li.disabled { pointer-events: none; color: #6c757d; background-color: #fff; border-color: #6c757d; } ``` ```javascript class Pagination { constructor(container, options) { this.container = container; this.options = Object.assign( { currentPage: 1, totalPage: 10, visiblePages: 6, onPageChange: () => {}, }, options ); this.render(); } render() { const { currentPage, totalPage, visiblePages } = this.options; const startPage = Math.max(currentPage - Math.floor(visiblePages / 2), 1); const endPage = Math.min(startPage + visiblePages - 1, totalPage); const pages = Array.from({ length: endPage - startPage + 1 }, (_, i) => startPage + i); const prevPage = currentPage > 1 ? currentPage - 1 : null; const nextPage = currentPage < totalPage ? currentPage + 1 : null; const html = ` <ul> <li class="prev-page ${prevPage ? '' : 'disabled'}">${prevPage ? '上一页' : ''}</li> ${pages .map( (page) => ` <li class="page ${page === currentPage ? 'active' : ''}" data-page="${page}">${page}</li> ` ) .join('')} ${endPage < totalPage ? '<li class="ellipsis">...</li>' : ''} ${endPage < totalPage ? `<li class="page" data-page="${totalPage}">${totalPage}</li>` : ''} <li class="next-page ${nextPage ? '' : 'disabled'}">${nextPage ? '下一页' : ''}</li> </ul> `; this.container.innerHTML = html; this.bindEvents(); } bindEvents() { const { onPageChange } = this.options; this.container.querySelectorAll('.page').forEach((page) => { page.addEventListener('click', () => { const newPage = parseInt(page.dataset.page); this.options.currentPage = newPage; this.render(); onPageChange(newPage); }); }); this.container.querySelector('.prev-page').addEventListener('click', () => { if (this.options.currentPage > 1) { this.options.currentPage--; this.render(); onPageChange(this.options.currentPage); } }); this.container.querySelector('.next-page').addEventListener('click', () => { if (this.options.currentPage < this.options.totalPage) { this.options.currentPage++; this.render(); onPageChange(this.options.currentPage); } }); } } const container = document.querySelector('.pagination'); new Pagination(container, { currentPage: 1, totalPage: 10, visiblePages: 6, onPageChange: (page) => { console.log(`跳转到第 ${page} 页`); }, }); ``` 在使用时,只需要将容器元素传入 `Pagination` 类的构造函数,并传入相应的配置项即可。 ```html <div class="pagination"></div> ``` ```javascript const container = document.querySelector('.pagination'); new Pagination(container, { currentPage: 1, totalPage: 10, visiblePages: 6, onPageChange: (page) => { console.log(`跳转到第 ${page} 页`); }, }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值