基于React.js实现简单的文字跑马灯效果.docx

基于React.js实现简单的文字跑马灯效果.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

基于React.js实现简单的文字跑马灯效果

刚好手上有一个要实现文字跑马灯的react项目,然后ant-design上面没有这个组件,于是只能自己手撸一个。

我想到的最简单的方法,就是定位啦,定时移动这个文字块不就跑起来了。

需要注意的是,要判断文字的宽度,当文字超出屏幕的宽度的时候再动起来,我用的是hook的写法,要在销毁页面的时候清掉定时器。定时器要放在useRef里面。

consttimer=useRefany(null);

const[left,setLeft]=useState(0);

constcontentRef=useRefany(null);

useEffect(()={

//当监听到文字变化时,一定要先清掉定时器,如果文字较短的话就不会再启动

if(timer.current){clearInterval(timer.current);}

constcontentDom=contentRef.current;

if(contentDom){

constobj=contentDom.getBoundingClientRect();

//判断文字框长度

if(obj.widthprops.width){

timer.current=setInterval(()={

//注意state是负数,?当数字移动到最后的时候,下一次从父元素的宽度开始,看起来就是一直在向左移动

//文字框的宽度要时时获取

//setLeft要从回调里面获取,不然不能时时更新

setLeft((state)=-state=contentDom.getBoundingClientRect().widthprops.width:state-1,);},100);

}else{setLeft(0);}

},[props.children]);

useEffect(()={

//注销时,清空定时器

return()={

if(timer.current){clearInterval(timer.current);}

},[]);

return(divclassName={styles.noticeCompWrapper}

这移动效果还可以吧,时间间隔一定要小,不然就会一卡一卡的

第一种很容易吧,其实最开始是想用纯css来写的,考虑到css没法获取自适应宽度,咋判断文字移动到末尾了?但是我觉得,css肯定是可以办到,于是我继续探索...

animation走起,,,咱们假设外边框长120px,文字长240px

@keyframesrun{

0%{transform:translateX(0);}

50%{transform:translateX(-240px);}

50%{transform:translateX(120px);}

100%{transform:translateX(-240px);}

}

总感觉有啥不对,这个字咋往回跑,这感觉跑来跑去的。。。

平心静气~没事没事,不就是个小bug么~

仔细思考一下,这只要写两个动画就解决了,因为其实除了第一次不同,后面都是从右边进入视角的有木有。

@keyframesrun{

from{transform:translateX(0);}

to{transform:translateX(-240px);}

@keyframesloop{

from{transform:translateX(120px);}

to{transform:translateX(-240px);}

}

咱们用的时候,第一个走一遍就好了,循环后面那个:

.textContent{

white-space:nowrap;

animation-name:run,loop;

animation-duration:5s;

animation-iteration-count:1,infinite;

animation-timing-function:linear;

position:relative;

}

look,是不是好多了~

接下来就是文字长度的问题了~咋们咋控制他要不要动啊?还有移动的时间和距离咋控制??

首先动画时间,less肯定是算不出来

文档评论(0)

187****0335 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档