css:动画实现文字无缝滚动详解

主要用css动画,手撸两个文字滚动效果

一、竖直滚动

思路:

1、translateY对内容的容器进行位移,最外层套个小容器,设为overflow: hidden;这样就是一个竖直滚动的效果了

2、用 js 动态复制一份需要滚动的内容,填充滚动到末端时出现的空白,实现无缝滚动

3、利用动画自带的animation-play-state:paused;属性实现鼠标经过暂停,同理也可以用 js 添加点击暂停事件等等

HTML 部分

<div id="marquee">
  <div>
        <p>1</p>
        <p>2</p>
        <p>3</p>
        <p>4</p>
        <p>5</p>
    </div>
</div>

CSS 部分

#marquee{
	height: 60px;
	overflow: hidden;
}
#marquee>div {
    text-align: center;
    animation: marquee 10s linear infinite;
}
/*鼠标经过暂停*/
#marquee:hover>div{
	animation-play-state:paused;
}
#marquee p{
	height: 30px;
	margin: 0;
}
@keyframes marquee {
    0% {
        transform: translateY(0%);
    }
    100% {
        transform: translateY(-100%); 
    }
}

JS 部分

const marquee = document.getElementById('marquee');
const contents =  marquee.innerHTML;
marquee.innerHTML = contents + contents;//让最后一帧衔接复制出来的第一帧,实现无缝衔接

二、横向滚动

思路:

1、最外层小 div 设为溢出隐藏,包裹内容的div宽度设大点,这样内容 p 元素的内容才不会被挤换行

2、为什么使用 display:inline-block; ? 因为 display:block; 会换行, display:inline; transform无效

HTML 部分

 <div class="marquee_box">
        <div id="marquee_left">
            <p>定义了鼠标移入容器时的效果</p>
        </div>
    </div>

CSS 部分

 .marquee_box{
	  width: 150px;height: 30px;
      overflow: hidden;
  }
  #marquee_left{
      width: 1000px;
  }
  #marquee_left>p{
	  display:inline-block;
      animation: infinite 10s left linear;
  }
  #marquee_left:hover p{
 	  animation-play-state:paused;
  }
  @keyframes left{
      from{transform: translateX(0);}
      to{transform: translateX(-100%);}
  }

JS 部分

const marquee = document.getElementById('marquee_left');
const contents =  marquee.innerHTML;
marquee.innerHTML = contents + contents;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值