美文网首页
vant的picker组件设置文字超长滚动

vant的picker组件设置文字超长滚动

作者: 木兮君 | 来源:发表于2020-09-17 10:08 被阅读0次

    我们的手机端使用vant来做前端UI框架。

    今天在使用vant的picker组件时候,遇到了一个问题。当文字过长的时候,vant的处理方式是ellipsis,超长部分显示【...】

    如果恰好省略号前边内容相同,用户就无法区分选项了。如图:

    image

    vant没有提供滚动的实现方式,所以我们自己兼容实现一下。

    首先,打开开发者工具看下dom结构

    image

    我的思路是,如果在选中状态下,内层文字div长度大于外层的时候。给内层增加一个滚动动画效果。

    实现如下:

    • 重写.van-ellipsis两个样式,去掉ellipsis效果和overflow:hidden
    • 监听picker的change事件
    • 在dom渲染结束之后,获取.van-picker-column__item--selected并判断它与内部文字的宽度
    • 如果内部组件宽度大于外部,在添加一个animation
    <template>
      <div id="app">
        <van-picker show-toolbar title="标题" :columns="columns" @change="checkScroll" />
      </div>
    </template>
    <script>
    export default {
      name: 'App',
      data () {
        return {
          columns: [{
            text: '浙江',
            children: [{
              text: '温州温州温州温州温州温州温州-杭州',
              children: [{ text: '西湖区' }, { text: '余杭区' }],
            }, {
              text: '温州温州温州温州温州温州温州-温州',
              children: [{ text: '鹿城区' }, { text: '瓯海区' }],
            }]
          }]
        }
      },
      methods: {
        checkScroll () {
          this.$nextTick(() => {
            // 获取选中元素
            let selectedItems = [...document.querySelectorAll('.van-picker-column__item--selected')]
            selectedItems.forEach(item => {
              let child = item.querySelector('.van-ellipsis')
              if (child.offsetWidth > item.offsetWidth) { // 判断child文字宽度
                item.classList.add('scroll')
              } else {
                item.classList.remove('scroll')
              }
            })
          })
        }
      }
    }
    </script>
    <style lang="less" scoped>
    /deep/ .van-picker-column__item--selected {
      /* 重写选中后的效果 */
      .van-ellipsis {
        text-overflow: unset;
        overflow: visible;
      }
      /* 增加scroll类 */
      &.scroll > .van-ellipsis {
        animation: move 4s linear infinite;
      }
    }
    @keyframes move {
      0% { transform: translateX(100%); }
      100% { transform: translateX(-100%); }
    }
    </style>
    

    这样,当滚动picker选中文字超长的时候,选中项就会出现滚动效果。

    image

    相关文章

      网友评论

          本文标题:vant的picker组件设置文字超长滚动

          本文链接:https://www.haomeiwen.com/subject/geflyktx.html