Vue3实现公告滚动效果

工具:vue3 + ts + element-plus

1. 实现效果

2. 思路

代码逻辑实现起来挺简单,就是通过循环定时器,定时修改数据,然后通过vue的响应式渲染即可

3. 代码实现

<script lang="ts" setup>
import {ref} from "vue";
import request from "@/api/request";
import urls from "@/api/urls";

let noticeList = ref([]); // 存储所有公告数据的数组
const index = ref(0) // 当前公告在数组中的索引
const notice = ref(""); // 当前公告

// 向后端请求所有的公告数据
const getNoticeData = () => {
    request.get(`${urls.API_SYSTEM_NOTICE}/selectAll`).then(res => {
        if (res.code == 200) {
            noticeList.value = res.data;
            notice.value = res.data[0]; // 初始化为第一条公告
        }
    })
}
getNoticeData();

// 循环定时器,定时改变索引,然后再通过索引去数组中获取其他的公告数据,然后就改变当前的公告数据,这样就达到动态修改公告数据
setInterval(() => {
    if (index.value == noticeList.value.length - 1) index.value = 0; // 判断索引是否越界,越界则从头开始
    notice.value = noticeList.value[index.value]; // 修改数据
    index.value++; // 索引+1
}, 2000) // 定时2秒修改一次
</script>

<template>
    <div class="container">
        <el-card style="width: 500px">
            {{ notice.title }}
        </el-card>
    </div>
</template>

<style lang="scss" scoped>
.container {
  width: 100vw;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>
Vue公告滚动效果通常是指在一个滚动区域(如轮播图、滚动列表或消息面板)展示动态更新的内容,比如系统通知或新闻。实现这种效果的一种常见做法是使用 Vue 的响应式特性结合 CSS 或动画库(如 Vuetify 的 `v-loading` 或 Vanilla JavaScript 的 `Intersection Observer API`)。步骤大致如下: 1. **创建组件**:定义一个公告组件,包含消息列表和滚动功能。 ```html <template> <div class="scrolling-container"> <ul ref="scrollList" v-for="announcement in announcements" :key="announcement.id"> <!-- 每条公告的模板 --> <li>{{ announcement.content }}</li> </ul> <button @click="loadMore">加载更多</button> </div> </template> <script> export default { data() { return { announcements: [], isScrolling: false, hasMore: true, // 初始状态表示还有更多内容 }; }, methods: { loadMore() { if (this.hasMore) { this.$axios.get('api/announcements') // 使用 API 获取更多数据 .then(response => { this.announcements.push(...response.data); this.isScrolling = true; setTimeout(() => { // 等待滚动完成后再停止 this.isScrolling = false; }, 500); // 假设动画延迟500ms }); } }, }, }; </script> ``` 2. **CSS样式**:添加 CSS 来实现滚动效果和加载提示。例如,可以设置滚动监听器并在滚动到容器底部时触发 `loadMore` 方法。 ```css .scrolling-container { overflow-y: auto; /* 自动滚动 */ } .load-more { display: none; position: fixed; bottom: 20px; width: 80%; text-align: center; } .is-scrolling & { display: block; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值