CSS动画之——跑马灯的无缝循环

在写官网的过程中,有一个需求是想要是先人物卡片横向无缝循环的功能。但是直接用跑马灯的时候发现他的效果是要等所有的盒子都从左边消失后才会从后面出来第一个。 怎么调都不合适 给我整疑惑了, 后来百度下说是可以两个相同的盒子 一前一后,看到这豁然开朗,但是后来忘了是哪篇帖子了 这里记录一下。

先来看看效果 (因为上传限制只能传个单次循环的
请添加图片描述

首先我是用v-for循环定义了四个盒子 再复制一份 这样我们一共就有八个盒子

<div class="target-top" style="overflow: hidden">
  <div class="target-img">
    <div v-for="item in targetFors" :key="item.id">
			...//内容不重要
    </div>
  </div>

  <div class="target-img img-right">
    <div v-for="item in targetFors" :key="item.id">
			...//内容不重要
    </div>
  </div>
</div>

设置其中的样式 这里还做了一个鼠标移入实现动画暂停以及放大的效果

.target-top {
  position: relative;
  overflow: hidden;
  display: inline-flex;
}

.img-right {
  position: relative;
  left: 10px; // 这里的间距可以根据你想要的宽度自行调整
}

.target-img {
  width: 100%;
  height: 400px;
  // display: flex;
  display: inline-flex;
  justify-content: space-between;
  animation: marquee 30s linear infinite;
  //这里做了一个鼠标移入盒子放大的效果
  > div:hover {
    transition: all 0.6s;
    transform: scale(1.1);
  }
  > div {
    width: 527px;
    height: 310px;
    /*background: #ffffff;
    box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.2);
    border-radius: 12px 12px 12px 12px;
    opacity: 1;
    margin-right: 100px;
    margin-top: 40px;*/  //无关的属性
    flex-shrink: 0;// 禁止缩放盒子
  }
}
//定义动画效果开始的位置以及消失的位置
@keyframes marquee {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-100%);
  }
}

//实现鼠标移入放大的效果
.target-top:hover .target-img {
  animation-play-state: paused;
}

Tips:这里有个注意点就是 不要把鼠标如果暂停的效果直接放到.target-img盒子上去 这样会导致 只有其中一个盒子暂停 另一个盒子不会暂停。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现CSS文字跑马无缝衔接,可以使用CSS3的动画特性和伪元素来实现。以下是一个示例代码: HTML代码: ``` <div class="marquee"> <span>This is a demo of CSS Marquee</span> </div> ``` CSS代码: ``` .marquee { position: relative; overflow: hidden; white-space: nowrap; } .marquee span { position: absolute; left: 100%; display: inline-block; animation: marquee 10s linear infinite; } @keyframes marquee { 0% { transform: translateX(0); } 100% { transform: translateX(-100%); } } ``` 解释: - `.marquee` 元素的 `position` 属性设置为 `relative`,以便让内部元素 `span` 的绝对定位相对于 `.marquee` 元素。 - `.marquee` 元素的 `overflow` 属性设置为 `hidden`,以隐藏 `span` 元素超出父元素的内容。 - `.marquee` 元素的 `white-space` 属性设置为 `nowrap`,以防止换行。 - `.marquee span` 元素的 `position` 属性设置为 `absolute`,以便让它们相对于 `.marquee` 元素的左边界定位。 - `.marquee span` 元素的 `left` 属性设置为 `100%`,以便让它们开始时从父元素的右侧进入。 - `.marquee span` 元素的 `display` 属性设置为 `inline-block`,以便让它们在同一行显示。 - `.marquee span` 元素的 `animation` 属性定义了动画名称、持续时间、动画速度和循环次数。 - `@keyframes marquee` 定义了动画的关键帧,从 0% 到 100% 分别表示动画的开始和结束状态。在这个例子中,我们使用 `transform: translateX()` 属性将 `span` 元素向左移动,从而实现了文字跑马效果。 通过以上代码,你可以实现一个CSS文字跑马无缝衔接的效果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值