vue3+js 实现轮播滚动

vue3-seamless-scroll无缝滚动 title: “Vue3.0 无缝滚动组件展示数据第1条”,title: “Vue3.0 无缝滚动组件展示数据第2条”,title: “Vue3.0 无缝滚动组件展示数据第3条”,title: “Vue3.0 无缝滚动组件展示数据第4条”,title: “Vue3.0 无缝滚动组件展示数据第5条”,title: “Vue3.0 无缝滚动组件展示数据第6条”,title: “Vue3.0 无缝滚动组件展示数据第7条”,title: “Vue3.0 无缝滚动组件展示数据第8条”, 阅读详情

效果:(可控制鼠标hover时停止滚动)
在这里插入图片描述
实现:
1.新建vue文件封装组件

<template>
  <!-- 滚动容器,用于包裹整个滚动内容,设置了固定高度并隐藏溢出部分 -->
  <div class="seamless-scroll" ref="scrollContainer">
    <!-- 滚动内容区域,根据滚动方向添加不同的类名以应用相应的动画 -->
    <div class="scroll-content" :class="{
        'scroll-up': direction === 'up',
        'scroll-down': direction === 'down',
      }">
      <!-- 第一组内容,展示原始的滚动项 -->
      <div class="scroll-item">
        <!-- 使用 v-for 指令遍历数据源数组 items,为每个项目渲染一个滚动项 -->
        <div v-for="(item, index) in items" :key="item.key || index" class="scroll-item-content">
          <!-- 使用插槽插入每个滚动项的具体内容 -->
          <slot :item="item" :index="index"></slot>
        </div>
      </div>
      <!-- 第二组内容,与第一组内容相同,用于实现无缝衔接滚动效果 -->
      <!-- <div class="scroll-item">
        <div v-for="(item, index) in items" :key="item.key || index" class="scroll-item-content">
          <slot :item="item" :index="index"></slot>
        </div>
      </div> -->
    </div>
  </div>
</template>
 
<script setup>
import { ref, onMounted, onBeforeUnmount } from "vue";

// 组件属性定义
const props = defineProps({
  // 滚动速度(秒),值越小滚动越快
  speed: {
    type: Number,
    default: 30,
  },
  // 滚动方向:up-向上,down-向下,left-向左,right-向右
  direction: {
    type: String,
    default: "up",
    // 验证传入的方向值是否合法
    validator: (value) => ["up", "down", "left", "right"].includes(value),
  },
  // 是否启用鼠标悬停暂停
  hover: {
    type: Boolean,
    default: false,
  },
  // 数据源数组,用于渲染滚动项
  items: {
    type: Array,
    default: () => [],
  },
  // 每个项目的高度(像素),目前未在代码中使用,可用于后续计算滚动距离等
  itemHeight: {
    type: Number,
    default: 40,
  },
});

// 组件状态和引用
// 引用滚动容器元素,用于添加和移除鼠标事件监听器
const scrollContainer = ref(null);
// 记录鼠标是否悬停在滚动容器上的状态
const isHovered = ref(false);

// 处理鼠标进入事件
const handleMouseEnter = () => {
  // 如果启用了鼠标悬停暂停功能
  if (props.hover) {
    // 将鼠标悬停状态设置为 true
    isHovered.value = true;
  }
};

// 处理鼠标离开事件
const handleMouseLeave = () => {
  // 如果启用了鼠标悬停暂停功能
  if (props.hover) {
    // 将鼠标悬停状态设置为 false
    isHovered.value = false;
  }
};

// 生命周期钩子:在组件挂载后执行
onMounted(() => {
  // 如果启用了鼠标悬停暂停功能
  if (props.hover) {
    // 为滚动容器添加鼠标进入事件监听器,触发 handleMouseEnter 方法
    scrollContainer.value?.addEventListener("mouseenter", handleMouseEnter);
    // 为滚动容器添加鼠标离开事件监听器,触发 handleMouseLeave 方法
    scrollContainer.value?.addEventListener("mouseleave", handleMouseLeave);
  }
});

// 生命周期钩子:在组件卸载前执行
onBeforeUnmount(() => {
  // 如果启用了鼠标悬停暂停功能
  if (props.hover) {
    // 移除滚动容器的鼠标进入事件监听器
    scrollContainer.value?.removeEventListener("mouseenter", handleMouseEnter);
    // 移除滚动容器的鼠标离开事件监听器
    scrollContainer.value?.removeEventListener("mouseleave", handleMouseLeave);
  }
});

// 监听窗口大小变化
window.addEventListener("resize", () => {
  // 这里需要重新计算滚动样式,因为窗口大小变化可能会影响滚动距离
  // 但是这里没有提供重新计算滚动样式的方法,所以暂时保留原来的样式
  // 后续可添加根据窗口大小重新计算滚动距离和动画的逻辑
});
</script>
 
<style lang="scss" scoped>
/* 滚动容器样式 */
.seamless-scroll {
  width: 100%;
  height: 200px;
  overflow: hidden;
  position: relative;

  /* 滚动内容区域样式 */
  .scroll-content {
    position: absolute;
    width: 100%;
    /* 性能优化相关属性 */
    will-change: transform;
    backface-visibility: hidden;
    transform-style: preserve-3d;
    perspective: 1000px;

    /* 向上滚动动画 */
    &.scroll-up {
      // 使用 Vue 的 v-bind 指令动态绑定动画的持续时间,根据传入的 speed 属性设置
      animation: scrollUp 20s linear infinite;
      // animation: scrollUp v-bind('speed + "s"') linear infinite;
      // 当鼠标悬停在滚动内容上时,暂停动画
      &:hover {
        animation-play-state: paused;
      }
    }

    /* 向下滚动动画 */
    &.scroll-down {
      // 动态绑定动画的持续时间
      // animation: scrollDown v-bind('speed + "s"') linear infinite;
      animation: scrollDown 20s linear infinite;
      // 鼠标悬停时暂停动画
      &:hover {
        animation-play-state: paused;
      }
    }

    /* 滚动项样式 */
    .scroll-item {
      width: 100%;
    }
  }
}

/* 向上滚动动画关键帧 */
@keyframes scrollUp {
  0% {
    transform: translateY(0);
  }
  100% {
    transform: translateY(-50%);
  }
}

/* 向下滚动动画关键帧 */
@keyframes scrollDown {
  0% {
    transform: translateY(-50%);
  }
  100% {
    transform: translateY(0);
  }
}

/* 水平滚动时的布局方式 */
.scroll-content[style*="translateX"] {
  display: flex;
  align-items: center;

  .scroll-item {
    display: flex;
    flex-shrink: 0;
  }
}
</style>

  1. 引入使用
import Scroll from "./ScrollVue.vue"
<Scroll :speed="5" direction="up" :hover="true" :items="orderList" :itemHeight="40">
     <!-- 自定义滚动项内容- -->
     <template #default="{ item }">
           <div class="scroll-item-content">
               <img src="@/assets/pageImg/start.png" class="start_icon" />
               {{item}}
            </div>
       </template>
</Scroll>
vue3实现无缝滚动列表-vue3-seamless-scroll 阅读详情

相关推荐

vue插件之vue-awesome-swiper轮播之全屏滚动

1.安装vue-awesome-swiper npm install vue-awesome-swiper --save 2.在mian.js文件中引入插件 import VueAwesomeSwiper from 'vue-awesome-swiper' import 'swiper/dist/css/swiper.css' Vue.use(VueAwesomeSwiper) 3.html骨...

zssd980210的博客 2449

Vue3中使用无缝滚动插件vue3-seamless-scroll

表格中的列数据进行横向无缝滚动,某一列进行筛选的时候,重新请求后端的数据,进行刷新。

努力的nana 5177

vue炫酷驾驶舱+echarts

vue实现的炫酷驾驶舱,压缩包内有实现的效果,当前实现的是前台效果,vue编写组件,在index.vue中引用组件,开发IDE用的是VScode

在Vue3项目中使用 vue3-seamless-scroll 无缝滚动插件

有需求需要用到这个大腿们设计的无缝滚动插件(vue3-seamless-scroll),效果不错,记录一下使用过程。本插件不需要全局引用,只需要局部引用到页面中即可,主要有三个步骤,分别是引入、注册、使用。

都随它大小便吧 9213

基于E310的纯逻辑代码实现AD9361射频收发

基于微相科技的E310平台实现AD9361的射频收发功能。采用纯逻辑控制的方式,不需要PS参与。实现了用VIO控制收发使能,发射功率,收发频率,数据接口时序控制,接收增益,BIST测试等功能。

xiaomingzi55的博客 2333

别再到处找离线包了!Visual Studio 2022 企业版/社区版离线安装保姆级教程(含工作负载选择指南)

本文提供Visual Studio 2022企业版/社区版离线安装的详细教程,包括工作负载选择指南和批量安装优化策略。针对网络隔离或带宽受限环境,介绍如何制作离线安装包、选择合适的工作负载组合,并分享高级技巧如增量更新和自动化部署,帮助团队高效统一开发环境配置。

weixin_28745821的博客 734

vue实现轮播图(滚动切换,无缝切换,自动切换,循环无回滚,暂停滚动等效果)

vue实现轮播图 喜欢的小伙伴可以和我互相关注哦 有任何疑问都可以私聊我 互相学习,共同进步 话不多说,先看效果 滚动切换、无缝切换、循环滚动 鼠标进入暂停自动滚动和离开继续自动滚动 主要代码: HTML结构 <div class="swiper"> <div class="moveL" @click="switchImg(-1)"><&...

qq_42586895的博客 2万+

WPS用户看过来:避开格式错乱坑,用WPS Office完美制作红头文件(2024最新版)

本文详细解析了WPS Office与Word在红头文件制作中的核心差异,提供了2024年最新版的零误差实战指南。从字体处理、页面布局到红头制作关键步骤,帮助用户避开格式错乱坑,确保跨设备显示一致。特别针对WPS用户优化,解决字体丢失、版式错位等常见问题。

weixin_26800111的博客 218

VUE:Ul列表内容自动向上滚动

tips: 不需要背景图将 background 相关删除就行。2.鼠标移入移出事件:移入时,元素停止滚动。1.每隔3秒,容器内的元素滚动一次。

qq_39691676的博客 359

S32K3实战:手把手教你用eMIOS模块实现电机PWM控制(附代码)

本文详细解析了NXP S32K3系列MCU的eMIOS模块在电机PWM控制中的应用,从硬件设计到软件实现,再到调试与优化,提供了完整的实战指南。通过eMIOS模块的硬件级PWM生成能力,工程师可以实现高精度的电机控制,适用于汽车电子和工业控制领域。

weixin_42570484的博客 149

开题报告该怎么写

考研即将来临,而一般很多大学都会选择在考研结束之后开始安排选题和开题报考(考研之前一般都不谈,老师也很人性化的,不愿意耽误你的复习) 但无论怎么推迟,我们最终都需要去面对并完成这些任务。 现在我就要教大家该如何写一个完整的开题报告! 准备模板。不同的学校有不同的格式,一般情况你的导师会给你们一个学校的标准格式,这个不用太费心。有了模板我们就可以按照模板的“线索”一步一步填充完成即可! 一般大致格式可谓: 研究背景/论文的目的、背景和意义 我们需要写明选择该题目的...

wuyueweifeng的博客 1097

css3配合transition-ground解决消息提示文字上下轮播

需求:vue页面--消息提示文字上下轮播 思路:使用vue列表过渡<transition-ground>配合css3动画 1、Vue过渡组件transition 简单介绍一下Vue的过渡组件transition,更详细的请看文档。 Vue 提供了transition的封装组件,可以在条件渲染(v-if)和条件展示(v-show)时,为任何元素和组件添加进入/离开的过渡效果。列表的过渡使用transition-group组件,使用tag属性来指定呈...

weixin_45282357的博客 643

二手分析仪器改造实战:如何用PMT搭建荧光检测电路(附完整电路图)

本文详细介绍了如何利用二手分析仪器中的光电倍增管(PMT)核心部件,进行荧光检测电路的实战改造。内容涵盖从PMT工作原理理解、高压供电电路设计、低噪声前置放大(跨阻放大器)到信号调理的完整流程,并提供了关键电路图与调试排错指南,旨在帮助电子爱好者与工程师低成本构建稳定、高灵敏度的专业检测系统。

weixin_29234239的博客 441

横向柱状图实现自动轮播,鼠标悬停和滚动控制切换

vue3+js项目中使用echarts实现横向柱状统计图自动无缝轮播,和鼠标悬停和滚动控制切换记录。3、drawBarChartH方法,我是单独使用一个js专门定义echarts的配置。2、 监听数据变化,调用echarts更新渲染数据(数据是后端定时推送的)1、定义echarts渲染位置。

weixin_44254042的博客 650

OpenClaw(Clawdbot/Moltbot)如何正确的配置浏览器,实现对浏览器的自动化操作功能(浏览器状态为running:false怎么办)

OpenClaw(Clawdbot/Moltbot)浏览器自动化功能无效?🤖 本文详细介绍如何解决这个问题🔧,让你的OpenClaw(Clawdbot/Moltbot)真正具备"睁眼看世界"的能力,支持网页搜索、点击操作和截图等功能 ✅

XiaoqiangClub的博客 8110

【面试系列】数据分析师高频面试题及详细解答

本文为数据分析师岗位提供了详尽的面试题库和解答,涵盖初级、中级和高级三个层次。初级面试题涉及基本的数据处理和统计分析知识,如SQL查询、数据清理和基础统计概念。中级面试题则重点考察数据可视化、复杂查询和数据建模等技能。高级面试题则深入探讨高级统计方法、大数据处理和高级分析工具的使用。通过这些问题和解答,候选人可以全面了解数据分析师岗位所需的技能,帮助其更好地准备面试。常考知识点总结部分则系统归纳了数据分析师岗位的关键技能领域。

在路上的专栏 5230

vue轮播图

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="js/dist_vue.js" type="text/javascript" charset="utf-8"></script> <style type="text/css"> *{ padding: 0;.

m0_48660016的博客 127

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

vue-seamless-scroll多方向滚动实战:上下左右全方位滚动实现指南 [特殊字符]

**vue-seamless-scroll** 是一个专为 Vue.js 设计的无缝滚动组件,能够实现流畅的上下左右全方位滚动效果。这个强大的组件让开发者能够轻松创建新闻列表、跑马灯、产品展示等多种滚动场景,无需复杂的CSS动画或JavaScript代码。对于前端开发者和Vue.js用户来说,vue-seamless-scroll提供了一个简单高效的解决方案,让你的网页动感十足! ## 为什么选

gitblog_00088的博客 769

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

柳晓黑胡椒札记:粉丝见证的灵感狂欢[gis群]

柳晓黑胡椒札记:粉丝见证的灵感狂欢

喜大普奔 560

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

vue 造轮子 自定义组件 持续更新~~~~

如何把自定义组件,注册为全局组件 vue3.x版本 一般项目的src/comonents/目录下,新建一个index.js // 扩展vue原有的功能:全局组件,自定义指令,挂载原型方法,注意:没有全局过滤器。 // 这就是插件 // vue2.0插件写法要素:导出一个对象,有install函数,默认传入了Vue构造函数,Vue基础之上扩展 // vue3.0插件写法要素:导出一个对象,有install函数,默认传入了app应用实例,app基础之上扩展 import XtxSkeleton from '.

呆呆狗 1000

vue.js中使用swiper插件实现图片轮播

第一步:安装swiper:npm install swiper@3.4.1 --save-dev 完成之后,你会在项目的node_modules文件夹中多一个swiper文件夹。 第二步:引用组件 import Swiper from 'swiper'; import 'swiper/dist/css/swiper.min.css'; 第三步:html中如何使用: &lt;di...

山有木兮木有枝 心悦君兮君不知 4440

Vue 向上滚动、向下滚动 轮播图

前言 原理解说 先说向上的轮播 在盒子里面放置4张图片 复制4张一样的图片放在后面(即乘2) 设置外层盒子的高度为4张图的高度,让超出部分隐藏起来overflow:hidden 给定一个速度,即每次移动的像素 >=1px 设置一个定时器,一直改变内层盒子的offsetTop的位置 即可以实现让图片向上/向下滚动 解释一下中间的一个判断 当向上滚动的时候,offsetTop会一直变小,也就是越来越大的负数 此时内层盒子的top为0,即从第一张图开始向上轮播 第一张图 第二张图 第三张图 (乘2的原因:

girl_Xiaomin的博客 4984

vue3实现无缝滚动列表(大屏数据轮播场景)

vue3目前可以通过第三方组件来实现这个需求。下面介绍一下这个第三方滚动组件--是一个用于 Vue 3 的插件,用于实现无缝滚动的组件。它可以让内容在水平或垂直方向上无缝滚动,适用于展示轮播图、新闻滚动、图片展示等场景。:在内容超出容器宽度或高度时,可以实现自动无缝滚动,形成连续的视觉效果。:提供了多种配置选项来控制滚动的速度、方向、内容显示方式等。:支持响应式设计,可以根据父容器的大小自动调整内容的显示和滚动效果。:内容可以是任意的 Vue 组件或 HTML 元素,可以自定义每一项的样式和内容。

蒾酒的博客 6647

vue实现轮播图(跑马灯、无缝滚动、无限切换效果)

vue实现轮播图(跑马灯、无缝滚动、无限切换、淡入淡出等轮播图效果),简简单单,复制粘贴,开箱即用,不依赖第三方插件、组件。

m0_59224033的博客 3万+

利用vueJs实现图片轮播

最近新学习了vuejs,尝试着用vuejs写了一个简单的图片轮播,便做个简单的记录 以下只贴出carousel.vue代码,其他的省略 左移 右移 const

南宫凌萱的博客 1万+

Vue自定义行数 文字向上滚动轮播效果

效果图 列表无限向上轮播 <template> <div class="marquee"> <div class="marquee_box" ref="marquee_box"> <ul class="marquee_list" :class="{marquee_top:animate}"> <li v...

Ajaxguan的博客 4084
上一篇: JavaScript+CSS实现文字逐行显示特效
下一篇: vue 弹窗出现带动画效果(从按钮位置滑出并从小变大的弹窗)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值