当前位置: 首页 > news >正文

原生js写数据自动纵向滚动,鼠标移入后停止滚动可手动滚动,鼠标移出转自动

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>滚动页面</title><link rel="stylesheet" href="styles.css"><style>body,html {margin: 0;padding: 0;overflow: hidden;}#scrollContainer {width: 100%;height: 100vh;overflow: hidden;position: relative;}#scrollContent {display: flex;flex-direction: column;transition: transform 0.3s ease;}.item {width: 100%;height: 100vh;display: flex;justify-content: center;align-items: center;font-size: 5em;color: white;}.item:nth-child(odd) {background-color: #333;}.item:nth-child(even) {background-color: #666;}</style>
</head><body><div id="scrollContainer"><div id="scrollContent"><div class="item">1</div><div class="item">2</div><div class="item">3</div><div class="item">4</div><div class="item">5</div></div></div>
</body><script>const scrollContainer = document.getElementById('scrollContainer');const scrollContent = document.getElementById('scrollContent');let currentPosition = 0;let intervalId = null;const scrollDistance = 2;const itemHeight = scrollContent.clientHeight / scrollContent.children.length;const maxScrollPosition = 0;const minScrollPosition = -itemHeight * (scrollContent.children.length - 1);function autoScroll() {if (currentPosition <= minScrollPosition) {currentPosition = 0;}scrollContent.style.transform = `translateY(${currentPosition}px)`;currentPosition -= scrollDistance;}function startAutoScroll() {intervalId = setInterval(autoScroll, 20);}function stopAutoScroll() {clearInterval(intervalId);}function handleWheel(event) {currentPosition -= event.deltaY;if (currentPosition > maxScrollPosition) {currentPosition = maxScrollPosition;} else if (currentPosition < minScrollPosition) {currentPosition = minScrollPosition;}scrollContent.style.transform = `translateY(${currentPosition}px)`;}scrollContainer.addEventListener('mouseenter', function () {stopAutoScroll();scrollContainer.addEventListener('wheel', handleWheel);});scrollContainer.addEventListener('mouseleave', function () {scrollContainer.removeEventListener('wheel', handleWheel);startAutoScroll();});startAutoScroll();
</script></html>
  • 初始化变量(currentPositionintervalIdscrollDistanceitemHeightmaxScrollPositionminScrollPosition),用于跟踪滚动状态和动画。
  • autoScroll()函数持续地将scrollContent向上移动(translateY),直到达到minScrollPosition,然后重置。
  • startAutoScroll()stopAutoScroll()函数通过setIntervalclearInterval控制自动滚动动画。
  • handleWheel(event)函数根据鼠标滚轮事件(wheel)调整currentPosition,确保滚动保持在maxScrollPositionminScrollPosition定义的范围内。
  • scrollContainer上的事件监听器(mouseentermouseleave)触发自动滚动停止/开始,并启用/禁用通过鼠标滚轮进行手动滚动。
  • mouseenter时,自动滚动停止,并且可以通过鼠标滚轮进行手动滚动。
  • mouseleave时,手动滚动停止,并且自动滚动恢复。
  • #scrollContent中的每个项目占满视口高度,页面可以通过自动或手动方式平滑滚动这些项目。
http://www.lryc.cn/news/377860.html

相关文章:

  • 板凳----Linux/Unix 系统编程手册 25章 进程的终止
  • 若依Ruoyi-vue和element admin的区别,该如何选择。
  • Sklearn之朴素贝叶斯应用
  • 网络编程(二)TCP编程 TCP粘包问题
  • 【总线】AXI总线:FPGA设计中的通信骨干
  • Cesium源码解析六(3dtiles属性获取、建筑物距离计算、建筑物着色及其原理分析)
  • AI 情感聊天机器人之旅 —— 相关论文调研
  • WPF Prism框架搭建
  • MyBatisplus使用报错--Invalid bound statement
  • QT-QPainter实现一个动态充电的电池
  • 【云原生】Kubernetes----Metrics-Server组件与HPA资源
  • 模拟原神圣遗物系统-小森设计项目,设计圣遗物(生之花,死之羽,时之沙,空之杯,理之冠)抽象类
  • 仿真模拟--telnet服务两种认证模式(自作)
  • Apple Phone Memory
  • Kubernetes容器运行时:Containerd vs Docke
  • 【java 线程的状态】
  • php加密验签
  • 【Golang - 90天从新手到大师】Day06 - 数组
  • java的有参构造方法
  • Vue66-vue-默认插槽
  • tsf-consul的使用
  • 【perl】基本语法 /备忘录/
  • mongodb 集群安装
  • 绿茶集团重启IPO:流量渐退、业绩波动,还能讲出好故事吗?
  • Git与SSH
  • 我的创作纪念日--码农阿豪
  • Git 学习笔记(超详细注释,从0到1)
  • GitLab项目组相关操作(创建项目组Group、创建项目组的项目、为项目添加成员并赋予权限)
  • 英语恶补ing
  • DS1339C串行实时时钟-国产兼容RS4C1339