本文主要是介绍react mui textfield marquee 跑马灯效果实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
网上找了一圈包括stackoverflow, 也没有找到mui textfield marquee的实现方式,结合gpt实现了下,效果是,如果这个文字不超过textfield本身,则不滚动,否则在鼠标悬浮的时候滚动,并且滚动的距离应该是比较恰到好处的
用法如下: text是你需要填写的文字
还可以再封装下比如一些style什么的..
<MarqueeTypography> text </MarqueeTypography>
import React, { useRef, useState, useEffect } from 'react';
import { Typography, GlobalStyles } from '@mui/material';const MarqueeTypography = ({ children }) => {const textRef = useRef(null);const [isOverflowing, setIsOverflowing] = useState(false);const [distance, setDistance] = useState(0);useEffect(() => {if (textRef.current) {const textWidth = textRef.current.scrollWidth;const containerWidth = textRef.current.clientWidth;const newDistance = textWidth - containerWidth;setIsOverflowing(textWidth > containerWidth);if (newDistance !== distance) {setDistance(newDistance);}}}, [distance, children]);return (<><GlobalStylesstyles={{'@keyframes marquee': {'0%': { transform: 'translateX(0%)' },'100%': { transform: `translateX(-${distance}px)` },},}}/><TypographyfontSize={'14px'}ref={textRef}sx={{overflow: 'hidden',whiteSpace: 'nowrap',textOverflow: 'ellipsis','&:hover': {overflow: 'visible',textOverflow: 'clip',whiteSpace: 'nowrap',animation: isOverflowing ? `marquee 3s linear infinite` : 'none',},}}>{children}</Typography></>);
};
这篇关于react mui textfield marquee 跑马灯效果实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!