vue实现大屏下方通知公告

文章目录

概要

首先我们需要一个容器放置通知的内容id为notification-container,他的宽度为当前需要滚动的屏幕宽度,id为notification的盒子则负责放置通知的内容,当他大于屏幕宽度时,我们的x轴平移长度则应为屏幕的宽度,因为要保持初始化的时候,通知的内容是从屏幕的最右侧开始平移。

所以我们的动效translateX的值不是100%,而是container的宽度。

并且我们的动画效果持续时间要根据字数的长度决定。

实现

HTML部分代码:
<div class="container" id="notification-container">
    <div class="notification" id="notification">
      <span v-for="(notify,index) in notificationList" :key="index">{{notify}}</span>
    </div>
</div>

CSS部分代码:
@keyframes scroll-left {
  0% {
    transform: translateX(var(--scroll-width,100%));
  }
  100% {
    transform: translateX(-100%);
  }
}
#notification{
  display: inline-block;
  animation: scroll-left var(--animation-duration, 20s) linear infinite;
  line-height: 45px;
  font-family: Source Han Sans CN, Source Han Sans CN;
  font-weight: 300;
  color: #fffaf9;
  font-size: 20px;
}
js部分代码:
data() {
    return {
        notificationArr:['通知1','通知2','通知3'],
        notificationList:[],
    }
},
created(){
    this.setNotificationMove()
},
methods: {
    setNotificationMove(){
      this.notificationList = this.notificationArr.map((item, index) =>"【" + (index + 1) + "】" + item);
      let lengths = this.notificationList.map(item => item.length)
      let duration = lengths.reduce((a, b) => a + b) * 0.2 + 's'
      const notification = document.getElementById('notification');
      const notificationContainer = document.getElementById('notification-container');
      let notificationWidth = notificationContainer.offsetWidth;
      notification.style.setProperty('--animation-duration', duration);
      // 设置当前宽度为外部盒子宽度
      notification.style.setProperty('--scroll-width', notificationWidth + 'px');
    }
}

小结

优化部分:可以将多条通知循环接替滚动而不是拼为同一条滚动消息进行滚动。

优化后文章:vue实现多条通知公告循环播报

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值