使用vue帮我实现一个跑马灯效果并且鼠标悬浮停止滚动
时间: 2024-12-28 13:35:25 浏览: 7
在Vue.js中实现跑马灯效果(轮播图),通常会结合`v-for`指令和`transition`组件。下面是一个简单的例子:
```html
<template>
<div class="marquee-container">
<ul v-loading="{el: '#loader', color: 'blue'}" :key="index">
<li v-for="(item, index) in items" :key="index" @mouseenter="pauseScroll(index)" @mouseleave="resumeScroll(index)">
{{ item }}
</li>
</ul>
<transition name="fade" mode="out-in">
<div id="loader" class="spinner">加载中...</div>
</transition>
</div>
</template>
<script>
export default {
data() {
return {
items: ['Item 1', 'Item 2', 'Item 3', 'Item 4'],
currentIndex: 0,
isPaused: false,
};
},
methods: {
pauseScroll(index) {
this.isPaused = true;
if (this.currentIndex === index) {
setTimeout(() => {
this.next();
}, 500); // 模拟滚动延迟
}
},
resumeScroll(index) {
this.isPaused = false;
},
next() {
this.currentIndex++;
if (this.currentIndex >= this.items.length) {
this.currentIndex = 0;
}
this.$nextTick(() => {
if (!this.isPaused) {
this.scroll();
}
});
},
scroll() {
// 使用JavaScript操作DOM元素实现滚动,这里仅作演示,实际应用中可能会使用第三方库如vue-awesome-swiper
const marquee = document.querySelector('.marquee-container');
marquee.scrollTop += marquee.scrollHeight;
},
},
mounted() {
this.scroll(); // 初始滚动
setInterval(() => {
this.next();
}, 2000);
},
};
</script>
<style scoped>
.marquee-container {
overflow-y: hidden;
height: 100px; /* 根据实际需求调整 */
}
li {
white-space: nowrap;
display: inline-block;
}
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s ease;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
</style>
在这个示例中,当鼠标悬停在某一列表项上时,滚动会被暂停,并在500毫秒后切换到下一个项目。当鼠标离开时,滚动恢复。通过定时器每2秒钟自动滚动一次。
阅读全文