Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • JavaScript

  • TypeScript

  • Vue

  • ElementUI

  • React

  • AntD

    • 基于 AntD 封装的与原生事件一致的 Input 组件
    • 基于 AntD 封装的 TextEllipsis
    • 基于 AntD 封装的可编辑 tabs
  • 前端
  • AntD
Henry
2022-08-05

基于 AntD 封装的 TextEllipsis

这里基本上都是参考的 基于 ElementUI 封装的 TextEllipsis | Henry (opens new window)

就不再赘述了,直接上源码:

import React from 'react'
import { useImmer } from 'use-immer'

import { Tooltip } from 'antd'
import './index.scss'

interface Props {
  title: string
  lineClamp?: number
  mouseEnterDelay?: number
  mouseLeaveDelay?: number
}

const TextEllipsis = function (props: Props) {
  const { title, lineClamp = 1, mouseEnterDelay = 300, mouseLeaveDelay = 300 } = props

  const [state, updateState] = useImmer({
    visible: false
  })

  function handleMouseEnter({ target }) {
    setTimeout(() => {
      const { scrollHeight, clientHeight } = target
      const visible = scrollHeight - clientHeight >= clientHeight / lineClamp
      updateState(draft => {
        draft.visible = visible
      })
    }, mouseEnterDelay)
  }

  function handleMouseLeave() {
    setTimeout(() => {
      updateState(draft => {
        draft.visible = false
      })
    }, mouseLeaveDelay)
  }

  return (
    <Tooltip title={title} visible={state.visible}>
      <div className="text-ellipsis">
        <div
          className="text-ellipsis-content"
          style={{ WebkitLineClamp: lineClamp }}
          onMouseEnter={handleMouseEnter}
          onMouseLeave={handleMouseLeave}>
          {title}
        </div>
      </div>
    </Tooltip>
  )
}

export default TextEllipsis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
编辑 (opens new window)
上次更新: 5/27/2023, 1:02:05 PM
基于 AntD 封装的与原生事件一致的 Input 组件
基于 AntD 封装的可编辑 tabs

← 基于 AntD 封装的与原生事件一致的 Input 组件 基于 AntD 封装的可编辑 tabs→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式