css怎样实现中奖公告无缝滚动的效果?

Admin 2021-10-18 群英技术资讯 1179 次浏览

    css怎样实现中奖公告无缝滚动的效果?相信大家在一些网站上都有看到过中奖公告,那么这样的循环而且无缝滚动的效果文字展示效果是怎样做的呢?下面我们通过一个实例来了解一下。

一、效果预览

最近在做一个活动页面,遇到幸运用户中奖的滚动公告需求。下面是实现效果:

(gif录制略显卡顿,实际效果很流畅)

二、无缝滚动原理

1、容器宽高固定,超出内容隐藏;
2、内容准备2份,现参与滚动的内容有A、B两份,向左滚动;
3、滑动过程中,B份紧随A份之后,营造出无缝滚动回来的效果;
4、在A部分内容完全滚出容器的一瞬间,立刻将AB内容位置复原,由于A、B内容一模一样,这个复原过程很难看出来;
5、循环第3步;

三、代码

1、html部分

<template>
  <div class="lucky-user">  <!-- 容器 -->
    <ul class="user-list" :style="`animation-duration: ${luckyUsers.length * 4}s;`">  <!-- 内容区容器 -->
     <li v-for="(item, index) in luckyUsers" :key="index">{{ item }}</li>   <!-- 内容A -->
     <li v-for="(item, index) in luckyUsers" :key="index+'copy'">{{ item }}</li>  <!-- 内容B -->
    </ul>
  </div>
</template>

2、CSS部分

.lucky-user {
  width: 540px; //容器定宽高
  height: 30px;
  margin: 0 auto;
  font-size: 18px;
  line-height: 30px;
  color: #E9B65F;
  overflow: hidden; //超出内容隐藏
  .user-list {
    width: fit-content; // Q1
    white-space: nowrap; // 内容不换行
    animation-name: seamless-scrolling; // Q3
    animation-timing-function: linear; // 动画速度曲线,匀速
    animation-iteration-count: infinite; // 动画循环无限次播放
    li {
      display: inline-block;
      margin-right: 30px;
    }
  }
}

@keyframes seamless-scrolling {
  0% {
    transform: translateX(0px);
  }
  100% {
    transform: translateX(-50%); //Q2
  }
}

Q1:因为滚动内容一般都不是固定的,需要接口获取,所以内容区的宽度也就无法确定,这里使用CSS3的新特性width: fit-content,使宽度自适应内部内容,至于为什么这里需要设置宽度属性,见下文
Q2:设置动画。由于内容区实际有AB两份,B是A的副本,所以一段动画的终点就是内容区向左位移50%(内容区width的50%),这也就解释了Q1中为什么一定要设置宽度属性了:如果不设置,width的值不会随内容撑开,此时的50%是父容器width的50%,终点值就错了
Q3:为什么animation不采用简写形式,而是拆开? 因为animation-duration 动画时长不能固定,如果接口获取到的数据很多,动画时长固定5s,那滚动地得有多快?所以animation-duration采用属性绑定形式,根据数据长度进行延长  :style="animation-duration: ${luckyUsers.length * 4}s;" 具体乘几看自己喜欢。
我也试过采用简写形式进行style属性绑定,结果发现动画不生效。

3、JS部分

export default {
 name: 'app',
  data() {
   return {
    luckyUsers: []
   }
  },
  created() {
   this.getLuckyUsersList()
  },
  methods: {
   getLuckyUsersList () {
     //调接口拿取数据
     this.luckyUsers = [
      '000000抽中了xxx奖品',
      '111111抽中了xxx奖品',
      '222222抽中了xxx奖品',
     ]
    }
  }
}

四、总结

无缝滚动的实现主要借助了css3中的animation、width:fit-content自适应属性、translate位移等特性;
从实现原理上看,其实就是一个欺骗眼睛的小伎俩而已~

    关于css实现中奖公告滚动的内容就介绍到这,本文实现的原理还是比较好理解,希望能对大家有帮助。当然还有其他实现方法,想要了解更多,大家可以关注其它的相关文章。

文本转载自脚本之家

群英智防CDN,智能加速解决方案

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服